Välkommen!

Kvantitativ riskhantering i Python

Dr. Jamsheed Shorish

Computational Economist

Om mig

  • Computational economist
  • Specialisering inom:
    • tillgångsprissättning
    • finansiell teknologi ("FinTech")
    • datorbaserade tillämpningar inom ekonomi och finans
  • Medlärare, "Economic Analysis of the Digital Economy" vid ANU
  • Shorish Research (Belgien): beräkningsbaserade affärsapplikationer
Kvantitativ riskhantering i Python

Vad är kvantitativ riskhantering?

  • Kvantitativ riskhantering: studiet av mätbar osäkerhet
  • Osäkerhet:
    • Framtida utfall är okända
    • Utfall påverkar planeringsbeslut
  • Riskhantering: minska effekterna av negativa utfall
  • Mätbar osäkerhet: identifiera faktorer för att kvantifiera risk
    • Exempel: Brandförsäkring. Vilka faktorer ökar risken för brand?
  • Den här kursen: fokus på risk kopplad till en finansiell portfölj
Kvantitativ riskhantering i Python

Riskhantering och den globala finanskrisen

  • Den stora recessionen (2007–2010)
    • Global tillväxtförlust på mer än 2 biljoner dollar
    • USA: nästan 10 biljoner dollar i förlorad hushållsförmögenhet
    • Amerikanska aktiemarknader tappade ca 8 biljoner dollar i värde
  • Den globala finanskrisen (2007–2009)
    • Stora förändringar i grundläggande tillgångsvärden
    • Massiv osäkerhet om framtida avkastning
    • Hög volatilitet i tillgångspriser
    • Riskhantering avgörande för framgång eller misslyckande
Kvantitativ riskhantering i Python

Snabb genomgång: finansiella portföljer

  • Finansiell portfölj
    • Samling tillgångar med osäker framtida avkastning
    • Aktier
    • Obligationer
    • Valutainnehav ('forex')
    • Aktieoptioner
  • Utmaning: kvantifiera risk för att hantera osäkerhet
    • Fatta optimala investeringsbeslut
    • Maximera portföljens avkastning givet riskaptit
Kvantitativ riskhantering i Python

Kvantifiera avkastning

  • Portföljavkastning: viktad summa av enskilda tillgångars avkastning
    • Dataanalysbiblioteket Pandas
    • DataFrame prices
    • Metoden .pct_change()
    • Metoden .dot()returns
prices = pandas.read_csv("portfolio.csv")

returns = prices.pct_change()
weights = (weight_1, weight_2, ...)
portfolio_returns = returns.dot(weights)
Kvantitativ riskhantering i Python

Kvantifiera risk

  • Portföljens avkastningsvolatilitet = risk
  • Beräkna volatilitet via kovariansmatrisen
  • Använd .cov()-metoden på DataFrame returns och annualisera

 

 

covariance = returns.cov()*252

print(covariance)

Exempel på kovariansmatris för 4 tillgångar

Kvantitativ riskhantering i Python

Kvantifiera risk

  • Portföljens avkastningsvolatilitet = risk
  • Beräkna volatilitet via kovariansmatrisen
  • Använd .cov()-metoden på DataFrame returns och annualisera
  • Diagonalen i covariance är de enskilda tillgångarnas varianser  

   

covariance = returns.cov()*252

print(covariance)

Exempel på kovariansmatris med varianser markerade på diagonalen

Kvantitativ riskhantering i Python

Kvantifiera risk

  • Portföljens avkastningsvolatilitet = risk
  • Beräkna volatilitet via kovariansmatrisen
  • Använd .cov()-metoden på DataFrame returns och annualisera
  • Diagonalen i covariance är de enskilda tillgångarnas varianser
  • Utanför diagonalen i covariance finns kovarianserna mellan tillgångarna
covariance = returns.cov()*252

print(covariance)

Exempel på kovariansmatris med kovarianser markerade utanför diagonalen

Kvantitativ riskhantering i Python

Portföljrisk

  • Beror på tillgångarnas weights i portföljen
  • Portföljvariansen $\sigma_p^2$ ges av $$ \sigma_p^2 := w^T \cdot \textnormal{Cov}_p \cdot w $$
  • Matrismultiplikation beräknas med operatorn @ i Python
  • Standardavvikelse används vanligtvis istället för varians
weights = [0.25, 0.25, 0.25, 0.25] # Assumes four assets in portfolio

portfolio_variance = np.transpose(weights) @ covariance @ weights
portfolio_volatility = np.sqrt(portfolio_variance)
Kvantitativ riskhantering i Python

Volatilitet över tid

  • Det går även att beräkna portföljens volatilitet över tid
  • Använd ett "fönster" för att beräkna volatilitet över en fast tidsperiod (t.ex. en vecka eller 30-dagars "månad")
  • Series.rolling() skapar ett fönster
  • Observera volatilitetens trend och eventuella extremhändelser
windowed = portfolio_returns.rolling(30)

volatility = windowed.std()*np.sqrt(252) volatility.plot() .set_ylabel("Standard Deviation...")

Graf med 30-dagars rullande fönster för annualiserad avkastningsvolatilitet

Kvantitativ riskhantering i Python

Nu kör vi en övning!

Kvantitativ riskhantering i Python

Preparing Video For Download...