Ottimizzazione di portafoglio alternativa

Introduzione all'analisi di portafoglio in Python

Charlotte Werger

Data Scientist

Rischio atteso e rendimento da dati storici

$$

  • Rendimenti medi storici e varianza storica non sono stime perfette di mu e Sigma
  • Quindi i pesi dall’ottimizzazione non garantiscono buoni risultati su dati futuri

$$ Se la storia si ripete (battuta)

Introduzione all'analisi di portafoglio in Python

Dati storici

Serie storiche che cambiano nel tempo

Introduzione all'analisi di portafoglio in Python

Rendimenti ponderati esponenzialmente

$$

  • Servono misure migliori di rischio e rendimento
  • Pesi esponenziali danno più importanza ai dati recenti
  • Media mobile esponenziale nel grafico: peso maggiore all’osservazione t-1

Pesi nel calcolo dei rendimenti ponderati esponenzialmente

Introduzione all'analisi di portafoglio in Python

Covarianza ponderata esponenzialmente

$$

  • La matrice di covarianza esponenziale: dà più peso ai dati recenti
  • Nel grafico: volatilità ponderata esponenzialmente in nero, segue meglio la volatilità reale rispetto a quella standard in blu

$$ Confronto tra covarianza ponderata esponenzialmente e normale rispetto a quella reale

1 Fonte: https://systematicinvestor.github.io/Exponentially-Weighted-Volatility-RCPP
Introduzione all'analisi di portafoglio in Python

Rendimenti ponderati esponenzialmente

from pypfopt import expected_returns
# Media mobile esponenziale
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
Introduzione all'analisi di portafoglio in Python

Covarianza ponderata esponenzialmente

from pypfopt import risk_models
# Covarianza ponderata esponenzialmente
Sigma_ew = risk_models.exp_cov(df, span=180, frequency=252)
Introduzione all'analisi di portafoglio in Python

Usare il rischio di ribasso nell’ottimizzazione

$ $

  • Ricorda il rapporto di Sortino: usa solo la varianza dei rendimenti negativi
  • PyPortfolioOpt permette di usare la semicovarianza nell’ottimizzazione: misura il rischio di ribasso

$ $ Calcolo del rischio di ribasso

Introduzione all'analisi di portafoglio in Python

Semicovarianza in 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
Introduzione all'analisi di portafoglio in Python

Passiamo alla pratica !

Introduzione all'analisi di portafoglio in Python

Preparing Video For Download...