Otimização alternativa de portfólio

Introdução à Análise de Portfólios em Python

Charlotte Werger

Data Scientist

Risco e retorno esperados com base no histórico

$$

  • Médias históricas de retorno ou variância histórica do portfólio não estimam perfeitamente mu e Sigma
  • Pesos da otimização não garantem bom desempenho em dados futuros

$$ Piada: se a história se repete

Introdução à Análise de Portfólios em Python

Dados históricos

Séries temporais mudando ao longo do tempo

Introdução à Análise de Portfólios em Python

Retornos ponderados exponencialmente

$$

  • Precisamos de melhores medidas de risco e retorno
  • Pesos exponenciais dão mais importância aos dados recentes
  • EMA no gráfico: maior peso na observação t-1

Pesos no cálculo de retornos ponderados exponencialmente

Introdução à Análise de Portfólios em Python

Covariância ponderada exponencialmente

$$

  • A matriz de covariância exponencial dá mais peso aos dados recentes
  • No gráfico: volatilidade ponderada exponencial (preto) acompanha melhor a real do que a padrão (azul)

$$ Comparação: covariância ponderada exponencial vs. normal vs. real

1 Fonte: https://systematicinvestor.github.io/Exponentially-Weighted-Volatility-RCPP
Introdução à Análise de Portfólios em Python

Retornos ponderados exponencialmente

from pypfopt import expected_returns
# Média móvel exponencial
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
Introdução à Análise de Portfólios em Python

Covariância ponderada exponencialmente

from pypfopt import risk_models
# Covariância ponderada exponencialmente
Sigma_ew = risk_models.exp_cov(df, span=180, frequency=252)
Introdução à Análise de Portfólios em Python

Usando risco de queda na otimização

$ $

  • Lembre do índice de Sortino: usa só a variância dos retornos negativos
  • PyPortfolioOpt permite usar a semicovariância na otimização; mede o risco de queda:

$ $ Cálculo do risco de queda

Introdução à Análise de Portfólios em Python

Semicovariância no 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
Introdução à Análise de Portfólios em Python

Vamos praticar!

Introdução à Análise de Portfólios em Python

Preparing Video For Download...