Portafolios de Inversión¶

Portafolio Eficiente: Optimización de la cartera de Markowitz¶

image.png

Contenido¶

Descripción

  1. Introducción a la teoría de Markowitz
  2. Supuestos de la teoría de Markowitz
  3. Diversificación de la teoría de Markowitz
  4. Fronteras eficientes
  5. Data
  6. Riesgo de cartera
  7. Paqueterías a utilizar
  8. Modelado
  9. Rentabilidad logarítmica 10 Rendimiento esperado y volatilidades
  10. Modelo de Markowitz
  11. Participación por portafolio

Descripción: En el siguiente entrenamiento se aplicará la teoría de portafolios eficientes para la elaboración de una cartera de inversión con seis valores bursátiles correspondientes a empresas pertenecientes a diferentes sectores económicos y registradas en el índice Standard and Poor 500 (S&P 500).

1. Introducción a la teoría de Markowitz¶

En 1952, un economista llamado Harry Markowitz escribió un artículo titulado “Portfolio Selection”, un documento que contenía teorías que transformaron el panorama de la gestión de cartera, páginas que le otorgarían el Premio Nobel de Economía casi cuatro décadas después.

Antagónica a las estrategias clásicas de inversión, su Teoría de Portafolio Moderna continúa siendo una estrategia de inversión utilizada por traders profesionales. Esta herramienta de gestión de cartera, si se usa correctamente, puede dar como resultado una cartera de inversión diversa y rentable.

La idea central de su teoría plantea que el inversor racional, buscará maximizar sus beneficios (retornos) asumiendo el menor riesgo (volatilidad) posible, esto se puede lograr con la diversificación de la cartera, eligiendo en principio, acciones que tengan una correlación baja o negativa. Por ejemplo, combinando acciones de empresas con distinta actividad económica.

La teoría de Markowitz también es conocida como análisis de varianza media, que se resume en: encontrar el mayor rendimiento en un determinado nivel de riesgo o el menor riesgo en un determinado nivel de rendimiento.

2. Supuestos de la teoría de Markowitz:¶

Los inversores son racionales y se comportan de manera que maximicen su utilidad con un determinado nivel de ingresos o dinero. Los inversores tienen acceso gratuito a información justa y correcta sobre los rendimientos y el riesgo. Los mercados son eficientes y absorben la información de manera rápida y perfecta. Los inversores son reacios al riesgo y tratan de minimizar el riesgo y maximizar el rendimiento. Los inversores basan sus decisiones en los rendimientos esperados y la varianza o desviación estándar de estos rendimientos de la media. Los inversores eligen rendimientos más altos a rendimientos más bajos para un determinado nivel de riesgo.

Supuestos del modelo: Los retornos siguen una distribución normal. Una función de utilidad cuadrática representa las decisiones de los inversores.

3. Diversificación de la teoría de Markowitz :¶

Markowitz postuló que la diversificación no solo debe apuntar a reducir el riesgo de un valor reduciendo su variabilidad o desviación estándar, sino también reduciendo la covarianza o el riesgo interactivo de dos o más valores en una cartera. Como por combinación de diferentes valores, es teóricamente posible tener un rango de riesgo que varía de cero a infinito.

4. Frontera eficiente:¶

La frontera eficiente es el conjunto de carteras óptimas que ofrecen el rendimiento esperado más alto para un nivel de riesgo definido o el riesgo más bajo para un nivel dado de rendimiento esperado.

5. Data¶

Los seis activos bursátiles de la cartera forman parte del índice S&P 500, se seleccionó el período desde enero 2010 hasta abril 2020:

Microsotf Corporation (MSFT): Importante compañía tecnológica multinacional con sede en Redmond, Washington, EE.UU, es la de mayor capitalización dentro del índice S&P 500.

Johnson & Johnson (JNJ): Histórico fabricante de dispositivos médicos, productos farmacéuticos, de cuidado personal, perfumes y artículos para bebés.

Mastercard Incorporated (MA): Una de las más importantes multinacionales de servicios financieros con sede en Purchase, Nueva York, Estados Unidos.

PepsiCo Inc (PEP): Exitosa empresa multinacional estadounidense dedicada a la fabricación, comercialización y distribución de bebidas y aperitivos.

Walmart Corporate (WMT): Corporación multinacional de tiendas de origen estadounidense, que opera cadenas de grandes almacenes de descuento y clubes de almacenes.

McDonald’s Corporation (MCD): Es una franquicia de restaurantes de servicio rápido estadounidense con sede en Illinois Chicago.

6. Riesgo de cartera y rendimiento esperado¶

El rendimiento esperado de la cartera se calcula como una suma ponderada de los rendimientos de los activos individuales. Para su cálculo se utiliza la siguiente fórmula: Rep:∑i=1n(Rep1W1)+(Rep2W2)+....(Rep6W6)

Para calcular el riesgo de un portafolio se necesitan conocer antes dos medidas estadísticas: la covarianza y el coeficiente de correlación.

Covarianza¶

La covarianza es una medida de la relación entre dos variables aleatorias. La métrica evalúa cuánto, en qué medida, las variables cambian juntas. En otras palabras, es esencialmente una medida de la varianza entre dos variables. Sin embargo, la métrica no evalúa la dependencia entre variables. Su cálculo se realiza mediante la sumatoria de la diferencia entre las rentabilidades de cada uno de los activos (Ri) y su rentabilidad esperada (Re), multiplicados por la probabilidad de ocurrencia (p).

Coeficiente de Correlación¶

La correlación mide la fuerza de la relación entre variables. La correlación es la medida a escala de la covarianza. Es adimensional. En otras palabras, el coeficiente de correlación siempre es un valor puro y no se mide en ninguna unidad.

Riesgo (Desviación estándar)¶

La variación de la cartera es un valor estadístico que evalúa el grado de dispersión de los rendimientos de una cartera. Es un concepto importante en la teoría moderna de la inversión. Aunque la medida estadística en sí misma puede no proporcionar información significativa, podemos calcular la desviación estándar de la cartera utilizando la varianza de la cartera.

7. Paqueterías a utilizar:¶

8. Modelado¶

A continuación se armarán los datos de cada serie temporal utilizando la paquetería de portfolio y se graficarán.

In [ ]:
import yfinance as yf

# Definir el símbolo del Índice S&P 500
sp500_symbol = '^GSPC'

# Definir el rango de fechas
start_date = '2010-01-01'
end_date = '2023-04-30'

# Obtener los datos del Índice S&P 500
sp500_data = yf.download(sp500_symbol, start=start_date, end=end_date)['Adj Close']

# Mostrar los primeros y últimos registros
print(sp500_data.head())
print(sp500_data.tail())
[*********************100%%**********************]  1 of 1 completed
Date
2010-01-04    1132.989990
2010-01-05    1136.520020
2010-01-06    1137.140015
2010-01-07    1141.689941
2010-01-08    1144.979980
Name: Adj Close, dtype: float64
Date
2023-04-24    4137.040039
2023-04-25    4071.629883
2023-04-26    4055.989990
2023-04-27    4135.350098
2023-04-28    4169.479980
Name: Adj Close, dtype: float64
In [ ]:
import yfinance as yf
import matplotlib.pyplot as plt

# Definir el símbolo del Índice S&P 500
sp500_symbol = '^GSPC'

# Definir el rango de fechas
start_date = '2010-01-01'
end_date = '2023-12-31'

# Obtener los datos del Índice S&P 500
sp500_data = yf.download(sp500_symbol, start=start_date, end=end_date)['Adj Close']

# Graficar el histórico del Índice S&P 500
plt.figure(figsize=(10, 5))
plt.plot(sp500_data.index, sp500_data, label='Índice S&P 500')
plt.title('Histórico del Índice S&P 500 (2010-2023)')
plt.xlabel('Fecha')
plt.ylabel('Precio de Cierre Ajustado')
plt.legend()
plt.show()
[*********************100%%**********************]  1 of 1 completed
No description has been provided for this image
In [ ]:
import yfinance as yf
import matplotlib.pyplot as plt

# Definir el símbolo de Microsoft Corporation
msft_symbol = 'MSFT'

# Definir el rango de fechas
start_date = '2010-01-01'
end_date = '2023-12-31'

# Obtener los datos de Microsoft Corporation
msft_data = yf.download(msft_symbol, start=start_date, end=end_date)['Adj Close']

# Graficar el histórico de Microsoft Corporation
plt.figure(figsize=(10, 5))
plt.plot(msft_data.index, msft_data, label='Microsoft Corporation (MSFT)')
plt.title('Histórico de Microsoft Corporation (2010-2023)')
plt.xlabel('Fecha')
plt.ylabel('Precio de Cierre Ajustado')
plt.legend()
plt.show()
[*********************100%%**********************]  1 of 1 completed
No description has been provided for this image
In [ ]:
import yfinance as yf
import matplotlib.pyplot as plt

# Definir el símbolo de Johnson & Johnson
jnj_symbol = 'JNJ'

# Definir el rango de fechas
start_date = '2010-01-01'
end_date = '2023-12-31'

# Obtener los datos de Johnson & Johnson
jnj_data = yf.download(jnj_symbol, start=start_date, end=end_date)['Adj Close']

# Graficar el histórico de Johnson & Johnson
plt.figure(figsize=(10, 5))
plt.plot(jnj_data.index, jnj_data, label='Johnson & Johnson (JNJ)')
plt.title('Histórico de Johnson & Johnson (2010-2023)')
plt.xlabel('Fecha')
plt.ylabel('Precio de Cierre Ajustado')
plt.legend()
plt.show()
[*********************100%%**********************]  1 of 1 completed
No description has been provided for this image
In [ ]:
import yfinance as yf
import matplotlib.pyplot as plt

# Definir el símbolo de Mastercard Incorporated
ma_symbol = 'MA'

# Definir el rango de fechas
start_date = '2010-01-01'
end_date = '2023-12-31'

# Obtener los datos de Mastercard Incorporated
ma_data = yf.download(ma_symbol, start=start_date, end=end_date)['Adj Close']

# Graficar el histórico de Mastercard Incorporated
plt.figure(figsize=(10, 5))
plt.plot(ma_data.index, ma_data, label='Mastercard Incorporated (MA)')
plt.title('Histórico de Mastercard Incorporated (2010-2023)')
plt.xlabel('Fecha')
plt.ylabel('Precio de Cierre Ajustado')
plt.legend()
plt.show()
[*********************100%%**********************]  1 of 1 completed
No description has been provided for this image
In [ ]:
import yfinance as yf
import matplotlib.pyplot as plt

# Definir el símbolo de PepsiCo Inc.
pep_symbol = 'PEP'

# Definir el rango de fechas
start_date = '2010-01-01'
end_date = '2023-12-31'

# Obtener los datos de PepsiCo Inc.
pep_data = yf.download(pep_symbol, start=start_date, end=end_date)['Adj Close']

# Graficar el histórico de PepsiCo Inc.
plt.figure(figsize=(10, 5))
plt.plot(pep_data.index, pep_data, label='PepsiCo Inc. (PEP)')
plt.title('Histórico de PepsiCo Inc. (2010-2023)')
plt.xlabel('Fecha')
plt.ylabel('Precio de Cierre Ajustado')
plt.legend()
plt.show()
[*********************100%%**********************]  1 of 1 completed
No description has been provided for this image
In [ ]:
import yfinance as yf
import matplotlib.pyplot as plt

# Definir el símbolo de Walmart Corporate
wmt_symbol = 'WMT'

# Definir el rango de fechas
start_date = '2010-01-01'
end_date = '2023-12-31'

# Obtener los datos de Walmart Corporate
wmt_data = yf.download(wmt_symbol, start=start_date, end=end_date)['Adj Close']

# Graficar el histórico de Walmart Corporate
plt.figure(figsize=(10, 5))
plt.plot(wmt_data.index, wmt_data, label='Walmart Corporate (WMT)')
plt.title('Histórico de Walmart Corporate (2010-2023)')
plt.xlabel('Fecha')
plt.ylabel('Precio de Cierre Ajustado')
plt.legend()
plt.show()
[*********************100%%**********************]  1 of 1 completed
No description has been provided for this image
In [ ]:
import yfinance as yf
import matplotlib.pyplot as plt

# Definir el símbolo de McDonald's Corporation
mcd_symbol = 'MCD'

# Definir el rango de fechas
start_date = '2010-01-01'
end_date = '2023-12-31'

# Obtener los datos de McDonald's Corporation
mcd_data = yf.download(mcd_symbol, start=start_date, end=end_date)['Adj Close']

# Graficar el histórico de McDonald's Corporation
plt.figure(figsize=(10, 5))
plt.plot(mcd_data.index, mcd_data, label="McDonald's Corporation (MCD)")
plt.title('Histórico de McDonald\'s Corporation (2010-2023)')
plt.xlabel('Fecha')
plt.ylabel('Precio de Cierre Ajustado')
plt.legend()
plt.show()
[*********************100%%**********************]  1 of 1 completed
No description has been provided for this image
In [ ]:
import matplotlib.pyplot as plt
import yfinance as yf
import pandas as pd

# Definir los símbolos de los activos
tickers = ['MSFT', 'JNJ', 'MA', 'PEP', 'WMT', 'MCD']

# Definir el rango de fechas
start_date = '2010-01-01'
end_date = '2023-12-31'

# Obtener los datos de los activos
data = yf.download(tickers, start=start_date, end=end_date)['Adj Close']

# Calcular los rendimientos diarios
returns = data.pct_change().dropna()
# Crear subgráficos
fig, axs = plt.subplots(3, 2, figsize=(15, 10))
fig.suptitle('Históricos de Precios de los Activos Seleccionados (2010-2023)')

# Definir los nombres de los activos
nombres_activos = ['Microsoft (MSFT)', 'Johnson & Johnson (JNJ)', 'Mastercard (MA)',
                   'PepsiCo (PEP)', 'Walmart (WMT)', "McDonald's (MCD)"]

# Iterar sobre los activos y sus nombres para graficar
for i, (activo, nombre) in enumerate(zip(data.columns, nombres_activos)):
    row = i // 2
    col = i % 2
    axs[row, col].plot(data.index, data[activo], label=nombre)
    axs[row, col].set_title(nombre)
    axs[row, col].set_xlabel('Fecha')
    axs[row, col].set_ylabel('Precio de Cierre Ajustado')
    axs[row, col].legend()

# Ajustar el espaciado entre subgráficos
plt.tight_layout(rect=[0, 0, 1, 0.96])
plt.show()
[*********************100%%**********************]  6 of 6 completed
No description has been provided for this image
In [ ]:
import yfinance as yf
import pandas as pd

# Definir los símbolos de los activos
tickers = ['MSFT', 'JNJ', 'MA', 'PEP', 'WMT', 'MCD']

# Definir el rango de fechas
start_date = '2010-01-01'
end_date = '2023-12-31'

# Obtener los datos de los activos
data = yf.download(tickers, start=start_date, end=end_date)['Adj Close']

# Calcular los rendimientos diarios
returns = data.pct_change().dropna()

# Calcular la rentabilidad logarítmica
log_returns = returns.apply(lambda x: (1 + x).apply(lambda y: y if y > 0 else 1/y).apply(lambda z: z - 1))

# Calcular el rendimiento esperado
mean_returns = log_returns.mean()

# Mostrar la rentabilidad logarítmica y el rendimiento esperado para cada activo
print('Rentabilidad Logarítmica:')
print(log_returns.head())

print('\nRendimiento Esperado:')
print(mean_returns)
[*********************100%%**********************]  6 of 6 completed
Rentabilidad Logarítmica:
                 JNJ        MA       MCD      MSFT       PEP       WMT
Date                                                                  
2010-01-05 -0.011596 -0.002959 -0.007646  0.000323  0.012084 -0.009958
2010-01-06  0.008134 -0.001445 -0.013644 -0.006137 -0.010004 -0.002236
2010-01-07 -0.007137 -0.006535  0.007323 -0.010400 -0.006355  0.000560
2010-01-08  0.003438  0.000354 -0.000969  0.006897 -0.003281 -0.005037
2010-01-11  0.000156 -0.016458  0.007762 -0.012720 -0.001152  0.016501

Rendimiento Esperado:
JNJ     0.000427
MA      0.000969
MCD     0.000579
MSFT    0.000898
PEP     0.000456
WMT     0.000471
dtype: float64

Se observan en conjunto los históricos de las series temporales y se aprecia el comportamiento creciente en cada uno de ellos con algunos períodos de desaceleración. Por último, la perturbación al final del primer trimestre del 2020 impulsado por la alarma de pandemia del Covid-19.

9. Rentabilidad logarítmica¶

Uno de los supuestos del modelo es que los retornos (rentabilidades) tienen el comportamiento de una distribución normal. La rentabilidad logarítmica permite su uso en probabilidades que se basan en este tipo de distribución con la restricción de que los valores no pueden ser inferiores a (-1).

In [ ]:
import yfinance as yf

# Definir el símbolo del Índice S&P 500
sp500_symbol = '^GSPC'

# Definir el rango de fechas
start_date = '2010-01-01'
end_date = '2023-12-31'

# Obtener los datos del Índice S&P 500
sp500_data = yf.download(sp500_symbol, start=start_date, end=end_date)['Adj Close']

# Calcular los rendimientos diarios
sp500_returns = sp500_data.pct_change().dropna()

# Calcular la rentabilidad logarítmica si deseas
import numpy as np
sp500_log_returns = np.log(1 + sp500_returns)

# Mostrar los primeros y últimos registros de los rendimientos
print('Rendimientos Diarios del Índice S&P 500:')
print(sp500_returns.head())
print(sp500_returns.tail())

# Si deseas calcular la rentabilidad logarítmica, puedes imprimir sp500_log_returns
[*********************100%%**********************]  1 of 1 completed
Rendimientos Diarios del Índice S&P 500:
Date
2010-01-05    0.003116
2010-01-06    0.000546
2010-01-07    0.004001
2010-01-08    0.002882
2010-01-11    0.001747
Name: Adj Close, dtype: float64
Date
2023-10-05   -0.001304
2023-10-06    0.011815
2023-10-09    0.006304
2023-10-10    0.005208
2023-10-11    0.001560
Name: Adj Close, dtype: float64
In [ ]:
import yfinance as yf
import matplotlib.pyplot as plt

# Definir el símbolo del Índice S&P 500
sp500_symbol = '^GSPC'

# Definir el rango de fechas
start_date = '2010-01-01'
end_date = '2023-12-31'

# Obtener los datos del Índice S&P 500
sp500_data = yf.download(sp500_symbol, start=start_date, end=end_date)['Adj Close']

# Calcular los rendimientos diarios
sp500_returns = sp500_data.pct_change().dropna()

# Calcular la rentabilidad logarítmica si deseas
import numpy as np
sp500_log_returns = np.log(1 + sp500_returns)

# Graficar los rendimientos diarios
plt.figure(figsize=(10, 5))
plt.plot(sp500_returns.index, sp500_returns, label='Rendimientos Diarios', color='blue')
plt.title('Rendimientos Diarios del Índice S&P 500 (2010-2023)')
plt.xlabel('Fecha')
plt.ylabel('Rendimientos Diarios')
plt.legend()
plt.show()
[*********************100%%**********************]  1 of 1 completed
No description has been provided for this image
In [ ]:
import matplotlib.pyplot as plt

# Definir los nombres de los activos en la cartera
nombres_activos = ['Microsoft (MSFT)', 'Johnson & Johnson (JNJ)', 'Mastercard (MA)',
                   'PepsiCo (PEP)', 'Walmart (WMT)', "McDonald's (MCD)"]

# Crear subgráficos
fig, axs = plt.subplots(3, 2, figsize=(15, 10))
fig.suptitle('Rendimientos Diarios de la Cartera (2010-2023)')

# Iterar sobre los activos y sus nombres para graficar
for i, (activo, nombre) in enumerate(zip(log_returns.columns, nombres_activos)):
    row = i // 2
    col = i % 2
    axs[row, col].plot(log_returns.index, log_returns[activo], label=nombre, color='green')
    axs[row, col].set_title(nombre)
    axs[row, col].set_xlabel('Fecha')
    axs[row, col].set_ylabel('Rendimientos Logarítmicos')
    axs[row, col].legend()

# Ajustar el espaciado entre subgráficos
plt.tight_layout(rect=[0, 0, 1, 0.96])
plt.show()
No description has been provided for this image
In [ ]:
# Calcular los rendimientos diarios de las empresas de la cartera
returns_cartera = log_returns.copy()  # Copiar el DataFrame de rentabilidad logarítmica

# Mostrar los primeros y últimos registros de los rendimientos de la cartera
print(returns_cartera.head())
print(returns_cartera.tail())
                 JNJ        MA       MCD      MSFT       PEP       WMT
Date                                                                  
2010-01-05 -0.011596 -0.002959 -0.007646  0.000323  0.012084 -0.009958
2010-01-06  0.008134 -0.001445 -0.013644 -0.006137 -0.010004 -0.002236
2010-01-07 -0.007137 -0.006535  0.007323 -0.010400 -0.006355  0.000560
2010-01-08  0.003438  0.000354 -0.000969  0.006897 -0.003281 -0.005037
2010-01-11  0.000156 -0.016458  0.007762 -0.012720 -0.001152  0.016501
                 JNJ        MA       MCD      MSFT       PEP       WMT
Date                                                                  
2023-10-05  0.010417  0.002569 -0.013995  0.001254 -0.052158 -0.011925
2023-10-06  0.003182  0.009564 -0.015898  0.024737  0.001187 -0.016784
2023-10-09  0.005709 -0.008116  0.006849  0.007823  0.006675 -0.003644
2023-10-10 -0.001135  0.014263  0.006402 -0.004336  0.018840  0.011294
2023-10-11 -0.011745 -0.002497 -0.005566  0.009988 -0.012165  0.004569
In [ ]:
# Obtener un resumen estadístico de los rendimientos de la cartera
summary_cartera = returns_cartera.describe()

print(summary_cartera)
               JNJ           MA          MCD         MSFT          PEP  \
count  3466.000000  3466.000000  3466.000000  3466.000000  3466.000000   
mean      0.000427     0.000969     0.000579     0.000898     0.000456   
std       0.010610     0.017690     0.011783     0.016389     0.010902   
min      -0.100379    -0.127255    -0.158754    -0.147390    -0.114283   
25%      -0.004421    -0.007511    -0.004841    -0.007185    -0.004713   
50%       0.000294     0.001410     0.000752     0.000676     0.000466   
75%       0.005722     0.009198     0.005988     0.009249     0.005825   
max       0.079977     0.166109     0.181254     0.142169     0.129366   

               WMT  
count  3466.000000  
mean      0.000471  
std       0.012117  
min      -0.113758  
25%      -0.005203  
50%       0.000582  
75%       0.006264  
max       0.117085  
In [ ]:
# Calcular rendimientos medios y volatilidades
expected_returns = returns_cartera.mean()*100  # Rendimientos medios
volatilities = returns_cartera.std()*100      # Volatilidades

# Mostrar los rendimientos esperados y volatilidades
print("Rendimientos Medios:")
print(expected_returns)

print("\nVolatilidades:")
print(volatilities)
Rendimientos Medios:
JNJ     0.042700
MA      0.096891
MCD     0.057900
MSFT    0.089800
PEP     0.045637
WMT     0.047131
dtype: float64

Volatilidades:
JNJ     1.060997
MA      1.769016
MCD     1.178288
MSFT    1.638892
PEP     1.090172
WMT     1.211702
dtype: float64
In [ ]:
# Calcular rendimiento esperado y volatilidad del S&P 500
expected_return_sp500 = sp500_returns.mean()*100  # Rendimiento esperado del S&P 500
volatility_sp500 = sp500_returns.std()*100       # Volatilidad del S&P 500

# Crear un DataFrame para almacenar los resultados
summary_df = pd.DataFrame({
    'Rendimiento Esperado': [expected_return_sp500] + list(expected_returns),
    'Volatilidad': [volatility_sp500] + list(volatilities)
}, index=['S&P 500'] + list(expected_returns.index))

# Mostrar el DataFrame con los resultados
print(summary_df)
         Rendimiento Esperado  Volatilidad
S&P 500              0.045082     1.107873
JNJ                  0.042700     1.060997
MA                   0.096891     1.769016
MCD                  0.057900     1.178288
MSFT                 0.089800     1.638892
PEP                  0.045637     1.090172
WMT                  0.047131     1.211702

Rendimiento promedio esperado:¶

El rendimiento promedio esperado diario del mercado está representado por el Índice S&P 500, en este caso es del 0,044%, un valor por debajo del rendimiento medio diario individual de la mayoria de los demás activos que componen la cartera.

El activo de mayor rendimiento viene dado por las acciones de Marter Card (MA) con un rendimiento promedio diario esperado de 0,096%; le siguen los valores de Microsoft (MSFT ) con un 0,089%; en el tercer puesto se encuentra el instrumento de Mc Donalds (MCD) con un 0,057%. Y los últimos lugares son para Johnson & Johnson (JNJ) con 0,042%; PepsiCo Inc (PEP) con 0,045% y Walmart Corporate (WMT) 0,047%.

Volatilidad:¶

Observando la volatilidad representada por la desviación estándar del mercado es decir, del S&P 500 para el caso, se ubica en 1,10% el valor más bajo comparado con los activos seleccionados excepto el de Johnson & Johnson (JNJ) y PepsiCo Inc (PEP).

El activo de menor volatilidad es el de Johnson & Johnson (JNJ) con el 1,06% diario; seguido por PepsiCo Inc (PEP) con el 1,09%; el tercer lugar es para el instrumento de Mc Donalds (MCD) con un 1,17%.

Los más volátiles serían, en primer lugar Marter Card (MA) con 1,76% que a su vez, es el de mayor rendimiento diario; siguen Microsoft (MSFT ) y Walmart Corporate (WMT) con 1,63% y 1,21% respectivamente.

Luego viene los cálculos de las matrices de covarianzas y correlaciones, para finalizar con un mapa de calor.¶

In [ ]:
# Calcular matriz de covarianzas
cov_matrix = returns_cartera.cov()

# Calcular matriz de correlaciones
correlation_matrix = returns_cartera.corr()

# Crear un mapa de calor para la matriz de covarianzas
import seaborn as sns
import matplotlib.pyplot as plt

plt.figure(figsize=(10, 8))
sns.heatmap(cov_matrix, annot=True, cmap='coolwarm', fmt='0.4f', linewidths=0.5)
plt.title('Matriz de Covarianzas')
plt.show()

# Crear un mapa de calor para la matriz de correlaciones
plt.figure(figsize=(10, 8))
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm', fmt='0.4f', linewidths=0.5)
plt.title('Matriz de Correlaciones')
plt.show()
No description has been provided for this image
No description has been provided for this image

11. Modelo de Markowitz¶

El conjunto eficiente de Markowitz es una cartera con rendimientos que se maximizan para un determinado nivel de riesgo en función de la construcción de la cartera de varianza media . Tasa Libre de Riesgo

La tasa libre de riesgo representa el interés que un inversionista esperaría de una inversión absolutamente libre de riesgo durante un período de tiempo específico. La tasa real libre de riesgo puede calcularse restando la tasa de inflación actual del rendimiento del bono del Tesoro que coincida con la duración de su inversión. Restricciones Solo posición en largo.

image.png

Frontera Eficiente¶

En el gráfico de las fronteras eficientes se realizaron 2000 simulaciones MonteCarlo que son los pequeños puntos azules diseminados en el área, cada uno representa una cartera de rendimiento para un determinando nivel de riesgo.

En la frontera se encuentran veinte (20) círculos pequeños de color blanco, los que tienen el borde de color negro son los portafolios eficientes. El círculo rojo es el portafolio tangente y el círculo azul el portafolio con la mínima varianza global. Pesos de los portafolios

image.png

Portafolio Tangente¶

El portafolio tangente se elabora a partir del índice o razón de Sharpe, el cual calcula el exceso de rentabilidad sobre la tasa de interés libre de riesgo logrado por el portafolio por unidad de volatilidad o riesgo propio del portafolio. El ratio de Sharpe muestra la rentabilidad ajustada por la tasa libre de riesgo y el riesgo de la covarianza.

12. Participación por portafolio:¶

Composición del Portafolio Eficiente¶

Johnson & Johnson (JNJ): 31,9%

PepsiCo Inc (PEP): 20,4%

Walmart Corporate (WMT): 25,6%

McDonald’s Corporation (MCD): 22,1%

image.png

Composición del Portafolio Tangente¶

Microsotf Corporation (MSFT):4,1%

Johnson & Johnson (JNJ): 27,8%

Mastercard Incorporated (MA): 7,4%

PepsiCo Inc (PEP): 14,2%

Walmart Corporate (WMT): 23%

McDonald’s Corporation (MCD): 23,4%

image.png