Optimización alternativa de carteras

Introducción al análisis de carteras en Python

Charlotte Werger

Data Scientist

Riesgo y retorno esperados con datos históricos

$$

  • Las medias históricas o la varianza histórica de la cartera son estimaciones imperfectas de mu y Sigma
  • Por eso, los pesos de la optimización no garantizan buen desempeño en datos futuros

$$ Si la historia se repite broma

Introducción al análisis de carteras en Python

Datos históricos

Series temporales que cambian en el tiempo

Introducción al análisis de carteras en Python

Rentabilidades ponderadas exponencialmente

$$

  • Necesitamos mejores medidas de riesgo y retorno
  • El ponderado exponencial da más peso a los datos recientes
  • En el gráfico, la media exponencial: mayor peso a t-1

Pesos en el cálculo de rentabilidades ponderadas exponencialmente

Introducción al análisis de carteras en Python

Covarianza ponderada exponencialmente

$$

  • La matriz de covarianzas exponencial da más peso a datos recientes
  • En el gráfico: volatilidad exponencial en negro, sigue mejor a la real que la estándar en azul

$$ Comparación de covarianza ponderada exponencialmente y normal con la real

1 Source: https://systematicinvestor.github.io/Exponentially-Weighted-Volatility-RCPP
Introducción al análisis de carteras en Python

Rentabilidades ponderadas exponencialmente

from pypfopt import expected_returns
# Media móvil exponencialmente ponderada
mu_ema = expected_returns.ema_historical_return(df, 
                         span=252, frequency=252)
print(mu_ema)
symbol
XOM     0.103030
BBY     0.394629
PFE     0.186058
Introducción al análisis de carteras en Python

Covarianza ponderada exponencialmente

from pypfopt import risk_models
# Covarianza ponderada exponencialmente
Sigma_ew = risk_models.exp_cov(df, span=180, frequency=252)
Introducción al análisis de carteras en Python

Usar riesgo a la baja en la optimización

$ $

  • Recuerda el ratio de Sortino: usa solo la varianza de las rentabilidades negativas
  • PyPortfolioOpt permite usar la semicovarianza en la optimización; mide el riesgo a la baja:

$ $ Cálculo del riesgo a la baja

Introducción al análisis de carteras en Python

Semicovarianza en PyPortfolioOpt

Sigma_semi = risk_models.semicovariance(df,     
                        benchmark=0, frequency=252)

print(Sigma_semi)
         XOM         BBY          MA         PFE
XOM     0.018939    0.008505    0.006568    0.004058
BBY     0.008505    0.016797    0.009133    0.004404
MA      0.006568    0.009133    0.018711    0.005373
PFE     0.004058    0.004404    0.005373    0.008349
Introducción al análisis de carteras en Python

¡Vamos a practicar!

Introducción al análisis de carteras en Python

Preparing Video For Download...