回测软件最温和的陷阱,是让你「再试一组参数」变得几乎零成本。试得多了,总会撞上一段历史里好看的组合。你以为发现了规律,其实可能只是对噪声完成了一次成功拟合。这种因反复挖掘同一份历史而得到虚高结论的现象,常被称为数据窥探偏差(data snooping)。把它记成一句话:调参次数本身就是成本,即使你没有花一分钱手续费。
它和过拟合什么关系
过拟合偏重「模型太灵活,记住了样本细节」;数据窥探偏重「你尝试的次数太多,显著结果是筛出来的」。两者经常一起出现:你扫了 200 组均线周期,留下夏普最高的那组,再对同一段数据报成绩——这既是窥探,也很容易过拟合。
统计直觉:若真随机策略,反复试验也会出现「幸运」参数。试验次数越多,最幸运的那条曲线越亮。你不报告试了多少次,读者(和未来的你)会把运气当成边缘。
生活化反例
你抛硬币,先说「正面朝上策略」。抛十次不理想,改口「正面后接反面」。再不行,改成更复杂的路径。最终总能找到一段与历史吻合的口令。交易规则也一样:MACD 不行换 RSI,RSI 不行加量能,量能不行再滤行业……每一步都「有道理」,合在一起是在对历史作文。
更隐蔽的窥探:看过全样本曲线后,才决定「从 2019 年开始算」或「去掉 2018 年」。日期也是参数。
可执行的防窥探做法
1. 预注册规则骨架。 先写:用什么信号、什么过滤、什么出场、什么股票池、什么样本内区间。允许的参数范围也写死。写完再跑,而不是跑完再写。
2. 严格样本外。 参数只在样本内选;最终只报告样本外一次(或滚动走前进析)。样本外崩了,接受,不回头用样本外继续调——那叫把样本外变成新的样本内。
3. 限制尝试次数。 给自己预算:例如只比较 5 组有经济含义的参数,而不是网格扫 500 组。真要扫,就要在结论里打折,或用更苛刻的显著性/衰减标准。
4. 简化优先。 能用两段逻辑说清的,不要五层条件。条件越多,窥探空间越大。
5. 保留试验日志。 失败的参数也记下。哪天你觉得「只有这一组神奇」,日志会提醒你:神奇建立在多少尸体上。
自己怎么验有没有窥探过度
一个土办法:把最终参数在样本外跑完后,再做扰动测试——周期 ±1、阈值微调,表现是否断崖?断崖说明结果卡在针尖上。再做一个安慰剂:随机打乱信号日期或使用随机入场,看你的「优化流程」是否仍能挖出漂亮曲线;若流程总能挖出奇迹,流程本身有窥探癖。
也可用「冷冻参数」:选定后锁三个月,只用实盘或纸上交易观察,禁止继续打磨。熬不住要改规则,就当新策略重新走样本外,而不是热修补。
数据窥探不会因为你用了机器学习就消失,反而可能更重——特征与模型选择都是超级调参。原则不变:出样表现、尝试次数、复杂度,三者要一起管。
一个更硬的习惯:任何「重大改规则」都要新开版本号,并冻结旧版本的样本外成绩,禁止用新信息回头改旧结论。团队研究里这一点更重要——不然每个人都在同一份历史上「再优化一点点」,最后谁也说不清显著性从哪来。你也可以给自己设「每周最多一次结构改动」:逼你先观察,而不是把回测当电子游戏刷分。
把每次试验的策略版本与结果留在本地,比只保存「最终神参」诚实得多。青柠量化 适合做版本化回测与本地存档,让你看见自己试过多少条路,而不是只看见终点那条彩虹。
下载与说明见产品页:
https://www.zpyztech.com/product/qingquant/
免责声明: 本文仅作量化研究方法科普,不构成任何投资建议。历史回测不代表未来表现,请独立判断并自行承担投资风险。
读到这里,不如自己验证一次
文章里的逻辑,你可以在青柠量化里用真实数据重新跑一遍。免费,零代码。