2. 失效类型分类:市场环境变化、数据错误、过拟合、执行偏差

策略跑得好好的,突然开始亏钱。这时候你第一反应是什么?

别急着改参数。先搞清楚——到底出了什么问题。

我处理过的失效案例,基本跑不出四大类:市场环境变了、数据有问题、模型过拟合了、执行层面出了偏差。今天咱们把这四类掰开揉碎了讲。
知道了病根在哪,才能对症下药。

核心原则: 失效分类不是给策略贴标签,而是为了确定下一步的排查路径。分错类,后面全白干。

2.1 市场环境变化

这是最常见的失效类型。说白了,行情变了,但你的策略还活在过去。

市场有个特性——它不是固定不变的。波动率、相关性、流动性、趋势结构,这些要素会随着宏观周期、监管政策、甚至社交媒体情绪发生陡变。
很多策略在回测时看起来很漂亮,但一上线,市场风格换了个频道,它就失灵了。

市场特征 常见变化方向 典型失效表现
波动率 低→高 / 高→低 止损被频繁触发,或趋势策略长期无信号
相关性 风险平价模型中资产相关系数突然飙升 组合回撤远超预期
流动性 缩表、假期、黑天鹅事件 滑点大幅增加,成交价偏离信号价格
趋势/震荡 趋势转为震荡,或震荡转为趋势 均线突破策略反复打脸 / 网格策略单边爆仓

我之前遇到过一套“日内动量”策略,在2019年到2021年中一直很稳定。2022年俄乌冲突后,波动率裂变,那套策略一天内连续止损了5次。
嗯,问题不在策略逻辑,而是市场环境发生了结构性改变。我们后来在策略里加了一个波动率自适应过滤器,才缓过来。

我的习惯: 定期滚动计算策略设计时依赖的关键市场指标(如20日ATR、相关矩阵、流动性指标),与设计基线对比。差值超过两个标准差,就要打黄色预警了。

2.2 数据错误

数据出问题,是排查时最容易跳过的坑。为什么会这样?因为人人都觉得数据源“应该没问题”。但现实中,数据错了,什么都白搭。

数据错误可以分为几个层面:

  • 源数据异常: 交易所盘中数据断流、tick拼接错位、除权除息未复权。
  • 清洗逻辑漏洞: 未来函数、前向引用、错误填充、停牌期间用错误价格。
  • 特征工程错误: 指标计算中用错参数(比如用收盘价算了两次)、roll-over换月造成跳空。
  • 时间戳对齐问题: 不同数据源时间精度不一致,导致策略信号错位。

举个例子。我有一次排查一套CTA策略,盘中发现信号明明该开多,结果下单却是空。查了两天,最后发现是因为数据服务商在某个品种的涨跌停时重复了当根bar,导致策略认为趋势反转——数据多刷新了一个tick。

我曾经踩过的一个深坑: 从第三方下载的历史数据,在2015年股灾期间有部分指数数据被修正过。回测时没发现,实盘一跑,直接崩。从那之后,我对每一条数据都做了逐字段的交叉验证,包括检查前后bar的时间戳连续性和价格逻辑(如最高价≥最低价、涨跌停边界)。

2.3 过拟合

过拟合是老生常谈了。但我想说,很多人的“过拟合”其实是被美化后的“数据挖掘”。

策略在回测时表现完美,但一到样本外就不行。区别在于:过拟合通常意味着模型学了很多噪声,而不是真实规律。数据挖掘则是你试了太多参数组合,总有一款能“拟合”历史。

信号 描述
回测曲线过于平滑 几乎没有回撤,最大回撤小于2%且持续多年的策略,大概率过拟合
参数敏感度过高 参数微调(如移动均线周期从20改到21)导致收益剧烈波动
多策略叠加后夏普比异常高 同时用了趋势+均值回归+择时,每个单独一般,组合后曲线完美——往往是协方差估计错了
样本外/前向测试表现显著下滑 这个大概率就是过拟合的实锤

你想想看,如果一个策略有20个参数,每个参数试10个值,那就是10的20次方种组合。理论上总能找到一组在历史数据上表现好的参数。
但历史不会简单重演。所以我个人非常反对”暴力调参”。

避坑方法:
  • 做滚动窗口交叉验证(先做5倍时间序列交叉验证)
  • 保持参数数量尽量少(3-5个核心参数为佳)
  • 对每个参数做灵敏度分析,看曲面是否平坦
我常用的检查办法: 把回测期分成两段——比如前70%训练、后30%验证。如果前段和后段的表现差异超过30%,我直接弃用这套策略,不纠结。

2.4 执行偏差

策略逻辑没问题,数据也没错,但就是赚不到钱——很可能问题出在执行上。执行偏差是指理论信号与实际成交结果之间的系统性差异。

  • 滑点低估: 回测时假设固定1个tick滑点,实盘遇到流动性差时滑了10个tick。
  • 延迟问题: 从信号生成到下单到成交确认之间的延迟,导致成交价偏离信号价格。
  • 订单类型不当: 用市价单时被吃透,用限价单又无法成交。
  • 交易所规则变化: 熔断机制、最小变动单位调整、涨跌停板幅度变化,都会影响执行。

我记得有一次做跨期套利,回测年化收益能做到20%。实盘上线之后连续三周都没赚到钱。
后来我一笔一笔地分析成交明细,发现回测时用的是收盘价,但实盘时我需要双边同时挂单,实际成交价与收盘价差了几个tick。再加上交易所调整了最小变动单位,导致理论价差与实际价差完全对不上。

重要提示:
  • 回测时要使用比实际预期更保守的滑点和手续费假设(比如滑点多加1-2个tick)
  • 实盘日志必须记录每笔订单的“信号时间”“下单时间”“成交时间”“成交价格”四个字段,用于后续偏差分析
  • 定期对执行偏差做归因:是延迟还是滑点?是订单路由问题还是市场微观结构变化?

2.5 四种失效类型的交叉关系

上面四种类型不是孤立的。很多时候,策略失效是多种因素叠加的结果。比如:市场环境变化导致波动率升高,进而放大了数据错误带来的影响;过拟合的策略在市场环境变化时首当其冲。

所以我建议,在开始排查时,先不要急着锁定某一类。而是按流程走一遍,把可能性筛一遍。

策略失效类型分类知识框架 策略失效 市场环境变化 数据错误 过拟合 执行偏差 波动率突变 相关性结构改变 流动性枯竭 源数据异常 清洗逻辑漏洞 未来函数 参数过调 回测曲线过平滑 样本外表现差 滑点低估 下单延迟 订单类型问题 交叉关系 市场环境变化 → 放大数据错误影响
过拟合策略在市场变化时首当其冲
我的排查习惯: 拿到失效报告后,先用这张分类图做快速映射——看最像哪一类,再深入钻进去。但一定留个心眼,可能在半路发现是别的类型串进来了。
注意: 不要认为四种类型是互斥的。一个好的失效排查流程,应该能同时检测到多个失效类型,并判断其权重。我建议在第一步先做“数据完整性校验”和“执行偏差日志分析”,因为这两类问题最容易被验证,也能最快排除。

好了,四种失效类型的基本画像讲完了。
下回你看到策略回撤,别再一头扎进参数优化里,先按这个框架对号入座,效率高得多。

真正要上手干的事,在后面的章节会逐步展开。先把分类概念吃透,后面都是水到渠成的事。