Modern portföljteori

Kvantitativ riskhantering i Python

Jamsheed Shorish

Computational Economist

Avvägningen mellan risk och avkastning

  • Riskfaktorer: källor till osäkerhet som påverkar avkastningen
  • Intuitivt: större osäkerhet (mer risk) kompenseras av högre avkastning
  • Kan inte garantera avkastning: behöver ett mått på förväntad avkastning
    • genomsnittlig (historisk) avkastning: ett substitut för förväntad framtida avkastning
Kvantitativ riskhantering i Python

Investerarens riskaptit

  • Investerarundersökning: vilken lägsta avkastning krävs för en given risknivå?
  • Svar skapar en (risk, avkastning) riskprofil "datapunkt"
  • Variera risknivån => mängd av (risk, avkastning)-par
  • Investerarens riskaptit: definierar ett kvantifierat samband mellan risk och avkastning
Kvantitativ riskhantering i Python

Välja portföljvikter

  • Variera portföljvikterna för en given portfölj => skapar en mängd (risk, avkastning)-par
  • Ändrade vikter = första steget i riskhantering!
  • Mål: ändra vikter för att maximera förväntad avkastning vid given risknivå
    • Ekvivalent: minimera risken vid given förväntad avkastningsnivå
  • Ändrade vikter = justering av investerarens riskexponering
Kvantitativ riskhantering i Python

Modern portföljteori

  • Effektiv portfölj: portfölj vars vikter ger högst förväntad avkastning för given risknivå
  • Modern portföljteori (MPT), 1952
    • H. M. Markowitz (Nobelpristagare 1990)
  • Den effektiva portföljviktsvektorn $w^\star$ löser:

Optimeringsproblemet för att hitta den effektiva portföljen

Kvantitativ riskhantering i Python

Den effektiva fronten

  • Beräkna många effektiva portföljer för olika risknivåer
  • Effektiv front: kurvan av (risk, avkastning)-par skapade av effektiva portföljer
  • Biblioteket PyPortfolioOpt: optimerade verktyg för MPT
    • Klassen EfficientFrontier: genererar en optimal portfölj åt gången
    • Klassen Constrained Line Algorithm (CLA): genererar hela den effektiva fronten
      • Kräver kovariansmatrisen för avkastningarna
      • Kräver ett substitut för förväntad framtida avkastning: historiskt genomsnitt
Kvantitativ riskhantering i Python

Investeringsbankportfölj 2005–2010

  • Förväntad avkastning: historiska data
  • Kovariansmatris: Covariance Shrinkage förbättrar skattningens precision
  • Constrained Line Algorithm-objektet CLA
  • Minimumsvariansporfölj: cla.min_volatility()
  • Effektiv front: cla.efficient_frontier()

 

expected_returns = mean_historical_return(prices)

efficient_cov = CovarianceShrinkage(prices).ledoit_wolf()
cla = CLA(expected_returns, efficient_cov)
minimum_variance = cla.min_volatility()
(ret, vol, weights) = cla.efficient_frontier()
Kvantitativ riskhantering i Python

Visualisering av den effektiva fronten

  • Spridningsdiagram över (vol, avkastn.)-par

Den effektiva fronten visualiserad som en serie (risk, avkastning)-par

Kvantitativ riskhantering i Python

Visualisering av den effektiva fronten

  • Spridningsdiagram över (vol, avkastn.)-par
  • Minimumsvariansportfölj: lägst volatilitet av alla möjliga effektiva portföljer

Minimumsvariansportföljen markerad i grafen över den effektiva fronten

Kvantitativ riskhantering i Python

Visualisering av den effektiva fronten

  • Spridningsdiagram över (vol, avkastn.)-par
  • Minimumsvariansportfölj: lägst volatilitet av alla möjliga effektiva portföljer
  • Ökad riskaptit: rör sig längs fronten

Rörelse längs den effektiva fronten illustrerad med en pil i riktning mot högre risk och högre avkastning

Kvantitativ riskhantering i Python

Nu kör vi en övning!

Kvantitativ riskhantering i Python

Preparing Video For Download...