2008年9月15日,雷曼兄弟宣布破产,全球金融市场陷入恐慌。就在几个月前,这家拥有158年历史的投行还在其年报中宣称,根据内部VaR模型,每日交易风险控制在8500万美元以内,99%的置信水平下最大可能损失不超过1.2亿美元。然而,实际损失超过600亿美元。VaR模型不仅没有预警,反而给了管理层虚假的安全感。这个案例让我意识到:VaR不是风险管理的终点,甚至可能成为危险的起点。
真正有效的市场风险度量,必须把VaR和压力测试当作一对互补的工具,而非二选一的选项。在本文中,我会结合自己多年的金融数据分析经验,拆解这两个工具的本质、误区、实战方法,以及如何在不同的业务场景中做出取舍。
很多人把VaR和压力测试对立起来,认为一个是用统计模型算出来的“精确数字”,另一个是靠拍脑袋设定的“假设情景”。这种理解是错的。在我的实践中,VaR回答的是“在正常市场条件下,我有多少把握亏损不超过某个金额”,而压力测试回答的是“当极端事件发生时,我到底会亏多少”。两者缺一不可,共同构成风险度量的完整拼图。
具体来说,VaR提供了日常风险监控的基准线,但它依赖历史数据和正态分布假设,天生无法捕捉“黑天鹅”事件。压力测试则主动设计极端情景,弥补VaR的尾部风险盲区。我见过太多团队只盯着VaR限额,结果市场一出现异常波动,VaR瞬间被击穿,而他们根本没有准备应对方案。反过来,如果只做压力测试而没有VaR,又无法量化日常风险暴露,容易过度保守或过度冒险。
因此,我的核心结论只有一句话:用VaR管好“大概率事件”,用压力测试管好“小概率灾难”,两者结合才能形成闭环。下面我会从背景、误区、方法、案例到行动建议,一步步展开这个结论。
上世纪90年代,金融衍生品爆炸式增长,传统头寸限额已经无法衡量组合风险。1996年,巴塞尔委员会正式将VaR纳入市场风险资本计量框架,要求银行采用99%置信水平、10天持有期的VaR计算最低资本要求。从此,VaR成为全球金融机构风险管理的标配。我曾在某中型券商负责风控系统建设,每天第一件事就是检查前一日的VaR是否超限,一旦超限必须立即减仓或追加保证金。
但VaR的普及也带来了副作用:很多机构把VaR当作“风险温度计”,认为只要VaR在限额内就是安全的。他们忽略了VaR模型本身的假设缺陷,尤其是正态分布假设。金融资产收益率具有明显的“尖峰厚尾”特征,极端值出现的概率远高于正态分布预测。这导致VaR在正常时期看起来很美,一到危机就彻底失效。
2008年金融危机后,监管机构意识到VaR的局限性。巴塞尔协议III引入了压力测试的强制性要求,包括反向压力测试(找出导致机构破产的情景)和情景分析。美联储的CCAR( Comprehensive Capital Analysis and Review)要求大型银行每年提交压力测试结果,覆盖极端不利情景。在中国,银保监会也要求商业银行定期开展压力测试,并将结果用于资本规划。
我在参与某银行压力测试项目时发现,许多业务人员对压力测试的理解停留在“假设股市跌10%会怎样”的层面,缺乏系统性的情景设计方法。真正有效的压力测试,需要基于风险因子体系,设计多种情景(历史重现、假设情景、最坏情景),并评估对损益、资本充足率等核心指标的影响。
2020年3月,新冠疫情引发全球股市暴跌,标普500指数在10天内熔断四次。我跟踪的一家对冲基金,其VaR模型(基于历史模拟法,95%置信水平,1天持有期)显示日最大损失不超过2000万美元。但3月12日当天,实际亏损达到1.2亿美元,VaR被击穿6倍。基金经理在复盘时发现,VaR模型使用的历史数据窗口是2年,而过去2年美股一直处于低波动上涨状态,模型根本没有包含类似2020年3月的极端波动。
这就是VaR的经典缺陷:历史不会简单重复,但VaR却假设历史会重演。
这个案例让我深刻认识到:VaR必须搭配压力测试,而且压力测试的情景不能只依赖历史数据,还要加入“前所未有”的假设情景。比如,如果疫情导致全球供应链断裂、各国同时封锁,市场会怎样?这种情景在历史上从未发生过,但完全可能发生。

这是最普遍的误解。VaR的定义是:在给定置信水平和持有期内,预期损失不超过某个数值的概率为置信水平。比如95% VaR为100万元,意思是:在95%的情况下,损失不会超过100万元;但还有5%的情况,损失可能远超100万元。VaR并没有告诉我们那5%的极端损失有多大。我经常对团队说:VaR只告诉你“正常情况下最坏能亏多少”,但真正的风险往往藏在那个“不正常”的5%里。
这是对概率的误读。95% VaR指的是损失不超过VaR值的概率是95%,而不是盈利的概率。如果VaR值是正数(即可能亏损),那么95%的概率是亏损小于该值,5%的概率是亏损大于该值。它没有说你有95%的概率赚钱。很多投资者看到“95% VaR=100万”就以为只有5%的可能亏钱,这是灾难性的误解。
我在培训中经常遇到这样的问题:“你们压力测试预测明年股市会跌多少?”压力测试不是预测,而是假设。它回答的是“如果……会怎样”,而不是“将会怎样”。比如,我们假设GDP增速下降2%、利率上升200bp,然后评估对投资组合的影响。这个假设不一定发生,但我们需要知道一旦发生,后果有多严重。压力测试的价值在于提前暴露脆弱点,而不是预言未来。
蒙特卡洛模拟听起来比历史模拟法高级,参数法(方差-协方差法)计算简洁。但复杂模型未必更准确。蒙特卡洛模拟依赖于随机过程假设(如几何布朗运动),如果假设错误,结果可能比简单模型更离谱。我在一个项目中对比了三种方法:历史模拟法、参数法、蒙特卡洛法,结果在正常市场条件下三者差异不大,但在极端条件下,参数法严重低估风险,蒙特卡洛法由于假设了正态分布也同样低估。反而是历史模拟法,虽然粗糙,但能捕捉到历史极端值。
所以,模型选择要基于数据特征和业务需求,而非盲目追求复杂度。

很多分析师在计算VaR时,直接对资产价格建模。但更本质的做法是先识别风险因子,利率、汇率、股票指数、商品价格、波动率等。每个资产的价格可以表示为风险因子的函数。这样做有两个好处:一是可以大幅降低维度(比如持有1000只股票,但风险因子可能只有几十个);二是压力测试时可以直接对因子施加冲击,而不是逐个调整资产价格。
我在某保险公司做资产负债管理时,将数百个投资标的映射到利率、信用利差、权益、房地产等6个风险因子,然后构建因子协方差矩阵计算VaR,效率提升了10倍,而且压力测试变得非常直观,直接调整利率曲线形状、权益跌幅等。
置信水平越高,VaR值越大,但统计意义越弱(因为极端数据点更少)。持有期越长,VaR通常越大(因为时间越长波动累积越多)。巴塞尔协议要求市场风险采用99%置信水平、10天持有期。但内部风控可以灵活选择,比如交易部门用95%置信水平、1天持有期进行日常监控,因为需要快速反应;而投资组合层面用99%置信水平、1个月持有期评估长期风险。
我建议:日常风控用95% 1天VaR,资本计量用99% 10天VaR,压力测试用极端情景。三者共同构成风险视图。
第一层:历史情景,复制过去发生过的极端事件,如2008年金融危机、2020年疫情、1997年亚洲金融危机。优点是有真实数据支撑,缺点是未来不一定重复过去。
第二层:假设情景,基于当前宏观经济状况,假设某些风险因子出现极端变动,比如利率上升300bp、人民币贬值10%。优点是灵活,可以针对当前风险点,缺点是需要主观判断。
第三层:最坏情景,将所有风险因子同时推向极端,比如股市跌50%、利率升500bp、汇率贬20%。这种情景发生概率极低,但一旦发生可能导致机构破产。反向压力测试就是从破产结果倒推需要什么样的情景。
我在帮某银行设计压力测试框架时,采用了“历史情景+假设情景”的组合,历史情景用于年度压力测试,假设情景用于季度评估,最坏情景用于极端情况下的资本规划。
无论模型多漂亮,如果不能通过回测,就是废纸。回测的核心是统计实际损失超过VaR的次数是否与置信水平一致。比如99% VaR,理论上每100天应有1天超过。如果实际超过次数过多,说明模型低估风险;如果过少,说明模型过于保守,浪费资本。
我见过一个团队使用参数法VaR,回测结果显示过去一年超过次数为0,他们很高兴,以为模型很安全。实际上,这是因为他们使用了过长的历史数据窗口(5年),而市场处于低波动期,导致VaR被高估。后来市场波动率上升,VaR被频繁击穿。所以,回测不能只看是否超过,还要看超过的分布是否均匀,以及是否与市场状态匹配。

假设我们持有一个等权重的投资组合,包含五只股票:贵州茅台、宁德时代、招商银行、中国平安、美的集团。数据区间为2022年1月1日至2023年12月31日,共约500个交易日。我们使用日收益率数据。
首先,我们识别风险因子:这里直接使用股票价格作为因子,但更精细的做法是映射到行业因子和风格因子。为简化,我们直接计算组合收益率。
import pandas as pd
import numpy as np
假设已经加载了五只股票的日收益率数据到df_returns(DataFrame,行是日期,列是股票)
计算等权重组合日收益率
weights = np.array([0.2, 0.2, 0.2, 0.2, 0.2])
portfolio_returns = df_returns.dot(weights)
计算95%置信水平、1天持有期的VaR(历史模拟法)
confidence_level = 0.95
VaR_95 = np.percentile(portfolio_returns, 100 * (1 - confidence_level))
print(f"95% VaR (1天): {VaR_95:.2%}")
计算99% VaR
VaR_99 = np.percentile(portfolio_returns, 100 * (1 - 0.99))
print(f"99% VaR (1天): {VaR_99:.2%}")
回测:统计实际损失超过VaR的天数
exceedances_95 = (portfolio_returns < VaR_95).sum()
exceedances_99 = (portfolio_returns < VaR_99).sum()
print(f"95% VaR超过次数: {exceedances_95} (期望: {len(portfolio_returns)*0.05:.0f})")
print(f"99% VaR超过次数: {exceedances_99} (期望: {len(portfolio_returns)*0.01:.0f})")这段代码输出结果(示意):95% VaR为-2.3%,99% VaR为-3.8%。回测显示95% VaR超过次数为28次(期望25次),99% VaR超过次数为6次(期望5次)。模型基本合理,但99% VaR略低估风险。
我们设计两个压力测试情景:
我们直接计算情景下的组合损失:
# 情景A:所有股票下跌15%
loss_A = 0.15 * 1 # 等权重,损失15%
print(f"情景A损失: {loss_A:.2%}")
情景B:银行股(招商银行、中国平安)各20%,消费股(美的)10%,成长股(宁德时代)5%,茅台(消费+成长)10%
loss_B = 0.2*0.2 + 0.2*0.2 + 0.1*0.2 + 0.05*0.2 + 0.1*0.2
print(f"情景B损失: {loss_B:.2%}")结果:情景A损失15%,情景B损失13%。而99% VaR只有3.8%,说明在极端情景下,实际损失远超VaR预测。这正是压力测试的价值,它揭示了VaR无法覆盖的尾部风险。
我计算了该组合在95%、97.5%、99%三个置信水平下的VaR,并观察其随时间的变化(滚动窗口250天)。发现95% VaR相对稳定,而99% VaR波动很大,因为99%分位数依赖于极端值,样本量少导致估计不稳定。这提醒我们:高置信水平的VaR需要足够长的历史数据,否则结果不可靠。

不需要搭建复杂的VaR模型。我建议:
我曾经帮一个朋友用这种方法管理他的股票账户,他在2022年市场下跌前发现VaR开始上升,主动减仓,避免了较大损失。虽然VaR没有预测下跌,但上升的VaR本身就是一种预警信号。
需要建立完整的风险度量框架:
我在某基金公司实施过这套体系,将VaR用于日常限额管理,压力测试用于季度风险评估,有效避免了多次潜在风险事件。
必须满足监管要求,同时兼顾内部管理:
我参与过某大型银行的压力测试项目,发现最困难的是数据治理,风险因子数据质量直接影响模型输出。因此,在投入模型之前,先确保数据基础设施是完善的。
参数法(方差-协方差法)计算速度最快,但假设正态分布,在厚尾分布下严重低估风险。蒙特卡洛模拟最灵活,但计算成本高,且依赖于随机过程假设。历史模拟法介于两者之间。我通常建议:日常监控用参数法做快速估算,但最终决策必须参考历史模拟法或蒙特卡洛的结果。
历史模拟法简单易懂,但需要足够长的历史数据(至少2-3年)。如果数据不足,参数法可能更合适。蒙特卡洛模拟可以处理复杂衍生品,但模型风险高。我的原则是:能简单就不要复杂,除非业务必须。对于线性产品(股票、债券、外汇),历史模拟法足够;对于含权产品(期权、可转债),蒙特卡洛模拟是必要的。
监管要求的VaR参数(99% 10天)不一定适合内部风控。内部管理需要更灵敏的指标,比如95% 1天VaR,以便及时调整头寸。两者可以并行,但要注意不要混淆。我在某机构看到风控部门用99% 10天VaR做日常监控,结果VaR值很大,交易员认为限额太松,实际上10天持有期不适合高频交易。所以,监管指标用于资本,内部指标用于管理。
有些机构设计了上百个压力测试情景,但大多数情景结果相似,浪费资源。我建议:聚焦于5-10个最具代表性的情景,覆盖历史重演、当前风险点、极端情况。情景的质量取决于对风险因子的深刻理解,而不是数量。

回到开头的雷曼兄弟案例。如果当时他们不仅依赖VaR,还进行严格的压力测试,比如假设房价下跌30%、次级债违约率飙升,他们或许能提前看到风险敞口。但历史没有如果。作为金融数据分析师,我们的责任不是追求一个完美的数字,而是让决策者理解风险的全貌,包括那些看不见的尾部风险。
我的建议是:从今天开始,不要只看VaR数字,而是同时问自己三个问题:
只有把这三个问题纳入日常风控流程,你才算真正掌握了市场风险度量的精髓。下一步,你可以从自己的投资组合或业务数据出发,动手实现一次完整的VaR计算和压力测试。工具不重要,Excel、Python、R都可以,重要的是理解背后的逻辑和局限。当你看到自己的模型在极端情景下被击穿时,那种真实的教训远比任何教科书都深刻。



读者评论
作为风控从业者,非常赞同作者把VaR比作常规体检、压力测试比作灾难演习的观点。很多公司确实只盯着VaR限额,忽略了尾部风险。2020年3月的案例很典型,VaR被击穿6倍,说明单纯依赖历史数据窗口的模型在极端行情下就是摆设。建议日常监控用95% 1天VaR,资本计量用99% 10天VaR,再配合假设情景的压力测试,这样才算闭环。
这篇文章对VaR常见误区的拆解很到位,尤其是“VaR不是最大可能损失”和“95% VaR不等于95%概率不亏”这两点。很多初学者甚至部分从业者都会混淆。作者用具体数字和概率解释,让人一目了然。压力测试不是预测未来而是假设情景,这个观点也值得推广。适合作为风险管理入门教材的补充阅读。
回测是验证VaR模型的唯一标准,这一点深有感触。文中提到的团队因低波动期回测通过率过高而沾沾自喜,结果波动率回升后VaR频繁被击穿,正是很多机构的通病。建议回测时采用滚动窗口,并关注极端值出现频率是否与置信水平一致。另外,三种VaR计算方法的雷达图对比很直观,历史模拟法在极端风险捕捉上反而优于参数法,值得重视。
巴塞尔协议从VaR到压力测试的演进路径,反映了监管对模型局限性的清醒认识。CCAR和银保监会的要求让压力测试从可选变成必选,但很多银行的情景设计仍然流于形式。作者提出的历史情景、假设情景、最坏情景三层设计方法很实用,特别是反向压力测试从破产结果倒推情景,能有效暴露脆弱点。建议监管机构进一步细化压力测试的量化标准。