Vítejte!

Kvantitativní řízení rizik v Pythonu

Dr. Jamsheed Shorish

Computational Economist

O mně

  • Výpočetní ekonom
  • Specializace:
    • oceňování aktiv
    • finanční technologie ("FinTech")
    • počítačové aplikace v ekonomii a financích
  • Spoluinstruktor kurzu „Economic Analysis of the Digital Economy" na ANU
  • Shorish Research (Belgie): výpočetní obchodní aplikace
Kvantitativní řízení rizik v Pythonu

Co je kvantitativní řízení rizik?

  • Kvantitativní řízení rizik: studium kvantifikovatelné nejistoty
  • Nejistota:
    • Budoucí výsledky jsou neznámé
    • Výsledky ovlivňují rozhodování při plánování
  • Řízení rizik: zmírnění (omezení dopadů) nepříznivých výsledků
  • Kvantifikovatelná nejistota: identifikace faktorů pro měření rizika
    • Příklad: Požární pojištění. Jaké faktory zvyšují pravděpodobnost požáru?
  • Tento kurz: zaměření na riziko spojené s finančním portfoliem
Kvantitativní řízení rizik v Pythonu

Řízení rizik a globální finanční krize

  • Velká recese (2007–2010)
    • Globální ztráta růstu přesahující 2 biliony USD
    • Spojené státy: ztráta téměř 10 bilionů USD v bohatství domácností
    • Americké akciové trhy ztratily přibližně 8 bilionů USD
  • Globální finanční krize (2007–2009)
    • Rozsáhlé změny v hodnotách základních aktiv
    • Masivní nejistota ohledně budoucích výnosů
    • Vysoká volatilita výnosů aktiv
    • Řízení rizik klíčové pro úspěch nebo neúspěch
Kvantitativní řízení rizik v Pythonu

Rychlé shrnutí: finanční portfolia

  • Finanční portfolio
    • Soubor aktiv s nejistými budoucími výnosy
    • Akcie
    • Dluhopisy
    • Devizové pozice ("forex")
    • Akciové opce
  • Výzva: kvantifikovat riziko pro řízení nejistoty
    • Přijímat optimální investiční rozhodnutí
    • Maximalizovat výnos portfolia s ohledem na ochotu podstupovat riziko
Kvantitativní řízení rizik v Pythonu

Kvantifikace výnosu

  • Výnos portfolia: vážený součet výnosů jednotlivých aktiv
    • Knihovna pro analýzu dat Pandas
    • DataFrame prices
    • Metoda .pct_change()
    • Metoda .dot() pro returns
prices = pandas.read_csv("portfolio.csv")

returns = prices.pct_change()
weights = (weight_1, weight_2, ...)
portfolio_returns = returns.dot(weights)
Kvantitativní řízení rizik v Pythonu

Kvantifikace rizika

  • Volatilita výnosu portfolia = riziko
  • Výpočet volatility pomocí kovarianční matice
  • Použití metody .cov() DataFrame returns a anualizace

 

 

covariance = returns.cov()*252

print(covariance)

Příklad kovarianční matice pro 4 aktiva

Kvantitativní řízení rizik v Pythonu

Kvantifikace rizika

  • Volatilita výnosu portfolia = riziko
  • Výpočet volatility pomocí kovarianční matice
  • Použití metody .cov() DataFrame returns a anualizace
  • Diagonála covariance obsahuje rozptyly jednotlivých aktiv  

   

covariance = returns.cov()*252

print(covariance)

Příklad kovarianční matice se zvýrazněnými rozptyly na diagonále

Kvantitativní řízení rizik v Pythonu

Kvantifikace rizika

  • Volatilita výnosu portfolia = riziko
  • Výpočet volatility pomocí kovarianční matice
  • Použití metody .cov() DataFrame returns a anualizace
  • Diagonála covariance obsahuje rozptyly jednotlivých aktiv
  • Mimidiagonální prvky covariance jsou kovariance mezi aktivy
covariance = returns.cov()*252

print(covariance)

Příklad kovarianční matice se zvýrazněnými kovariancemi na mimidiagonálních prvcích

Kvantitativní řízení rizik v Pythonu

Riziko portfolia

  • Závisí na weights aktiv v portfoliu
  • Rozptyl portfolia $\sigma_p^2$ je $$ \sigma_p^2 := w^T \cdot \textnormal{Cov}_p \cdot w $$
  • Maticové násobení lze v Pythonu provést operátorem @
  • Místo rozptylu se obvykle používá směrodatná odchylka
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)
Kvantitativní řízení rizik v Pythonu

Časová řada volatility

  • Volatilitu portfolia lze také sledovat v čase
  • Pomocí „okna" se vypočítá volatilita za pevné období (např. týden, 30denní „měsíc")
  • Series.rolling() vytvoří klouzavé okno
  • Sledování trendu volatility a případných extrémních událostí
windowed = portfolio_returns.rolling(30)

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

Graf 30denního klouzavého okna anualizované volatility výnosů

Kvantitativní řízení rizik v Pythonu

Pojďme si to procvičit!

Kvantitativní řízení rizik v Pythonu

Preparing Video For Download...