10、做市策略回测框架:历史数据回测、蒙特卡洛模拟回测、情景分析与压力测试、回测绩效评估指标
做市策略写好了,能不能赚钱?
这个问题,光靠拍脑袋可不行。我见过太多团队,策略逻辑看着挺漂亮,一上实盘就亏得亲妈都不认识。为什么?因为没经过严格的回测。
回测,说白了就是给策略做「体检」。你得用历史数据、用随机模拟、用极端场景,把策略里里外外查一遍。今天我就把这套回测框架掰开揉碎讲清楚。
10.1 历史数据回测:最基础的验证手段
历史数据回测,是每个做市策略的「第一道坎」。你拿过去一段时间的行情数据,让策略模拟跑一遍,看看它表现如何。
核心要点:
- 数据质量第一:我踩过最大的坑,就是用了有幸存者偏差的数据。比如只收录了至今还存续的股票,那些退市的、暴跌的,全被剔除了。这会导致回测结果虚高。一定要用全量数据,包括退市、停牌、涨跌停的情况。
- 交易成本不能省:很多人回测时忽略手续费、滑点、冲击成本。结果实盘一跑,利润全被摩擦成本吃掉了。我个人习惯,至少按双边万三来算,高频策略甚至要算到万分之一级别。
- 过拟合是头号敌人:你调参数调得越精细,回测曲线越漂亮,实盘往往越惨。为什么?因为你把策略「训练」成了只认识历史数据的样子。我建议,参数不要超过3个,且一定要做样本外测试。
避坑指南:我曾经做过一个期权做市策略,历史回测年化收益30%,回撤不到5%。结果实盘第一周就亏了8%。后来复盘发现,回测时我用了「未来数据」——用当天的收盘价来模拟当天的交易决策。这是典型的回测作弊,大家千万注意。
历史数据回测的代码框架,我一般这样写:
# 伪代码示例:历史数据回测框架
def backtest(strategy, historical_data, params):
portfolio = init_portfolio(params)
for bar in historical_data:
# 1. 更新市场状态
market_state = update_market(bar)
# 2. 策略生成报价
bid, ask = strategy.generate_quotes(market_state)
# 3. 模拟成交(考虑排队概率)
trades = simulate_execution(bid, ask, bar)
# 4. 更新持仓和PnL
portfolio.update(trades, bar)
return portfolio.get_metrics()
10.2 蒙特卡洛模拟回测:应对不确定性
历史数据回测有个致命缺陷:它只验证了「一条路径」。但未来有无数种可能。蒙特卡洛模拟,就是用来解决这个问题的。
说白了,就是基于历史数据的统计特征(波动率、相关性、跳跃概率等),随机生成成千上万条未来行情路径,然后让策略在这些路径上跑一遍。
具体怎么做?
- 建模:先对标的资产的收益率分布建模。我常用的是带跳跃的随机波动率模型,因为纯几何布朗运动太理想化,无法捕捉「黑天鹅」。
- 模拟:生成10000条路径,每条路径长度对应回测周期。每条路径上,策略都重新跑一遍。
- 统计:看这10000次回测结果的分布。重点关注尾部风险——最差的5%场景下,策略亏多少?
我的经验:蒙特卡洛模拟特别适合验证期权做市策略。因为期权的非线性特征,历史数据回测往往无法覆盖所有波动率场景。我一般至少跑5000次模拟,才能对策略的稳健性有个底。
你想想看,如果策略在95%的模拟路径上都能盈利,那实盘赚钱的概率就大得多。反之,如果只有50%的路径赚钱,那基本就是抛硬币了。
10.3 情景分析与压力测试:极端行情下的生存能力
蒙特卡洛模拟虽然全面,但它基于历史统计特征。万一出现历史上从未发生过的情况呢?比如2020年3月的原油暴跌,或者2023年日本央行突然加息。
这时候就需要情景分析和压力测试了。
情景分析:人为设定一些「如果...会怎样」的场景。比如:
- 「如果标的价格瞬间暴跌20%」
- 「如果隐含波动率飙升50个点」
- 「如果流动性枯竭,买卖价差扩大10倍」
压力测试:更极端一些。我一般会设计三个级别:
| 压力级别 | 场景描述 | 预期损失上限 |
|---|---|---|
| 轻度 | 类似2015年股灾 | 日亏损不超过资本的5% |
| 中度 | 类似2008年金融危机 | 日亏损不超过资本的15% |
| 重度 | 类似1987年黑色星期一 | 日亏损不超过资本的30% |
注意:压力测试不是为了看策略能赚多少,而是看它会不会「死」。我见过一个策略,平时年化20%,但在压力测试中一天亏了80%。这种策略,你敢上实盘吗?
10.4 回测绩效评估指标:别只看夏普比率
很多人回测完,只看两个指标:总收益率和夏普比率。这远远不够。做市策略的评估,需要一套更全面的指标体系。
我常用的核心指标:
- 年化收益率:这个不用多说,但要注意是「净收益率」,扣除了所有成本。
- 最大回撤:策略从最高点到最低点的跌幅。做市策略一般要求最大回撤不超过10%。
- 夏普比率:衡量风险调整后收益。做市策略的夏普比率通常比趋势策略高,我见过优秀的能做到3以上。
- 卡玛比率:年化收益率除以最大回撤。这个指标比夏普更直观,反映了「每承担1%的回撤,能换来多少收益」。
- 胜率与盈亏比:做市策略的胜率通常很高(60%-80%),但盈亏比可能只有1:1。这很正常,因为做市赚的是微薄的价差,靠的是「薄利多销」。
- 资金利用率:做市策略需要占用大量保证金。资金利用率越高,说明同样的资本能撬动更大的交易量。
我的习惯:我会把回测结果做成一张「绩效仪表盘」,上面同时展示这6个指标。任何一个指标亮红灯,我都不会上实盘。尤其是最大回撤和卡玛比率,这两个是硬约束。
10.5 回测框架的核心逻辑
说了这么多,我把整个回测框架的逻辑画成了一张图,方便你理解:
这张图很直观:策略进来,先过三关——历史数据、蒙特卡洛、压力测试。三关都过了,再看绩效指标。指标全部达标,才考虑上实盘。少一步,都是在赌博。
最后说一句:回测做得再好,也只是「模拟考」。实盘才是「高考」。我见过太多回测漂亮的策略,实盘一跑就变形。所以,回测框架只是工具,真正的功夫在于你对市场的理解和对风险的敬畏。