Alternativní optimalizace portfolia

Introduction to Portfolio Analysis in Python

Charlotte Werger

Data Scientist

Očekávané riziko a výnos na základě historických dat

$$

  • Průměrné historické výnosy ani historický rozptyl portfolia nejsou dokonalými odhady mu a Sigma
  • Váhy z optimalizace portfolia proto nemusí dobře fungovat na budoucích datech

$$ Vtip o tom, zda se historie opakuje

Introduction to Portfolio Analysis in Python

Historická data

Časová řada dat měnících se v čase

Introduction to Portfolio Analysis in Python

Exponenciálně vážené výnosy

$$

  • Je třeba lepších měr rizika a výnosu
  • Exponenciálně vážené riziko a výnos přikládají větší váhu nejnovějším datům
  • Exponenciální klouzavý průměr v grafu: největší váha na pozorování t-1

Váhy při výpočtu exponenciálně vážených výnosů

Introduction to Portfolio Analysis in Python

Exponenciálně vážená kovariance

$$

  • Exponenciální kovarianční matice: přikládá větší váhu novějším datům
  • V grafu: exponenciálně vážená volatilita černě lépe sleduje skutečnou volatilitu než standardní volatilita modře

$$ Porovnání exponenciálně vážené kovariance a standardní kovariance se skutečnou kovariancí

1 Source: https://systematicinvestor.github.io/Exponentially-Weighted-Volatility-RCPP
Introduction to Portfolio Analysis in Python

Exponenciálně vážené výnosy

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
Introduction to Portfolio Analysis in Python

Exponenciálně vážená kovariance

from pypfopt import risk_models
# Exponentially weighted covariance
Sigma_ew = risk_models.exp_cov(df, span=180, frequency=252)
Introduction to Portfolio Analysis in Python

Použití rizika poklesu v optimalizaci

$ $

  • Vzpomeňte si na Sortinův poměr: využívá rozptyl pouze negativních výnosů
  • PyPortfolioOpt umožňuje použít semikovariance v optimalizaci – míru rizika poklesu:

$ $ Výpočet rizika poklesu

Introduction to Portfolio Analysis in Python

Semikovariance v 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
Introduction to Portfolio Analysis in Python

Pojďme si procvičit!

Introduction to Portfolio Analysis in Python

Preparing Video For Download...