4、压力测试与情景分析:如何设计极端情景?
说实话,干风控这么多年,我最怕听到的一句话就是——「这次不一样」。每次市场出大事,总有人拿这句话安慰自己。但历史告诉我们,极端事件从来不是「会不会来」的问题,而是「什么时候来」的问题。
今天咱们聊聊压力测试和情景分析。说白了,就是给投资组合做一次「极限体检」。你想想看,平时跑个马拉松,医生还得给你测个心电图呢。金融市场波动起来,比马拉松刺激多了。
为什么需要极端情景?
我见过太多团队,做压力测试就是随便挑几个参数,比如利率升50bp、汇率跌5%。这叫什么压力测试?这叫挠痒痒。
真正的极端情景,得让资产价格出现「不可能」的波动。比如2008年雷曼倒闭那天,短期利率瞬间飙升到10%以上。你如果没测过这种场景,真遇到了就是两眼一抹黑。
核心原则:极端情景不是「可能发生」,而是「已经发生过」或「理论上可能发生」。我们要测的是——当最坏情况出现时,你的组合还能不能喘口气。
三种主流方法:历史复盘、假设分析、蒙特卡洛
我个人习惯把这三种方法比作三种武器。历史复盘是「照妖镜」,假设分析是「手术刀」,蒙特卡洛是「预言机」。咱们一个一个说。
1. 历史复盘法
这个方法最简单,也最容易被忽视。说白了,就是翻旧账。
我记得2015年做A股压力测试时,团队里有人提议用2008年的数据。我说不行,2008年是全球金融危机,A股当时还没完全放开。后来我们选了2015年股灾的数据——那才是真正的「中国特色极端行情」。
具体怎么做?
- 找出历史上最极端的3-5个事件(比如1987年黑色星期一、2008年次贷危机、2020年新冠)
- 提取这些事件中各类资产的价格变动幅度
- 把这些变动「移植」到当前组合上
避坑指南:我曾经犯过一个错——直接用历史数据做线性外推。比如2008年股市跌了50%,我就假设下次也会跌50%。但市场结构变了,当年的50%和现在的50%完全不是一个概念。一定要考虑当前市场的杠杆率、流动性、监管环境。
2. 假设分析法
这个方法更灵活,也更考验经验。你需要自己设计「如果...会怎样」的场景。
举个例子。假设某天中美同时宣布加息,原油供应中断,再加上某大型银行突然爆雷。这种「三杀」场景,历史上没出现过,但理论上完全可能。
设计步骤:
- 确定核心风险因子(利率、汇率、信用利差、波动率等)
- 给每个因子设定极端变动幅度(比如利率+300bp,汇率-15%)
- 考虑因子之间的相关性(比如利率上升时,股市通常下跌)
- 计算组合在这些假设下的损益
注意:假设分析最容易犯的错是「过度乐观」。我见过有人设计场景时,把利率和汇率都往有利方向调——那还叫压力测试吗?那叫美颜滤镜。极端情景一定要往最坏的方向想,而且要同时坏。
3. 蒙特卡洛模拟入门
这个方法听起来高大上,其实原理很简单——用计算机生成成千上万种「可能的世界」,然后看最坏的那几个世界长什么样。
我刚开始用蒙特卡洛时,总觉得它不靠谱。随机生成的东西能信?后来发现,只要参数设得对,它比人拍脑袋准多了。
核心逻辑:
- 假设资产价格服从某种分布(比如正态分布,但实际中我更推荐用t分布,因为尾部更厚)
- 设定均值、标准差、相关系数
- 用随机数生成器模拟10万次路径
- 取最差的1%或5%作为极端情景
下面是一个简单的Python示例,模拟一个股票组合在极端情况下的表现:
import numpy as np
# 设定参数
n_simulations = 100000
portfolio_value = 1_000_000 # 初始组合价值100万
mean_return = 0.08 # 年化收益8%
volatility = 0.25 # 年化波动率25%
days = 252 # 模拟一年
# 蒙特卡洛模拟
np.random.seed(42)
returns = np.random.normal(mean_return/days,
volatility/np.sqrt(days),
(n_simulations, days))
# 计算最终组合价值
final_values = portfolio_value * np.exp(np.sum(returns, axis=1))
# 找出最差的1%情景
worst_1_percent = np.percentile(final_values, 1)
print(f"最差1%情景下的组合价值: {worst_1_percent:,.0f}")
print(f"最大回撤: {(worst_1_percent/portfolio_value - 1)*100:.1f}%")
我的经验:蒙特卡洛模拟的精度,90%取决于你输入的参数。我见过有人直接用历史波动率,结果模拟出来的极端情景比实际温和得多。为什么?因为历史波动率是「平均」的,而极端事件发生时,波动率会瞬间飙升。我建议用「波动率锥」的方法,给不同期限设定不同的波动率假设。
三种方法的对比
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 历史复盘法 | 简单直观,有真实数据支撑 | 无法覆盖未发生过的场景 | 常规压力测试、监管报送 |
| 假设分析法 | 灵活,可自定义极端场景 | 依赖主观判断,容易遗漏 | 新产品评估、并购决策 |
| 蒙特卡洛模拟 | 全面,可生成大量场景 | 计算量大,参数敏感 | 复杂组合、衍生品定价 |
一张图看懂压力测试流程
下面这张SVG图,是我自己总结的压力测试核心流程。你仔细看一遍,基本就知道怎么动手了。
实战中的几个坑
嗯,这里要注意。压力测试做完了,不代表就万事大吉了。我踩过几个坑,跟大家分享一下。
- 坑一:只测一次。压力测试不是一次性工作,得定期更新。市场变了,组合变了,你的极端情景也得跟着变。
- 坑二:忽略流动性。很多压力测试只算价格波动,忘了流动性。2008年很多基金不是亏死的,是挤兑死的。一定要测「如果所有人同时要赎回,你扛不扛得住」。
- 坑三:过度依赖模型。蒙特卡洛再牛,也是基于假设的。我见过有人把模型结果当真理,结果市场一反转,模型全废了。记住:模型是工具,不是答案。
最后说一句:压力测试的目的不是预测未来,而是让你知道——当最坏的情况发生时,你还有没有牌可打。设计极端情景时,别怕想得太夸张。现实往往比你能想到的还要疯狂。
公众号:蓝海资料掘金营,微信deep3321