核心命题:回测表现优异但实盘远不如预期,问题出在哪?如何解决?
一、为什么回测与实盘差距这么大
1.1 根本矛盾:过去 ≠ 未来
回测的本质是用历史数据验证策略逻辑,但市场是非平稳系统(Non-stationary)——驱动价格的关系、波动结构、参与者构成都在持续变化。一个在2019-2021数据上表现完美的均值回归策略,放到2022年的趋势市可能直接爆仓。这不是策略"坏了",而是市场状态切换了,而回测无法预见未来的状态切换。
1.2 四大回测陷阱
| 陷阱 | 根源 | 典型表现 |
|---|---|---|
| 过拟合 | 用历史噪音当信号 | 参数微调0.1,夏普从0.8跳到2.5 |
| 幸存者偏差 | 只含现存标的 | 用当前沪深300成分股回测,忽略被踢出的ST股 |
| 前视偏差 | 使用了未来信息 | 使用复权收盘价在盘中做决策 |
| 执行偏差 | 假设理想成交 | 忽略滑点、涨跌停无法买入、冲击成本 |
1.3 散户为什么更容易踩坑
免费数据源常有缺失和复权错误;工具能力有限,日频回测掩盖了日内滑点和成交问题;A股个股历史短,统计显著性容易伪装。但最致命的是心理驱动——回测赚钱→兴奋→加参数→更赚钱→过度自信→实盘亏钱,这是一个自我强化的陷阱循环。
「这是散户做量化最危险的地方」——回测工具越强大,过拟合风险越大。跑1000组参数选年化最高的那组,等于在噪音里找规律。
二、构建抗陷阱的量化研究框架
2.1 反过拟合方法论
核心原则:把"在样本内表现好"从目标变成约束条件,真正的目标是"在样本外也能活"。
数据切分三种方式:
- 简单切分:样本内60%用于开发,样本外40%只做一次验证,不调参
- 滚动窗口:训练[0,T1]→测试[T1,T2],再训练[T1,T3]→测试[T3,T4]……滚动推进
- 组合交叉验证:将时间轴分为多组,组合选取训练组和测试组,多次取平均
关键规则:样本外数据只看一次。看了样本外结果又回去调参,等于把样本外变成了样本内——这是最常见的自欺行为。
2.2 参数鲁棒性检验
不要只看"最优参数",要看最优参数附近的表现:
- 参数热力图:绘制双参数空间的热力图,最优点周围是"平原"(可信)还是孤立"尖峰"(过拟合)?
- 参数扰动测试:将最优参数各偏移±20%,看策略是否仍然盈利
- 参数数量控制:个人量化策略建议可调参数不超过3个
2.3 反前视偏差的检查清单
| 检查项 | 常见错误 | 正确做法 |
|---|---|---|
| 复权价格 | 使用前复权价格做买入判断 | 交易信号基于未复权原始价格 |
| 财报数据 | 使用发布日当天数据 | 使用发布日下一个交易日数据 |
| 日内信号 | 用收盘价做信号并当日成交 | 信号产生后至少下一根Bar才能执行 |
| 涨跌停 | 回测中直接以涨停价买入 | 涨停无法买入、跌停无法卖出 |
2.4 冲击成本与滑点模型
不要假设零滑点。根据策略频率设定滑点:
| 策略频率 | 建议滑点 | 说明 |
|---|---|---|
| 日频 | 1-2个Tick | 小盘股加到5个Tick |
| 小时频 | 0.5-1个Tick | 相对温和 |
| 分钟频 | 0.5个Tick+冲击成本 | 高频需精确建模 |
冲击成本公式:σ × √(订单量 / 日均成交量)。经验法则:单笔交易量超过日均成交量1%时,必须考虑冲击成本。
2.5 风险管理框架
凯利公式(简化版):
f* = (p × b - q) / b,其中 p=胜率、q=1-p、b=盈亏比。
实务建议:使用半凯利或三分之一凯利(Kelly/2到Kelly/3),因为你实际上并不知道精确的p和b。
四级止损体系:
| 层级 | 触发条件 | 动作 |
|---|---|---|
| 策略止损 | 单笔亏损超过-2% | 平仓该笔交易 |
| 日止损 | 当日累计亏损超过-3% | 当日停止交易 |
| 周止损 | 当周累计亏损超过-5% | 本周停止交易,复盘策略 |
| 账户止损 | 账户回撤超-15% | 全面暂停,重新评估 |
三、实操检查清单与风险管理
3.1 回测阶段必做清单
- ☐ 数据审查:确认数据源质量,检查缺失值和复权方式
- ☐ 样本外预留:至少30%数据作为样本外,只验证一次
- ☐ 参数鲁棒性:最优参数偏移±20%后策略仍盈利
- ☐ 前视偏差自查:逐项通过2.3节检查清单
- ☐ 滑点与成本:加入合理滑点+佣金+印花税
- ☐ 涨跌停模拟:涨停不买、跌停不卖的硬规则
- ☐ 经济逻辑陈述:一句话写清"谁在亏钱给你",写不出就别上线
3.2 实盘前压力测试
| 测试场景 | 通过标准 |
|---|---|
| 参数扰动±20% | 仍盈利,夏普>0.5 |
| 子区间稳定性(按年拆分) | 无年份亏损超过-5% |
| 极端行情(2008/2015/2020) | 最大回撤不超过止损线 |
| 交易成本加倍(滑点×2) | 仍盈利 |
| 换手率减半 | 仍盈利(说明不是靠摩擦赚钱) |
3.3 实盘监控指标
| 指标 | 预警阈值 | 行动 |
|---|---|---|
| 滚动夏普(近60日) | <0 | 减仓50% |
| 回撤 | >15% | 暂停策略 |
| 胜率偏移(近30日 vs 回测) | 偏移>15% | 复盘策略逻辑 |
| 实盘vs回测收益偏差 | <70% | 检查执行链路 |
3.4 策略退役标准
- 连续3个月跑输基准
- 最大回撤超过历史回撤的1.5倍
- 经济逻辑的前提条件已改变(制度变化、市场微观结构变化)
给个人量化交易者的最后建议:
量化的核心不是代码写得多漂亮,而是对自己的策略有多诚实。一个在开发阶段就严格验证逻辑、坦诚面对过拟合的策略,远胜于一个"回测完美"但经不起实盘检验的策略。
宁愿用一个"80分但稳定"的参数,不用"99分但过拟合"的参数。
免责声明:本文仅供学习参考,不构成任何投资建议。量化交易存在亏损风险,过往表现不代表未来收益。