回测实践中的常见错误
什么是回测(以及它不是什么)
回测是将一个预定义的交易规则或决策框架应用于历史市场数据,以观察其可能的表现。关键词是预定义:只有在运行回测之前就确定了逻辑、输入和计算方法,回测才有意义。
回测并不保证未来的结果。历史关系可能会改变,而你的结果仅与你对执行和交易条件的假设一样真实可靠。如果你的目标是学习,应将回测视为一种测量练习:你在特定建模条件下测试一个具体假设。
常见错误及其重要性
-
未将假设与结果分开
一个常见的误解是将回测结果视为市场的真相。实际上,结果取决于你的假设:如何建模成交、如何处理点差和佣金,以及订单如何执行。如果你不明确这些假设,两个人可能运行“相同”的策略却得到不同的结果。 -
过度拟合与参数优化
当规则被过度调整以贴合历史数据时,就会发生过度拟合,导致捕捉到的是噪声而非可重复的行为。一个迹象是在同一数据集上不断优化结果,但在其他环境下表现下降。即使没有“作弊”,由回测引导的迭代优化也可能使过程变成曲线拟合。 -
挑选有利的时间段
另一个错误是仅在有利的历史时期进行测试。有时这是无意的(例如,使用恰好匹配特定市场状态的时期)。后果是回测可能看起来很有说服力,但它反映的是选择偏差,而非广泛适用的效果。 -
使用不现实的执行模型
许多回测对成交进行了简化:可能假设以理想价格完美成交、忽略延迟,或将滑点视为恒定值,而实际上并非如此。这会使结果看起来比实际约束下的表现更强。即使逻辑正确,绩效衡量也可能出现偏差。 -
忽略成本和实际限制
成本包括佣金、点差和其他持续的交易费用。限制包括下单的限制,以及规则是否能在回测假设的时间点实际生成头寸。如果这些被省略或粗略估算,回报可能会被高估。 -
将类似相关性的结果误认为决策质量
回测可能因数据集本身而产生吸引人的结果,而非规则本身。例如,在趋势行情中触发的规则可能在样本内表现良好,但在条件变化时失败。一种常见的失败模式是将“一段好行情”误认为“稳定的决策过程”。
你应预期的局限性与风险
最大的局限是:回测是对现实的建模,而非现实本身。执行、流动性与市场微观结构在不同时期和环境中可能不同。此外,历史数据可能不完整或不一致(例如,缺少某些日内行为),这可能扭曲测量结果。
第二个局限是绩效指标依赖于测试设计。改变数据频率、收益计算方式、操作顺序或交易对齐方式都可能改变结果。因此,即使你的回测代码正确,结论也可能不够稳健。
最后,结果可能因特定市场条件以及成本和执行的表示方式而异。因此,单一回测很少应被视为最终答案。
验证检查(中立且自包含)
使用中立检查来确认回测结果是否稳健,而非偶然。
- 明确说明假设:记录你如何建模点差、滑点、佣金和订单执行。
- 保持参数固定用于评估:仅在独立阶段进行调优,之后不再更改即进行评估。
- 在多个时间段测试:比较不同历史阶段的表现。
- 对成本和执行进行压力测试:在合理范围内变动滑点假设,观察结论是否改变。
- 使用样本外或保留数据验证:确认改进不仅出现在用于构建规则的数据中。
如果这些检查显示出高度不稳定性,这本身就是有价值的信息:它表明策略逻辑可能对建模选择或市场条件敏感。“失败”提供了关于稳健性的信息,而非死胡同。