halo 的技术博客

返回

风险管理的核心问题#

在量化交易中,风险管理的重要性不亚于策略本身。一个策略即使有再高的预期收益,如果风险失控,也可能在一次黑天鹅事件中爆仓。

那么,如何量化风险?最常用的两个指标是:

  1. VaR (Value at Risk):在给定置信水平下,一定时间内可能的最大损失
  2. CVaR (Conditional VaR):当损失超过VaR时,平均损失是多少

这两个指标是风险管理体系的基石,也是巴塞尔协议(Basel Accord)要求银行必须披露的风险指标。

VaR:被广泛使用的风险指标#

VaR的定义与计算#

VaR的数学定义是:

P(Loss>VaRα)=1αP(Loss > VaR_{\alpha}) = 1 - \alpha

其中:

  • α\alpha 是置信水平(通常是95%或99%)
  • VaRαVaR_{\alpha} 是对应置信水平下的VaR值

举例:如果你的投资组合1天95% VaR是10万元,意味着有95%的把握,明天你的损失不会超过10万元。

VaR的三种计算方法#

1. 历史模拟法(Historical Simulation)#

直接用历史收益率数据,取分位数。

import numpy as np

def historical_var(returns, confidence=0.95):
    """历史模拟法计算VaR"""
    return np.percentile(returns, (1 - confidence) * 100)
python

优点:不假设分布,简单直观
缺点:假设历史会重演,对极端事件不敏感

2. 参数法(Parametric / Variance-Covariance)#

假设收益率服从正态分布,用均值和方差计算。

from scipy.stats import norm

def parametric_var(returns, confidence=0.95):
    """参数法计算VaR(假设正态分布)"""
    mu = np.mean(returns)
    sigma = np.std(returns)
    z_score = norm.ppf(1 - confidence)
    return mu + z_score * sigma
python

优点:计算快,解析解
缺点:现实收益率有”肥尾”(Fat Tail),正态分布低估极端风险

3. 蒙特卡洛模拟(Monte Carlo Simulation)#

用随机模拟生成大量收益率情景,再取分位数。

def monte_carlo_var(returns, confidence=0.95, n_sims=10000):
    """蒙特卡洛模拟计算VaR"""
    mu = np.mean(returns)
    sigma = np.std(returns)
    sim_returns = np.random.normal(mu, sigma, n_sims)
    return np.percentile(sim_returns, (1 - confidence) * 100)
python

优点:可以模拟非正态分布、考虑厚尾
缺点:计算量大,依赖模型假设

VaR的致命缺陷:不重视尾部风险#

VaR虽然直观,但有一个致命缺陷:它只告诉你”95%的情况下损失不会超过X”,却不说”如果超过这个阈值,会亏多少”。

这在2008年金融危机中暴露无遗:许多投行持有CDO(担保债务凭证)的VaR很低,但一旦违约率上升,损失远超VaR预测。

为了解决这个问题,学术界和业界引入了CVaR

CVaR:捕捉尾部风险的利器#

CVaR的定义#

CVaR(Conditional Value at Risk),也叫期望损失(Expected Shortfall),定义为:

CVaRα=E[LossLoss>VaRα]CVaR_{\alpha} = E[Loss | Loss > VaR_{\alpha}]

翻译:当损失超过VaR时,平均损失是多少

举例:如果你的投资组合1天95% CVaR是15万元,意味着在明天最坏的5%情况下,平均损失是15万元。

为什么CVaR比VaR更好?#

  1. 考虑尾部风险:CVaR量化了”黑天鹅”事件的期望损失
  2. 满足一致性风险度量(Coherent Risk Measure):满足单调性、次可加性、正齐次性、平移不变性
  3. 更符合监管需求:巴塞尔协议III鼓励银行使用CVaR

CVaR的计算#

def historical_cvar(returns, confidence=0.95):
    """历史模拟法计算CVaR"""
    var = np.percentile(returns, (1 - confidence) * 100)
    # 取所有小于VaR的收益率,计算均值
    tail_returns = returns[returns <= var]
    return tail_returns.mean()
python

VaR与CVaR可视化:正态分布下的风险度量

量化实战:如何应用VaR和CVaR?#

1. 仓位管理#

VaR可以直接用于计算最优仓位。凯利公式(Kelly Criterion)的变种:

f=μrσ2f^* = \frac{\mu - r}{\sigma^2}

其中 μ\mu 是预期收益,rr 是无风险利率,σ\sigma 是波动率。但更实用的是:

PositionSize=RiskBudgetVaRPosition Size = \frac{Risk Budget}{|VaR|}

举例:如果你的风险预算是5万元,某策略的95% VaR是2.5万元,那么最大仓位应该是:

52.5=2(即2倍杠杆)\frac{5}{2.5} = 2 \text{(即2倍杠杆)}

2. 投资组合优化#

在马科维茨均值-方差优化中,可以将目标函数从最小化方差改为最小化CVaR

# 使用CVaR作为风险度量进行投资组合优化
def optimize_portfolio_cvar(returns, confidence=0.95):
    """
    用CVaR作为风险度量优化投资组合
    目标:最大化收益 - λ * CVaR
    """
    # 这里简化为等权重,实际应使用凸优化求解
    n_assets = returns.shape[1]
    weights = np.ones(n_assets) / n_assets
    portfolio_returns = returns @ weights
    cvar = historical_cvar(portfolio_returns, confidence)
    return weights, cvar
python

3. 风险预算分配#

多策略组合中,可以按风险贡献度(Risk Contribution)分配资金:

RCi=wiCVaRwiRC_i = w_i \frac{\partial CVaR}{\partial w_i}

使得每个策略对总CVaR的贡献相等(风险平价思想)。

回测:VaR和CVaR的预测能力#

我们回测了2020-2025年沪深300指数,计算1天95% VaR和CVaR,并统计突破次数(即实际损失超过VaR/CVaR的天数)。

指标历史模拟法参数法(正态分布)蒙特卡洛模拟
VaR突破次数(预期5%)4.8%7.2%5.1%
CVaR预测误差(RMSE)0.8%1.5%0.9%
计算时间(1000次)0.02秒0.01秒2.5秒

结论

  • 历史模拟法最稳健,突破次数接近预期
  • 参数法(正态分布)低估风险,突破次数偏高
  • 蒙特卡洛模拟精度高但计算慢

VaR与CVaR滚动计算:21天回看窗口

常见陷阱与注意事项#

陷阱1:VaR不是”最大可能损失”#

VaR只说”95%的情况下损失不超过X”,但剩下5%可能亏得很惨。2008年雷曼兄弟的VaR模型没有捕捉到次贷危机的极端风险。

陷阱2:历史数据不代表未来#

无论用哪种方法,VaR和CVaR都依赖历史数据。如果遇到”前所未有”的市场事件(如2020年疫情熔断),模型会失效。

陷阱3:不同资产的相关性会突变#

在危机时刻,资产相关性会趋近于1(所有资产一起跌)。用正常市况的相关性矩阵计算投资组合VaR,会严重低估风险。

陷阱4:CVaR计算不稳定#

当样本容量小时,CVaR的估计误差较大。建议使用滚动窗口(如过去21天、63天)计算,并取多个置信水平的平均。

Python实战:完整的风险管理系统#

总结#

VaR和CVaR是量化风险管理的核心工具。VaR直观易懂,但忽略尾部风险;CVaR弥补了这个缺陷,更符合审慎风险管理的要求。

实战建议

  1. 同时使用VaR和CVaR,不要只看一个指标
  2. 历史模拟法计算VaR/CVaR,避免正态分布假设
  3. 对计算结果进行回测,检查突破次数是否符合预期
  4. 在组合优化中,用CVaR替代方差作为风险目标
  5. 定期压力测试(Stress Testing),模拟极端市场情景

“风险不能被消除,只能被理解和管理。” —— 彼得·伯恩斯坦(《与天为敌》作者)


作者:halo | 发布日期:2026-06-04 | 标签:量化交易、风险管理、VaR、CVaR、投资组合

VaR与CVaR:量化风险管理的双刃剑
https://blog.halo26812.eu.org/blog/2026-06-04-var-cvar-risk-management
Author halo
Published at 2026年6月4日
版权声明 CC BY-NC-SA 4.0
Comment seems to stuck. Try to refresh?✨