Optimizare alternativă a portofoliului

Introducere în analiza portofoliului în Python

Charlotte Werger

Data Scientist

Risc și randament estimate pe baza datelor istorice

$$

  • Randamentele istorice medii sau varianța istorică a portofoliului nu sunt estimări perfecte ale lui mu și Sigma
  • Ponderile din optimizarea portofoliului nu garantează rezultate bune pe date viitoare

$$ Glumă despre repetarea istoriei

Introducere în analiza portofoliului în Python

Date istorice

Date de tip serie temporală care se schimbă în timp

Introducere în analiza portofoliului în Python

Randamente ponderate exponențial

$$

  • Sunt necesare măsuri mai bune pentru risc și randament
  • Riscul și randamentul ponderate exponențial acordă mai multă importanță datelor recente
  • Media mobilă exponențială din grafic: pondere maximă pe observația t-1

Ponderi în calculul randamentelor ponderate exponențial

Introducere în analiza portofoliului în Python

Covarianță ponderată exponențial

$$

  • Matricea de covarianță exponențială: acordă mai multă pondere datelor recente
  • În grafic: volatilitatea ponderată exponențial (negru) urmărește mai bine volatilitatea reală decât cea standard (albastru)

$$ Compararea covarianței ponderate exponențial și a covarianței normale cu covarianța reală

1 Source: https://systematicinvestor.github.io/Exponentially-Weighted-Volatility-RCPP
Introducere în analiza portofoliului în Python

Randamente ponderate exponențial

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
Introducere în analiza portofoliului în Python

Covarianță ponderată exponențial

from pypfopt import risk_models
# Exponentially weighted covariance
Sigma_ew = risk_models.exp_cov(df, span=180, frequency=252)
Introducere în analiza portofoliului în Python

Utilizarea riscului de scădere în optimizare

$ $

  • Rețineți raportul Sortino: utilizează varianța randamentelor negative
  • PyPortfolioOpt permite utilizarea semicovarianței în optimizare, o măsură a riscului de scădere:

$ $ Calculul riscului de scădere

Introducere în analiza portofoliului în Python

Semicovarianță în 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
Introducere în analiza portofoliului în Python

Să exersăm!

Introducere în analiza portofoliului în Python

Preparing Video For Download...