使用 VaR 和 CVaR 的风险管理

Python 中的定量风险管理

Jamsheed Shorish

Computational Economist

通过现代投资组合理论进行风险管理

  • 组合效率(Efficient Portfolio)
    • 在给定风险下,使回报最大化的权重
  • 有效前沿(Efficient Frontier):由不同有效组合生成的(风险,回报)点的轨迹
    • 每个点 = 一次组合权重优化
  • 有效组合/前沿的提出:现代投资组合理论(MPT)

有效前沿的折线图

Python 中的定量风险管理

将 VaR 纳入 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 中的定量风险管理

Vamos praticar!

Python 中的定量风险管理

Preparing Video For Download...