一、未来函数:用了当时拿不到的数据

未来函数指在某个时点使用了之后才会公布或形成的数据。最常见的是用当日收盘价判断当日开盘时的动作,或在全样本上计算归一化参数,再回测早期区间。

这类问题不会报错,结果反而更好看。检查方法是把数据截断到某一日期重跑:若历史结果随截断位置变化,就应怀疑存在未来信息。

二、幸存者偏差与样本选择

只统计今天仍在交易的标的,会自然剔除退市、停牌与重组样本,使结果偏向存活者。标的池的构造方式必须在回测前固定,并记录纳入与剔除规则。

另一种偏差来自样本区间。挑一段“好看”的区间展示,等于用结果反推起点。应固定区间,或至少同时报告多段区间的结果。

三、过拟合:参数越多,越容易记住噪声

参数越多,模型对历史噪声的拟合能力越强,对未来的泛化能力未必提升。把参数搜索空间开得很大,再挑最好的一组,本质上是在做选择偏差。

更稳妥的做法是保留样本外区间、限制参数数量、记录每次搜索的全部结果,而不是只留最优解。最优解往往是最贴合历史的那一组。

四、成本与成交假设

忽略手续费、滑点、冲击成本与涨跌停限制,会系统性高估结果。成交假设应写明:按什么价格成交、成交量是否受限制、下单到成交的延迟如何模拟。

如果策略换手很高,成本假设的影响往往比参数更大。先做成本敏感性分析,再讨论指标高低,顺序不能颠倒。

五、评估流程的最小防线

下面几项不复杂,但能挡住大多数低级问题。把它们固定成流程,比事后解释更有效。

  • 固定数据快照与复权口径
  • 样本内与样本外分离,并记录切分点
  • 保存参数搜索的全部结果,而不只是最优组
  • 至少准备一套保守的成本假设
  • 由另一人按文档独立复现一次

六、把结论写成条件句

比起“这个策略有效”,更有信息量的表述是“在这段样本、这套成本假设下,结果呈现这些特征”。条件写清楚了,读者才知道结论的适用范围。

回测报告也应包含失败版本与放弃原因。只留下成功记录,会让后来者重复踩同样的坑。

七、把回测当作排除工具

回测最实际的作用,是在低成本阶段排除明显不可行的想法。它无法证明未来有效,但能暴露数据缺口、逻辑矛盾与成本过高的问题。

因此报告的重点应是“哪些假设没有通过”,而不是“结果有多好”。把失败原因写清楚,下一次研究就不必从零开始。