回测是把明确的规则放到历史数据上重演。它可以帮助发现问题,但一次漂亮的结果,并不能单独说明方法具有持续有效性。

01 / 让规则能被另一个人复现

在查看结果之前,先写清楚数据范围、指标定义、信号条件、执行时刻和评价方式。“价格走强时买入”很难复现;一条有明确输入、计算步骤和时间约束的规则,才便于检验。

为每次实验保留参数、数据版本和程序版本。修改了条件就算一次新实验,不要把不同版本的结果混在同一张表里。

02 / 沿着时间轴检查可用信息

  1. 观察:这个时刻,哪些数据确实已经公开或完成?
  2. 计算:指标是否只使用此前可获得的数据?
  3. 执行:信号出现后,假设在何时、以什么价格执行?
  4. 评价:成本、未成交和异常情况怎样进入结果?

尤其需要检查把未来的结果回填到过去、用全样本数据计算标准化参数,以及使用今天的成分列表代表过去样本等情况。这些处理都可能让历史实验获得当时不具备的信息。

03 / 给验证留出没有参与调整的数据

对于时间序列,学习时可以先按时间顺序划分训练、验证和测试区间。训练区间用于形成方法,验证区间用于比较少量合理选择,最终测试区间保留到方案确定之后再看。

反复根据同一测试区间修改参数,会使这段数据逐渐变成新的训练材料。应记录尝试了多少组条件,同时留意选择“最好结果”本身带来的偏差。

04 / 将成本假设写在结果旁边

手续费、滑点、成交约束、停牌和交易日历都会改变模拟结果。练习中可以先采用简化假设,但要明确写出简化了什么,并检查成本上升时结论是否明显变化。

学习记录模板

问题 → 数据范围 → 规则与参数 → 时间边界 → 成本假设 → 评价指标 → 失败情况 → 下一次要检验的问题。

更值得保存的是失败的原因

如果一个结果只在很窄的参数范围或某一小段时期出现,先把它当作需要解释的现象。记录不稳定的地方,往往比继续寻找更高的历史数值更有学习价值。