0% encontró este documento útil (0 votos)
32 vistas8 páginas

Portafolio Optimo (Formulas)

Portafolio óptimo

Cargado por

Aquiles Banegas
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
32 vistas8 páginas

Portafolio Optimo (Formulas)

Portafolio óptimo

Cargado por

Aquiles Banegas
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

Portafolio Optimo

∆ %=Rentabilidad mensual= ( ( Valor n−Valor n−1 )


Valor n−1 )
∆ %=Rentabilidad mensual=
( Valor n−1
Valor n−1 )
−¿1

Ponderación = (1/Numero de acción)

Retorno Esperado (Mensual Promedio) = PROMEDIO (Columna Rentabilidad Mensual)

Volatilidad =DESVEST.P(Columna Rentabilidad Mensual)

Rentabilidad
Dominancia=Coeficiente de variacion= =Veces
Volatilidad (D std P)
Referencia: Valor más alto mayor dominancia
Evalúa el desempeño de una inversión o activo. Si la dominancia de Tesla es de 0.27, significa que la rentabilidad de Tesla en relación
con su volatilidad es de 0.27.

Beta=PENDIENTE (Columna Rentabilidad Mensual Acción, Columna Rentabilidad Mensual S&P500)


Beta =1.1

La beta es una medida de la volatilidad de un activo financiero en relación con el mercado en general. Una
beta de 1.1 para Tesla significa que, en promedio, Tesla tiende a ser aproximadamente un 10% más volátil
que el mercado en su conjunto. Por ejemplo, si el mercado aumenta un 1%, es probable que Tesla, en
promedio, aumente alrededor de un 1.1%.

Rentabilidad−Rf
Indice Sharper= =Veces
Volatilidad (D std P)
Referencia: Reducir el riesgo individual es necesario compañías con valores altos

El índice de Sharpe es una medida que evalúa el rendimiento de una inversión en relación con su riesgo. Una
lectura de 0.5 en el índice de Sharpe sugiere que la inversión ha generado un rendimiento adicional (retorno
sobre la inversión) de 0.5 unidades por cada unidad de riesgo asumida.

Rentabilidad−Rf
Indice Treynor= =Veces h
β
Referencia: un portafolio con riesgo hacia mercado más bajo es necesario compañías con valores altos

El índice de Treynor es una medida de desempeño financiero que evalúa el rendimiento de una inversión en
relación con el riesgo sistemático asumido, representado por la beta. Una lectura de 1.2 en el índice de
Treynor indica que la inversión ha generado un rendimiento adicional de 1.2 unidades por cada unidad de
beta. En términos simples, el índice de Treynor mide cuánto retorno adicional se ha obtenido por unidad de
riesgo sistémico (riesgo relacionado con el mercado en general).

5 Year Treasury Rate


1
12
Tasa de interes mensual=( 1+r ) −1
12
Tasa de interes ANUAL= ( 1+ r ) −1

Portafolio Total
Rentabilidad del Portafolio = SUMAPRODUCTO (Ponderación j; Retorno esperado j)
Varianza del Portafolio =MMULT (MMULT (Ponderación j; Matriz de Varianza y
Covarianza); TRANSPONER (Ponderación j))
Nota: ControlSHIFEnter
Volatilidad = RAIZ (Varianza del Portafolio)
Beta del Portafolio =SUMAPRODUCTO (Ponderación j; Betas j)

Entre mayor covarianza: Relacionado entre sí y menos diverso el riesgo

t
ℜ ( P )=W∗r
Donde

r = [ R1 R2 ⋯ R n ]

w=[ w1 w2 ⋯ w n ]
RI ( P )= √ w∗s∗wt
Donde

w=[ w1 w2 ⋯ w n ]

[ ]
2
σ1 σ 12 ⋯ σ1n
2
s= σ 21 σ … σ 2 n
2
⋮ ⋮
σ n 1 σ n 2 ⋱ σ 2n

Información del portafolio

RE(P)=SUMAPRODUCTO (Ponderación, Retorno esperado)

Varianza del Portafolio =MMULT (MMULT(Ponderación, Matriz Covarianza – Varianza),


TRANSPONER(Ponderación))

Volatilidad (Desv. Estándar) = RAIZ (Varianza del Portafolio)

Beta del Portafolio=SUMAPRODUCTO (ponderación, Beta de cada activo)

Creación de los 20 Portafolios


Ponderaciones de portafolio

Portafolio 1 Portafolio 20
Portafolio de mínima varianza Portafolio de máxima Rentabilidad

Establecer Objetivo: Varianza Establecer Objetivo: RE(P)


Para: Min Para: Max
Cambiando las celdas de las variables: Cambiando las celdas de las variables:
Seleccionar las ponderaciones Seleccionar las ponderaciones
Sujeto a las restricciones Sujeto a las restricciones
Celda suma del total =1 Celda suma del total =1
Selección de las celdas de la estructura ≥0 Selección de las celdas de la estructura ≥0
Rango=(Riesgo max- Riesgo min)/n-1

Riesgo del Portafolio n= Riesgo del Portafolion-1+Rango

Determinación de Rentabilidad por nivel de riesgo


Establecer Objetivo: RE(P)

Para: Max

Cambiando las celdas de las variables: Seleccionar las ponderaciones

Sujeto a las restricciones

 Celda suma del total =1


 Selección de las celdas de la estructura ≥0
 Volatilidad del portafolio= Riesgo del Portafolion

Creación de la línea tangente al portafolio


Max: índice Sharpe del portafolio

Sujeto a las restricciones

Celda suma del total =1

Selección de las celdas de la estructura ≥0

Código Google Colab


Código:001
# 1. Instalar librerías necesarias
!pip install --upgrade yfinance openpyxl --quiet
# 2. Importar librerías
import yfinance as yf
import pandas as pd
import matplotlib.pyplot as plt
from google.colab import files

# 3. Definir lista de activos


tickers = [
"AAPL", "MSFT", "AMZN", "NVDA", "GOOGL", "META", "TSLA", # Las 7
Magníficas
"SPY", # ETF que replica el S&P 500
"IEF" # ETF de bonos del Tesoro 7–10 años
]

# 4. Definir rango de fechas últimos 5 años desde hoy


from datetime import datetime, timedelta
hoy = datetime.today()
inicio = hoy - timedelta(days=5*365)

# 5. Descargar precios ajustados diarios


datos = yf.download(tickers, start=inicio.strftime('%Y-%m-%d'),
end=hoy.strftime('%Y-%m-%d'), auto_adjust=False)

# 6. Extraer precios ajustados de cierre y convertir a mensual


precios_diarios = datos["Adj Close"]
precios_mensuales = precios_diarios.resample('M').last()

# 7. Guardar como Excel


archivo = "Precios_7_Magnificas_SP500_Bonos_Mensual.xlsx"
precios_mensuales.to_excel(archivo)

# 8. Descargar el archivo
files.download(archivo)

# 9. Graficar precios mensuales


plt.figure(figsize=(14, 7))
for ticker in tickers:
plt.plot(precios_mensuales.index, precios_mensuales[ticker],
label=ticker)

plt.title("Precios mensuales ajustados (últimos 5 años)")


plt.xlabel("Fecha")
plt.ylabel("Precio (USD)")
plt.legend()
plt.grid(True)
plt.tight_layout()
plt.show()

Código:002
# ============================
# 1. Librerías (ya instaladas antes)
# ============================
import yfinance as yf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from google.colab import files
from datetime import datetime, timedelta

# ============================
# 2. Descargar datos
# ============================
tickers = [
"AAPL", "MSFT", "AMZN", "NVDA", "GOOGL", "META", "TSLA", # Las 7
Magníficas
"^GSPC", # S&P 500
"^FVX" # Bonos del Tesoro ~5 años
]

hoy = datetime.today()
inicio = hoy - timedelta(days=5*365)

datos = yf.download(tickers, start=inicio.strftime('%Y-%m-%d'),


end=hoy.strftime('%Y-%m-%d'), auto_adjust=False)

# ============================
# 3. Precios ajustados mensuales y rentabilidad
# ============================
precios_diarios = datos["Adj Close"]
precios_mensuales = precios_diarios.resample('ME').last() # Corrected
'M' to 'ME'
rentabilidad_mensual = precios_mensuales.pct_change().dropna() # en
decimal

# ============================
# 4. Cálculo de métricas de desempeño
# ============================
# Calculate monthly risk-free rate based on the mean of ^FVX
# Assuming ^FVX is an annual rate in percentage, convert to monthly
decimal rate
rf = (precios_diarios["^FVX"].mean() / 100 + 1)**(1/12) - 1 #
Corrected risk-free rate calculation

tickers_acciones = ["AAPL", "MSFT", "AMZN", "NVDA", "GOOGL", "META",


"TSLA"]
sp500 = rentabilidad_mensual["^GSPC"]

resumen = pd.DataFrame(index=tickers_acciones + ["^GSPC"])


resumen["Retorno Esperado (%)"] =
rentabilidad_mensual[tickers_acciones + ["^GSPC"]].mean() * 100
resumen["Desv. Estándar (%)"] = rentabilidad_mensual[tickers_acciones
+ ["^GSPC"]].std() * 100
resumen["Dominancia"] = resumen["Retorno Esperado (%)"] /
resumen["Desv. Estándar (%)"]

# Beta y Treynor
for ticker in tickers_acciones + ["^GSPC"]:
# Ensure both series have the same index before calculating
covariance and variance
common_index =
rentabilidad_mensual.index.intersection(sp500.index)
cov = np.cov(rentabilidad_mensual.loc[common_index, ticker],
sp500.loc[common_index])[0,1]
beta = cov / sp500.loc[common_index].var()
resumen.loc[ticker, "Beta"] = beta

# Sharpe y Treynor
resumen["Sharpe"] = (resumen["Retorno Esperado (%)"]/100 - rf) /
(resumen["Desv. Estándar (%)"]/100)
resumen["Treynor"] = (resumen["Retorno Esperado (%)"]/100 - rf) /
resumen["Beta"]

# ============================
# 5. Guardar en Excel
# ============================
archivo = "Resumen_Desempeno_5y.xlsx"
with pd.ExcelWriter(archivo, engine='openpyxl') as writer:
precios_mensuales.to_excel(writer, sheet_name="Precios Mensuales")
(rentabilidad_mensual*100).round(2).to_excel(writer,
sheet_name="Rentabilidad Mensual (%)")
resumen.round(4).to_excel(writer, sheet_name="Resumen Desempeno
5y")

files.download(archivo)

# ============================
# 6. Mostrar tabla resumen
# ============================
print("Resumen de Desempeño 5 años:")
print(resumen.round(4).to_markdown())

# ============================
# 7. Graficar evolución acumulada de $1 invertido
# ============================
plt.figure(figsize=(14, 7))
((rentabilidad_mensual + 1).cumprod()).plot(figsize=(14,7)) #
Corrected cumulative product calculation
plt.title("Evolución acumulada de $1 invertido (últimos 5 años)")
plt.xlabel("Fecha")
plt.ylabel("Multiplicador del capital")
plt.grid(True)
plt.show()

También podría gustarte