
VaR 与 CVaR 的计算方法及其局限
VaR 与 CVaR 的计算方法——历史法、参数法、蒙特卡洛——附 Python 实现,以及每种方法藏着的具体局限。
交互工具在翻译视图中可能无法使用。
VaR 与 CVaR 的计算方法及其局限
Value at Risk(VaR,在险价值)回答的是"在 95% 置信度下,N 天内我最多亏多少?"Conditional VaR(CVaR,条件在险价值)回答的是"在亏超过 VaR 的前提下,我平均亏多少?"两个都有用,但都系统性地说谎:它们低估尾部风险。
三种计算方法
历史法 VaR。 把过去收益排序,取 5 分位数:
import numpy as np
var_95 = np.percentile(returns, 5) # 负数
cvar_95 = returns[returns <= var_95].mean()
简单、不依赖模型,但默认未来像过去那个窗口。如果你的窗口没覆盖 2008 金融危机、2015 A 股股灾或 2020 疫情,你就没有尾部。
参数法(方差-协方差)VaR。 假设收益服从正态:
VaR_95 = -(mu - 1.645 * sigma) * portfolio_value
快、干净,但市场不是正态的。真实收益分布有肥尾:4 倍 sigma 的波动出现频率大约是正态预测的 10 倍。在股票市场,参数法 VaR 低估尾部损失 30-60%。
蒙特卡洛 VaR。 从拟合的分布(student-t、GARCH)模拟收益,算模拟结果的分位数。更灵活,但好不好取决于你假设的分布。自由度 4 的 student-t 比正态更能抓住肥尾。
CVaR 的优势
VaR 告诉你阈值在哪,但不告诉你阈值之后发生什么。两个组合可以有相同的 95% VaR,但 CVaR 天差地别——一个在尾部亏 1.1 倍 VaR,另一个亏 3 倍。CVaR 是更好的风险数字,因为它是坏结果平均值,不是坏结果的边界。监管机构更喜欢 CVaR,原因就在这。
必须尊重的局限
- 非平稳性。 你上个月估的波动率不是今天的波动率。波动率缩放的 VaR(用近期实现波动率)跟踪更好,但市况切换时会滞后。
- 相关结构崩塌。 VaR 假设协方差结构不变。危机里,相关性向 1 收敛,分散组合表现得像单一仓位。压力 VaR 必须用压力下的相关。
- 流动性。 VaR 用中间价标记;真实出场要付买卖价差和滑点。给非流动仓位加 1-3 天成交量加权价差的流动性调整。
- 阈值幻觉。 95% VaR 是 1 万美元,不代表"我最多亏 1 万美元"。它代表"20 天里有 1 天我会亏超过 1 万美元"。一个交易年里,这 1/20 是一定会发生的。
实战用法
95% 和 99%、日和 10 天窗口的 VaR 和 CVaR 都报。回测:252 个交易日的一年里,日 95% VaR 应该被穿透大约 12-13 次。如果穿透 25 次以上,模型坏了。如果一次都没穿透,模型太保守——资金在浪费。
VaR 和 CVaR 是沟通工具,不是安全保证。用它们按预算定风险规模,再用压力测试去看它们看不见的场景。
实时行情
打开完整图表 →相关市场数据由 TradingView 提供。
我的笔记
登录后可在本文保存笔记并与社区分享。
相关内容
下一篇推荐
Common Stop-Loss Mistakes to Avoid
Learn the most common stop-loss mistakes traders make and how to avoid them with practical tips and examples.
阅读更多 →Smart Recommendations