Riskhantering med VaR & CVaR

Kvantitativ riskhantering i Python

Jamsheed Shorish

Computational Economist

Riskhantering med modern portföljteori

  • Effektiv portfölj
    • Portföljvikter maximerar avkastning givet risknivå
  • Effektiv front: mängden (risk, avkastning)-punkter från olika effektiva portföljer
    • Varje punkt = optimering av portföljvikter
  • Skapas via: Modern portföljteori

Graf över den effektiva fronten

Kvantitativ riskhantering i Python

Integrera Value at Risk i MPT

  • Modern portföljteori (MPT): "mean-variance"-optimering
    • Högsta förväntade avkastning
    • Risknivå (volatilitet) är given
    • Målfunktion: förväntad avkastning
  • VaR/CVaR: mäter risk över _förlust_fördelningen
  • Anpassar MPT för att optimera över förlustfördelning i stället för förväntad avkastning
Kvantitativ riskhantering i Python

Nytt mål: minimera CVaR

  • Ändra målet för portföljoptimeringen
    • mean-variance-mål: maximera förväntad medelavkastning
    • CVaR-mål: minimera förväntad villkorlig förlust vid given konfidensnivå
  • Exempel: förlustfördelning
    • VaR: maximal förlust med 95% konfidens
    • Optimering: portföljvikter som minimerar CVaR
    • CVaR: förväntad förlust givet minst VaR-förlust (de sämsta 5% av fallen)
  • Hitta lägsta förväntade förlust i de sämsta 100% - 95% = 5% av möjliga utfall
Kvantitativ riskhantering i Python

Riskhanteringsproblemet

  • Välj optimala portföljvikter $w^\star$ som lösning till

cvar_minimization

  • Notera: $f(x)$ = sannolikhetstäthetsfunktion för portföljens förlust

  • PyPortfolioOpt: välj minimering av CVaR som nytt mål

Kvantitativ riskhantering i Python

CVaR-minimering med PyPortfolioOpt

  • Skapa ett EfficientCVaR-objekt med tillgångsavkastningar returns
  • Beräkna optimala portföljvikter med metoden .min_cvar()

 

ec = pypfopt.efficient_frontier.EfficientCVaR(None, returns)

optimal_weights = ec.min_cvar()
Kvantitativ riskhantering i Python

Mean-variance kontra CVaR-riskhantering

  • Mean-variance-portfölj med minimal volatilitet, investeringsbankstillgångar 2005–2010
ef = EfficientFrontier(None, e_cov)

min_vol_weights = ef.min_volatility()
print(min_vol_weights)
{'Citibank': 0.0,
 'Morgan Stanley': 5.0784330940519306e-18,
 'Goldman Sachs': 0.6280157234640608,
 'J.P. Morgan': 0.3719842765359393}
Kvantitativ riskhantering i Python

Mean-variance kontra CVaR-riskhantering

  • CVaR-minimerande portfölj, investeringsbankstillgångar 2005–2010
ec = pypfopt.efficient_frontier.EfficientCVaR(None, returns)
min_cvar_weights = ec.min_cvar()

print(min_cvar_weights)

 

{'Citibank': 0.0,
 'Morgan Stanley': 0.0,
 'Goldman Sachs': 0.669324359403484,
 'J.P. Morgan': 0.3306756405965026}
Kvantitativ riskhantering i Python

Nu kör vi en övning!

Kvantitativ riskhantering i Python

Preparing Video For Download...