Szacowanie ryzyka ogonowego

Wprowadzenie do zarządzania ryzykiem portfela w Pythonie

Dakota Wixom

Quantitative Analyst | QuantCourse.com

Szacowanie ryzyka ogonowego

Ryzyko ogonowe to ryzyko skrajnych wyników inwestycyjnych, zwłaszcza po ujemnej stronie rozkładu.

  • Historyczny drawdown
  • Wartość zagrożona (VaR)
  • Warunkowa wartość zagrożona (CVaR)
  • Symulacja Monte Carlo
Wprowadzenie do zarządzania ryzykiem portfela w Pythonie

Historyczny drawdown

Drawdown to procentowa strata od najwyższego historycznego poziomu skumulowanego.

$$ \text{Drawdown} = \frac{r_t}{RM} - 1$$

  • $r_t$: Skumulowany zwrot w czasie t
  • $RM$: Bieżące maksimum
Historyczny drawdown ETF USO Oil

Wprowadzenie do zarządzania ryzykiem portfela w Pythonie

Historyczny drawdown w Pythonie

Zakładając, że cum_rets to np.array skumulowanych zwrotów w czasie

running_max = np.maximum.accumulate(cum_rets)
running_max[running_max < 1] = 1
drawdown = (cum_rets) / running_max - 1
drawdown
Date        Return
2007-01-03    -0.042636
2007-01-04    -0.081589
2007-01-05    -0.073062
Wprowadzenie do zarządzania ryzykiem portfela w Pythonie

Historyczna wartość zagrożona (VaR)

Wartość zagrożona (VaR) to próg, przy danym poziomie ufności, powyżej którego straty historycznie nie przekraczały określonego poziomu.

VaR podaje się zazwyczaj dla kwantyli 95, 99 i 99,9.

Przykład: VaR(95) = -2,3%

95% pewności, że straty nie przekroczą -2,3% dziennie na podstawie danych historycznych.

Wprowadzenie do zarządzania ryzykiem portfela w Pythonie

Historyczna wartość zagrożona (VaR) w Pythonie

var_level = 95
var_95 = np.percentile(StockReturns, 100 - var_level)
var_95
-0.023
Wprowadzenie do zarządzania ryzykiem portfela w Pythonie

Historyczny oczekiwany niedobór

Warunkowa wartość zagrożona (CVaR) to szacunek oczekiwanych strat w najgorszych 1 - x% scenariuszy.

CVaR podaje się zazwyczaj dla kwantyli 95, 99 i 99,9.

 

Przykład: CVaR(95) = -2,5%

 

W najgorszych 5% przypadków straty wynosiły średnio ponad -2,5% historycznie.

Wprowadzenie do zarządzania ryzykiem portfela w Pythonie

Historyczny oczekiwany niedobór w Pythonie

Zakładając, że StockReturns to szereg czasowy zwrotów z akcji.

Obliczenie historycznego CVaR(95):

var_level = 95
var_95 = np.percentile(StockReturns, 100 - var_level)
cvar_95 = StockReturns[StockReturns <= var_95].mean()
cvar_95
-0.025
Wprowadzenie do zarządzania ryzykiem portfela w Pythonie

Czas na ćwiczenia!

Wprowadzenie do zarządzania ryzykiem portfela w Pythonie

Preparing Video For Download...