Alternativ portföljoptimering

Introduktion till portföljanalys i Python

Charlotte Werger

Data Scientist

Förväntad risk och avkastning baserat på historiska data

$$

  • Historiska medelavkastningar och historisk portföljvarians är inte perfekta skattningar av mu och Sigma
  • Vikter från portföljoptimering garanterar därför inte goda resultat på framtida data

$$ Skämt om historien upprepar sig

Introduktion till portföljanalys i Python

Historiska data

Tidsseriedata som förändras över tid

Introduktion till portföljanalys i Python

Exponentiellt viktad avkastning

$$

  • Bättre mått på risk och avkastning behövs
  • Exponentiellt viktad risk och avkastning ger de senaste observationerna större vikt
  • Exponentiellt glidande medelvärde i grafen: störst vikt på t-1-observationen

Vikter i beräkning av exponentiellt viktad avkastning

Introduktion till portföljanalys i Python

Exponentiellt viktad kovarians

$$

  • Exponentiell kovariansmatris: ger nyare data större vikt
  • I grafen: exponentiellt viktad volatilitet i svart följer faktisk volatilitet bättre än standardvolatilitet i blått

$$ Jämförelse av exponentiellt viktad kovarians och normal kovarians mot faktisk kovarians

1 Source: https://systematicinvestor.github.io/Exponentially-Weighted-Volatility-RCPP
Introduktion till portföljanalys i Python

Exponentiellt viktad avkastning

from pypfopt import expected_returns
# Exponentially weighted moving average
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
Introduktion till portföljanalys i Python

Exponentiellt viktad kovarians

from pypfopt import risk_models
# Exponentially weighted covariance
Sigma_ew = risk_models.exp_cov(df, span=180, frequency=252)
Introduktion till portföljanalys i Python

Använda nedsidesrisk i optimeringen

$ $

  • Kom ihåg Sortino-kvoten: den använder enbart variansen för negativ avkastning
  • PyPortfolioOpt låter dig använda semikovarians i optimeringen – ett mått på nedsidesrisk:

$ $ Beräkning av nedsidesrisk

Introduktion till portföljanalys i Python

Semikovarians i 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
Introduktion till portföljanalys i Python

Nu kör vi en övning!

Introduktion till portföljanalys i Python

Preparing Video For Download...