4、历史情景构建法:基于历史极端事件构建压力情景
做压力测试,最怕什么?
怕你设计的场景根本不够「极端」。
我见过不少团队,自己拍脑袋想了个暴跌20%的场景,觉得已经很吓人了。结果回头一看,1987年一天跌了22%,2008年雷曼倒闭后市场连续熔断,2020年新冠直接把流动性打穿。你那个20%?说实话,连热身都算不上。
所以,我个人习惯的做法是——直接从历史里找素材。历史不会重复,但人性会。极端事件背后的市场行为、流动性枯竭、恐慌传导,这些规律是通用的。
4.1 核心思路:把历史「搬」到当下
历史情景构建法,说白了就是:
- 选事件:挑几个有代表性的历史极端行情
- 拆特征:把当时的价格波动、成交量变化、相关性突变等关键指标提取出来
- 做映射:把这些特征「贴」到你当前的持仓和策略上
- 算结果:看看如果历史重演,你的做市商会亏多少
嗯,这里要注意——不是简单地把历史价格曲线直接套用。因为市场结构变了,波动率水平也不同。我们要提取的是相对变化幅度和模式特征,而不是绝对值。
关键原则:历史情景构建的核心是「模式复用」,而非「数据复用」。
4.2 三大经典历史事件拆解
我挑三个最典型的,也是我在项目中反复用到的:
| 事件 | 时间 | 核心特征 | 对做市商的影响 |
|---|---|---|---|
| 1987年黑色星期一 | 1987.10.19 | 单日暴跌22%,流动性瞬间消失 | 报价被击穿,库存无法对冲 |
| 2008年金融危机 | 2008.09-2009.03 | 相关性突变,信用利差飙升 | 多资产组合同时亏损 |
| 2020年新冠冲击 | 2020.02-2020.03 | 波动率爆表,日内反转频繁 | 高频策略失效,滑点巨大 |
4.3 具体构建步骤(附代码)
我一般分四步走。拿2020年新冠场景举个例子:
第一步:提取特征向量
从2020年2月20日到3月23日,提取以下指标:
- 标普500指数日收益率:最大单日跌幅-12%
- VIX指数:从15飙升至82
- 买卖价差:平均扩大5-8倍
- 成交量:放大3-4倍
第二步:映射到当前持仓
假设你现在做市的是某只科技股ETF。你需要把2020年的波动率变化、价差变化按比例映射过来。
# 伪代码示例:历史情景映射
def build_covid_scenario(current_price, current_vol, current_spread):
# 提取2020年特征
hist_vol_shock = 82 / 15 # VIX从15到82,放大5.47倍
hist_spread_shock = 6 # 价差平均扩大6倍
# 映射到当前
scenario_vol = current_vol * hist_vol_shock
scenario_spread = current_spread * hist_spread_shock
# 价格路径模拟
price_path = generate_gbm_path(
S0=current_price,
mu=-0.03, # 2020年Q1累计跌幅约30%,日均约-0.03%
sigma=scenario_vol,
T=30, # 模拟30个交易日
n=1000 # 1000条路径
)
return price_path, scenario_spread
第三步:运行压力测试
把生成的场景数据喂给你的做市策略,看PnL曲线。我建议重点关注:
- 最大回撤(Max Drawdown)
- 库存累积速度
- 盈亏比是否跌破1.0
第四步:对比基准
把结果和正常市场下的表现做对比。如果新冠场景下你的策略回撤超过正常情况的5倍,那就要警惕了。
我的经验:曾经有个团队,2020年之前一直觉得自己的做市策略很稳健。结果用新冠场景一测,发现库存会在3天内爆仓。后来他们加了动态对冲和熔断机制,才躲过一劫。所以,别等到真出事了再后悔。
4.4 历史情景的局限性
说实话,这个方法也不是万能的。我有几点想提醒你:
避坑指南:
- 历史不会简单重复:2020年的新冠场景,如果放在今天,市场结构已经变了(比如零日期权、算法交易占比更高),冲击形态可能完全不同。
- 样本太少:真正极端的也就那么几次,统计上不够显著。你想想看,30年才3-4次极端事件,能说明什么?
- 忽略新风险:历史情景无法覆盖「从未发生过」的风险,比如加密货币崩盘、地缘政治黑天鹅。
所以,我个人的做法是:历史情景 + 假设情景混合使用。历史情景提供「真实感」,假设情景覆盖「未知域」。两者互补,才能构建出真正有意义的压力测试。
4.5 知识体系图
下面这张图,是我自己整理的历史情景构建法的核心逻辑。你可以把它当成一个检查清单:
4.6 实战中的小技巧
最后,分享几个我在项目中踩过的坑和总结的经验:
- 别只盯着价格:很多人做历史情景只改价格,忽略了流动性变化。我曾经吃过这个亏——2020年新冠场景下,我的策略在回测里表现很好,但实盘时发现根本成交不了,因为价差太大了。后来我把价差冲击也加进了场景,才真正模拟出当时的恶劣环境。
- 多事件叠加:真正的危机往往是多重冲击叠加。比如2008年,先是次贷危机,然后是雷曼倒闭,接着是流动性冻结。我建议你把几个历史事件的特征组合起来,构建一个「超级压力场景」。
- 定期更新事件库:别只守着1987、2008、2020这三个。2022年的加息风暴、2023年的硅谷银行事件,都是很好的素材。我每半年更新一次事件库,保持场景的时效性。
一句话总结:历史情景构建法,就是用过去的极端事件,检验你今天的策略能不能扛得住。它不完美,但比凭空想象靠谱得多。