3、库存压力测试场景设计:历史场景回放与合成场景生成
库存压力测试,说白了就是给你的做市系统“上强度”。
你想想看,平时行情风平浪静,系统跑得稳稳当当。但一到极端行情,库存风险瞬间暴露。我见过太多团队,回测时曲线漂亮得不行,一上实盘就被一波流动性枯竭打穿。
所以,场景设计是压力测试的灵魂。今天我们就来聊聊怎么设计靠谱的测试场景。
3.1 历史场景回放:让历史教训重演
历史场景回放,是最直接、最真实的压力测试方式。我个人习惯,先把历史上几次著名的极端行情拉出来,作为必测项目。
3.1.1 2020年3月:流动性黑洞
2020年3月,新冠疫情引发的全球市场恐慌,至今记忆犹新。我记得当时比特币从10000美元跌到3800美元,只用了两天时间。做市商面临的是:
- 价格断崖式下跌:分钟级别的跌幅超过10%
- 买卖价差急剧扩大:从平时的0.01%扩大到1%以上
- 订单簿深度骤降:盘口挂单量减少80%以上
我在项目中遇到过,有些做市策略在回测时表现很好,但一遇到这种行情,库存瞬间堆积,亏损速度远超预期。为什么会这样?因为回测用的是正常行情,而极端行情下的流动性结构完全不同。
3.1.2 2021年5月:政策冲击下的踩踏
2021年5月19日,中国监管政策出台,市场瞬间崩盘。这次行情的特点是:
- 多市场联动下跌:现货、期货、永续合约同步暴跌
- 资金费率异常:永续合约资金费率一度达到-1%以上
- 交易所间价差扩大:不同交易所的价差超过5%
嗯,这里要注意。2021年5月的行情,对跨交易所做市策略冲击特别大。我有个朋友,他的策略在正常行情下能稳定套利,但5月19日那天,交易所之间的价差瞬间拉大,他的库存对冲完全失效,一天亏掉了三个月的利润。
3.2 合成场景生成:制造你想象不到的极端
历史场景虽然真实,但市场永远在进化。下一次极端行情,可能和历史上任何一次都不一样。所以,我们需要合成场景——人为制造各种极端条件,看看系统能不能扛住。
3.2.1 波动率突变场景
波动率突变,是库存风险的主要来源。我建议从三个维度来构造:
- 瞬时波动率飙升:在1秒内,波动率从正常水平跳升到10倍
- 波动率持续高位:波动率在高位维持30分钟以上
- 波动率集群:高波动率之后紧接着更高波动率
合成方法其实不复杂。你可以用GARCH模型来生成波动率路径,也可以直接用历史波动率做随机采样。我个人习惯用后者,因为更直观,也更容易控制。
# 波动率突变场景生成示例
import numpy as np
def generate_volatility_shock(base_vol, shock_factor, duration):
"""
base_vol: 基础波动率(年化)
shock_factor: 突变倍数
duration: 突变持续时长(秒)
"""
normal_vol = base_vol / np.sqrt(365 * 24 * 3600) # 秒级波动率
shock_vol = normal_vol * shock_factor
# 生成突变序列
vol_series = np.ones(duration) * shock_vol
# 加入随机扰动
vol_series *= (1 + 0.1 * np.random.randn(duration))
return vol_series
3.2.2 流动性枯竭场景
流动性枯竭,是做市商的噩梦。你想想看,当市场突然没人交易了,你的库存就变成了“烫手山芋”。
合成流动性枯竭场景,我一般关注这几个参数:
| 参数 | 正常值 | 枯竭值 | 说明 |
|---|---|---|---|
| 盘口深度 | 100 BTC | 5 BTC | 1%价格范围内的挂单量 |
| 买卖价差 | 0.01% | 0.5% | 最优买卖价差 |
| 成交频率 | 10笔/秒 | 0.1笔/秒 | 市场成交速度 |
| 订单撤销率 | 30% | 90% | 挂单被撤销的比例 |
合成时,我建议把这些参数做成动态变化的。比如,先让深度缓慢下降,然后突然加速,最后在某个点瞬间归零。这样更接近真实市场的流动性崩塌过程。
3.3 场景组合与执行策略
光有场景还不够,怎么执行也很关键。我总结了一套组合策略:
- 单场景测试:每个场景独立运行,看系统能不能存活
- 连续场景测试:把多个场景串联起来,模拟“黑天鹅”接连发生
- 随机场景测试:从场景库中随机抽取,模拟不可预测的市场
我个人最看重连续场景测试。因为真实市场里,极端行情往往不是孤立的。2020年3月之后,紧接着就是2020年4月的流动性恢复期,期间波动率依然很高。如果你的系统只能扛住单一冲击,那还不够。
3.4 本章知识体系
下面这张图,是我对库存压力测试场景设计的整体理解。你可以把它当作一个检查清单,看看自己有没有遗漏。
这张图把整个场景设计的脉络理清楚了。左边是历史场景,右边是合成场景,中间是执行策略,最终输出风险报告和容量评估。你照着这个框架去搭建,基本不会漏掉关键环节。
公众号:蓝海资料掘金营,微信deep3321