交易系统 · 第 9 节

回测的坑:过拟合

建立你自己的交易系统 · 第 9 页。先拆一个真实流传的回测。

一句话速览 把参数调到历史最优,等于把噪音当成了规律。判断一个回测可不可信,看的不是收益率,是样本期长度、成本假设和成交假设。
这节课要你带走的 看懂参数优化怎么在样本内制造出漂亮曲线, 以及一份能用来拆解任何回测的检查清单。

先拆一个真实流传的回测

在量化社区里能搜到大量打板策略的回测。下面这个是其中比较典型的一个:

年化 82.43%
某概念热度驱动的打板策略,回测区间 2024 年 9 月至 2025 年 3 月, 最大回撤 −20.74%

这个数字本身没有造假。问题在于它无法说明这个策略未来能赚钱。逐条看:

样本期只有半年

按每天一次交易算,半年也就一百多笔。 上一节 讲过,这个样本量连「有没有优势」都分辨不出来, 更不用说算年化。而且把半年的收益年化本身就是一种放大。

样本期落在特定行情段

2024 年 9 月之后有一段明显的行情。一个在单边上涨里测出来的做多策略, 说明不了它在震荡市和下跌市里的表现。好的回测至少要跨越一次完整的牛熊。

幸存者偏差:你只看到了发出来的那个

同样的思路可以生成成百上千个参数组合,其中总有几个的历史表现很好。 发出来的是那几个,亏钱的那些没人发。这跟 FOMO 那一节 讲的盈利截图是同一个机制。

「概念热度」很可能含未来信息

这类因子如果用了当日收盘后才能确定的数据来决定当日买入, 就是未来函数。这是回测里最隐蔽也最致命的错误, 下一节 专门讲。

按涨停价成交,实盘可能根本排不上队

回测假设你能在涨停价买到。而 打板那一节 讲过, 涨停价上只有时间优先,你的委托大概率排在几万手后面。 回测里 100% 成交,实盘可能只有 20%,而且成交的那些往往是板要炸的时候。

不计滑点和冲击成本

即使算了手续费,滑点通常也没算。而这类策略的交易频率极高, 上一节 算过:频率是成本的乘数。

六条里任何一条都足以让这个数字失去参考价值。而它们同时存在。

回测里最不重要的数字,就是收益率。

过拟合是怎么发生的

假设你有一个策略,里面有个参数(比如均线周期)。你在历史数据上试遍所有取值,选表现最好的那个。

这个动作看起来很合理,实际上你选的是「在这段历史的噪音里恰好最合适」的那个值。

样本内(用来调参的历史) 样本外(调完参之后的数据)
样本内年化
样本外年化

合成数据,用于演示过拟合的形态。参数取值本身没有实际含义。

把滑块拖到样本内表现最好的那个位置,看看样本外是多少。这就是过拟合:样本内的峰值,在样本外往往平平无奇甚至更差。

而且有个反直觉的规律:样本内曲线越尖锐,越可能是过拟合。一个真正稳健的策略,参数在一定范围内变化时表现应该都还可以,而不是只在某一个点上特别好。

回测检查清单

下次看到任何回测(别人的或自己的),按顺序问这七个问题:

  1. 样本期多长,跨越了几种市场环境?少于两年、或者没跨过牛熊的,直接打折。
  2. 试了多少组参数?试得越多,最优那组是运气的可能性越大。
  3. 参数附近的表现如何?只在一个点上好的,是过拟合。
  4. 有没有样本外验证?用一段数据调参,用另一段没碰过的数据验证。这是最基本的要求。
  5. 成本怎么算的?佣金、印花税、滑点分别按多少算的。频率高的策略 尤其要看这条。
  6. 成交假设是什么?按什么价格成交、假设成交率多少、有没有考虑流动性。
  7. 有没有用到当时拿不到的信息?这是 未来函数,最隐蔽。

七个问题里,第 4 条(样本外验证)和第 7 条(未来函数)是硬门槛。这两条不过关的回测,收益率再高也不用看。

今天就做这一件事

去搜一个「年化 XX%」的策略回测(量化社区、公众号、研报都行), 用上面七个问题逐条问一遍。

记录它能回答几个。多数情况下你会发现, 连样本期和成本假设这两条基本信息都没写。

这个练习的价值在于:以后再看到类似的数字,你的第一反应会从「哇」变成「样本期多长」。

带走这一条:回测里最不重要的数字是收益率。 样本内的最优参数在样本外往往失效,而曲线越尖锐越可疑。 七个问题里,样本外验证和未来函数是硬门槛,不过关的回测不用看。