使用 VaR 與 CVaR 的風險管理

Python 量化風險管理

Jamsheed Shorish

Computational Economist

以現代投資組合理論進行風險管理

  • 有效投資組合
    • 在給定風險下,使報酬最大化的資產權重
  • 有效邊界:由不同有效投組產生的(風險、報酬)點集合
    • 每個點=投組權重最佳化
  • 建立有效投組/邊界:現代投資組合理論

有效邊界的圖

Python 量化風險管理

將風險值納入 MPT

  • 現代投資組合理論(MPT):「平均-變異數」最佳化
    • 最高期望報酬
    • 風險水準(波動度)已給定
    • 目標函式:期望報酬
  • VaR/CVaR:衡量_損失_分佈上的風險
  • 調整 MPT,改以損失分佈而非期望報酬來最佳化
Python 量化風險管理

新目標:最小化 CVaR

  • 變更投組最佳化的目標
    • 平均-變異數目標:最大化期望報酬
    • CVaR 目標:在給定信賴水準下,最小化條件期望損失
  • :損失分佈
    • VaR:95% 信賴水準下的最大損失
    • 最佳化:找出使 CVaR「最小化」的投組權重
    • CVaR:在損失「至少」達到 VaR 時的期望損失(最差 5% 情況)
  • 尋找所有可能結果中最差 100%-95%=5% 的最低期望損失
Python 量化風險管理

風險管理問題

  • 將最適投組權重 $w^\star$ 設為下列問題的解

cvar_minimization

  • 回顧:$f(x)$=投組_損失_的機率密度函數

  • 使用 PyPortfolioOpt:將最小化 CVaR 設為新目標

Python 量化風險管理

用 PyPortfolioOpt 最小化 CVaR

  • 用資產報酬 returns 建立 EfficientCVaR 物件
  • 使用 .min_cvar() 方法計算最適投組權重

 

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

optimal_weights = ec.min_cvar()
Python 量化風險管理

平均-變異數 vs. CVaR 的風險管理

  • 平均-變異數的最小波動投組,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}
Python 量化風險管理

平均-變異數 vs. CVaR 的風險管理

  • CVaR 最小化投組,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}
Python 量化風險管理

一起來練習吧!

Python 量化風險管理

Preparing Video For Download...