1. 策略失效概述
做量化交易这些年,我见过太多策略从「印钞机」变成「碎钞机」的案例。说实话,没有哪个策略能永远赚钱——这不是悲观,是事实。你想想看,市场本身就在不断进化,你的策略凭什么一成不变?
这一章,我们来聊聊策略失效的本质。我会结合自己踩过的坑,帮你建立起对失效的系统认知。
什么是策略失效?
定义其实很简单:策略的实际表现显著且持续地偏离了回测预期。
注意两个关键词——「显著」和「持续」。回测中最大回撤8%,实盘突然变成25%,这叫显著。连续三周跑输基准,这叫持续。偶尔一天亏损不算失效,那是正常波动。
我个人习惯用三个维度来量化判断:
| 维度 | 指标 | 失效阈值(参考) |
|---|---|---|
| 收益维度 | 年化收益率偏离度 | 低于回测值40%以上 |
| 风险维度 | 最大回撤倍数 | 超过回测值2倍 |
| 稳定性维度 | 夏普比率 | 跌破0.5 |
失效的三种常见类型
这些年我诊断过的失效策略,基本逃不出下面三类。咱们一个一个说。
1. 参数衰减
说白了,就是策略的参数「过期了」。比如你回测时发现20日均线最好用,但市场波动结构变了,现在30日均线更合适。
参数衰减有个典型特征:策略逻辑本身没问题,但最优参数在漂移。就像一把钥匙,锁没换,但钥匙齿磨损了。
我在项目中遇到过最典型的案例:一个基于布林带的均值回归策略,回测时参数组合(20, 2)表现完美。上线半年后,最优参数漂移到了(30, 2.5)。策略逻辑没变,但参数不匹配了,结果就是连续亏损。
2. 市场结构变化
这是最致命的一类。市场结构变了,你的策略逻辑本身就不成立了。
举个例子:2015年股灾后,股指期货的升贴水结构彻底改变。之前靠吃贴水的套利策略,逻辑基础直接崩塌。这不是调参数能解决的,得重构。
市场结构变化通常来自:
- 监管政策突变——比如手续费调整、涨跌停板规则变化
- 参与者结构改变——比如量化私募大规模涌入某个品种
- 微观结构进化——比如T+0变T+1,或者引入做市商制度
3. 过拟合
嗯,这是新手最容易犯、老手也难免翻车的坑。
过拟合的本质是:你的策略不是在学习市场规律,而是在记忆历史噪声。回测曲线漂亮得像艺术品,一上实盘就原形毕露。
我见过最夸张的一个案例:有人用20个参数拟合了3年的日线数据,回测年化收益200%,夏普5.0。实盘三个月,亏了40%。为什么?因为他把每一个偶然的波动都当成了规律。
判断过拟合的几个信号:
- 回测夏普 > 3.0(实盘几乎不可能)
- 参数稍微一改,收益就大幅波动
- 样本外测试表现断崖式下跌
# 一个简单的过拟合检测方法:参数敏感性测试
def parameter_sensitivity_test(strategy, param_ranges):
"""
检测策略对参数的敏感程度
如果收益随参数变化剧烈波动,说明过拟合风险高
"""
results = []
for param in param_ranges:
sharpe = backtest(strategy, param)
results.append(sharpe)
volatility = np.std(results) / np.mean(results)
print(f"参数敏感度系数: {volatility:.2f}")
if volatility > 0.5:
print("⚠️ 高过拟合风险,建议简化参数")
else:
print("✅ 参数敏感度在可接受范围")
失效的生命周期
策略失效不是瞬间发生的。它有一个完整的过程。理解这个过程,你才能在早期发现苗头。
我把它分成四个阶段:
你看这个图,关键信息其实就一句话:越早发现,修复成本越低。
潜伏期是最容易被忽视的阶段。这时候策略还在赚钱,但信号质量已经开始下降。比如原来每天出3个信号,现在变成2个;原来胜率60%,现在55%。很多人觉得「还行啊,还在赚」,结果等到恶化期才反应过来。
我个人习惯在策略上线后,每周跑一次「健康检查」:
- 对比本周和回测期的信号频率
- 检查盈亏比是否在下降
- 观察最大回撤是否在加速扩大
到了爆发期,策略已经明显亏钱了。这时候很多人会犯一个错误——「再等等,说不定下周就回来了」。我告诉你,大概率不会。市场不会可怜你的持仓成本。
消亡期是最惨的。策略逻辑已经彻底失效,怎么调都没用。比如2015年股灾后,那些靠「追涨停板」吃饭的策略,逻辑基础都没了。这种时候,果断放弃比盲目坚持更明智。
好了,这一章我们建立了策略失效的基本认知框架。记住三个核心:失效的定义、三种类型、四个阶段。后面我们会深入每一种类型的诊断方法和修复手段。