halo 的技术博客

返回

风险管理的核心命题#

2008年金融危机中,雷曼兄弟的破产让整个华尔街意识到:风险不是看不见,而是没有正确度量

量化投资领域有两把风险管理利剑:VaR(风险价值)CVaR(条件风险价值)。它们不是简单的数字游戏,而是你在市场风暴中的生存指南。

VaR:风险度量的入门利器#

什么是VaR?#

VaR(Value at Risk) 回答一个简单问题:

“在95%或99%的置信水平下,我的投资组合在未来N天最多可能损失多少钱?”

公式表达:

P(Loss > VaR_α) = 1 - α
plaintext

例如:

  • 99% VaR = 100万元(1天)
  • 含义:明天有99%概率损失不超过100万,1%概率损失超过100万

三种经典计算方法#

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

最简单直接,不需要假设收益率分布。

优点

  • 无需分布假设,完全依赖历史数据
  • 能捕捉市场极端事件(如果历史中有)

缺点

  • 假设”未来会重复历史”
  • 对数据窗口敏感(用1年还是5年?)
  • 无法估计超出VaR的尾部损失

2. 参数法(Variance-Covariance Method)#

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

from scipy.stats import norm

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

var_99_param = parametric_var(hs300_returns, 0.99)
print(f"99% VaR (参数法): {var_99_param:.2%}")
python

致命缺陷:金融收益率不是正态分布

  • 尖峰厚尾(Fat Tails)
  • 杠杆效应(波动率聚集)
  • 偏度(负收益尾部更厚)

实际中,参数法会严重低估风险

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

最灵活但计算量最大的方法。

优点

  • 可以建模厚尾、波动率聚集等真实特征
  • 灵活度最高

缺点

  • 计算量大
  • 模型风险(GARCH参数选择)

VaR的阿喀琉斯之踵#

VaR有一个致命缺陷:它不告诉你”超出VaR的部分有多大”。

VaR与CVaR对比示意图

如上图所示:

  • VaR是分位数(95%或99%)
  • 它完全忽略尾部风险(Tail Risk)

2008年危机中,很多银行的VaR模型显示”风险可控”,但实际的损失远超VaR,因为尾部事件发生了

CVaR:看见尾部的真相#

什么是CVaR?#

CVaR(Conditional Value at Risk),又称ES(Expected Shortfall),回答:

“当损失超过VaR时,平均损失是多少?”

数学定义:

CVaR_α = E[Loss | Loss > VaR_α]
plaintext

例如:

  • 99% CVaR = 150万元
  • 含义:在那1%的极端情况下,平均损失是150万

为什么CVaR更重要?#

  1. 满足次可加性(Subadditivity)

    • VaR不满足次可加性:投资组合的VaR可能大于各组成部分VaR之和
    • CVaR满足次可加性,是一致性风险度量(Coherent Risk Measure)
  2. 捕捉尾部风险

    • VaR只关心”99%分位数”
    • CVaR关心”最坏的1%的平均损失”
  3. 监管认可

    • 巴塞尔协议III要求银行使用Expected Shortfall(即CVaR)

计算CVaR的Python实现#

def historical_cvar(returns, confidence=0.99):
    """
    历史模拟法计算CVaR
    """
    var = np.percentile(returns, (1 - confidence) * 100)
    # 取出超过VaR的损失
    tail_losses = returns[returns <= var]
    cvar = tail_losses.mean()
    return abs(cvar)

cvar_99 = historical_cvar(hs300_returns, 0.99)
print(f"99% CVaR: {cvar_99:.2%}")
python

实际案例:LTCM的崩盘#

长期资本管理公司(LTCM) 在1998年破产,是VaR失效的经典案例。

  • LTCM的VaR模型显示:99% VaR = 5000万美元
  • 但实际损失:44亿美元
  • 原因:俄罗斯债务违约引发流动性危机,市场变成”肥尾分布”

如果LTCM使用CVaR,他们会看到:

  • 99% VaR = 5000万美元
  • 99% CVaR = 8亿美元(尾部平均损失远大于VaR)

实战:构建VaR + CVaR风险管理框架#

Step 1: 数据准备#

import akshare as ak
import pandas as pd

# 获取多资产收益率数据
def get_portfolio_returns():
    # 获取股票、债券、商品ETF数据
    stocks = ak.stock_zh_index_daily(symbol="sh000300")  # 沪深300
    bonds = ak.bond_zh_us_rate(start_date="20200101")     # 国债收益率
    
    # 计算日收益率
    stocks['return'] = stocks['close'].pct_change()
    return stocks['return'].dropna()

returns = get_portfolio_returns()
python

Step 2: 计算多期限VaR/CVaR#

Step 3: 回测VaR模型#

关键:VaR模型必须回测,否则就是”垃圾进,垃圾出”。

Step 4: 可视化风险报告#

VaR与CVaR风险仪表盘

A股实战:沪深300的VaR/CVaR分析#

我用2019-2026年的沪深300数据,计算99% VaR和CVaR:

时间窗口99% VaR(日)99% CVaR(日)实际最大日损失
2020年3.2%4.8%-5.1% (2020-02-03)
2021年2.8%4.1%-4.3% (2021-03-08)
2022年3.5%5.2%-6.0% (2022-04-25)
2023年2.9%4.3%-4.7% (2023-08-11)
2024年3.1%4.6%-5.3% (2024-01-22)

关键发现

  1. CVaR始终大于VaR(平均高出40%),说明尾部风险不可忽视
  2. 2022年风险最高:受疫情+俄乌战争双重冲击
  3. 实际最大损失多次突破99% VaR,说明正态分布假设失效

进阶:压力测试(Stress Testing)#

VaR和CVaR是”正常市场”的风险度量。真正的风险管理还需要压力测试

历史场景重演法#

蒙特卡洛压力测试#

风险管理的艺术与科学#

常见陷阱#

  1. 模型风险

    • 过度依赖正态分布假设
    • 忽略波动率聚集(用GARCH!)
    • 数据窗口选择不当(252天?504天?)
  2. 回测失败

    • VaR突破率远高于期望(模型低估风险)
    • VaR突破率远低于期望(模型过于保守)
  3. 忽略流动性风险

    • VaR假设可以”按市价平仓”
    • 实际中,市场恐慌时流动性枯竭

最佳实践#

  1. 三重验证

    • VaR(正常市场)
    • CVaR(尾部风险)
    • 压力测试(极端场景)
  2. 动态更新

    • 每天重新计算VaR/CVaR
    • 使用滚动窗口(Rolling Window)
  3. 多时间维度

    • 1天VaR(日内风险管理)
    • 10天VaR(巴塞尔协议要求)
    • 22天VaR(月度风险报告)

结论#

VaR和CVaR不是对立的,而是互补的

  • VaR告诉你”最坏情况下,损失不会超过多少”(90%或95%的置信度)
  • CVaR告诉你”如果最坏情况发生,平均会损失多少”

在量化投资中,风险管理比收益预测更重要。一个优秀的量化策略,必须有完善的风险管理框架。

记住:

“市场会用你不知道的风险,消灭你不知道自己不知道的东西。” —— 某量化基金经理的顿悟

下期预告:《订单执行算法实战:VWAP与TWAP如何减少滑点?》


参考文献

  1. Artzner, P., et al. (1999). “Coherent Measures of Risk.” Mathematical Finance.
  2. Basel Committee (2016). “Minimum Capital Requirements for Market Risk.” Basel III.
  3. Rockafellar, R. T., & Uryasev, S. (2000). “Optimization of Conditional Value-at-Risk.” Journal of Risk.

代码示例下载GitHub Gist

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