如何负责任地回测ATR?
在回测前先理解ATR是什么
平均真实波幅(ATR)是一种基于真实波幅的波动率统计指标,反映了价格在周期之间的变动幅度,包括跳空。ATR在选定的时间窗口内对真实波幅进行平滑处理。它更适合作为一种尺度(例如“典型波动幅度”)来使用,而不是作为独立的买卖信号。
负责任的回测始于明确你要测试的内容:ATR本身的计算(数据管道的正确性)、ATR在规则集中的使用方式(决策逻辑),以及交易摩擦如何影响实际结果。历史ATR值是从历史价格序列中计算得出的,它们不是预测。
机制:定义数据、假设和计算
首先明确输入和定义:
- 价格序列:选择你要使用的价格数据(通常为OHLC)。明确记录具体字段。
- 真实波幅定义:使用标准的真实波幅概念,通过“前一收盘价”参考来包含跳空。
- ATR窗口和平滑方法:说明你假设的窗口长度和平滑方法。不同的选择会影响ATR的数值。
- 时区和交易时段处理:如果你的数据集跨越不同时段的交易时间,需定义如何处理边界。
然后定义回测环境:
- 信号生成与评估时间:如果规则使用ATR,需决定在时间 t 的ATR是否可用于在时间 t 执行操作,或只能在 t+1 执行。这可防止意外的前视偏差。
- 头寸和仓位管理逻辑:即使你不明确命名策略,也需说明当规则发出操作请求时会发生什么(例如,是否假设在下一根K线开盘时入场)。
- 成本和执行模型:至少包含一个通用的摩擦模型(佣金/费用以及点差或滑点代理)。使用明确且一致应用的假设。
一个有用的验证步骤是在小样本窗口中从你的数据集中重新计算ATR。如果你计算出的ATR与你信任的独立实现不一致,请在解释结果前先修复数据管道。
证据与示例设计:偏差控制和样本外检查
你可以通过将样本内探索与样本外评估分开,使ATR回测更具可信度。
- 划分数据
- 创建一个按时间顺序排列的训练期,用于参数选择(例如ATR窗口长度或规则阈值)。
- 保留较晚的时期作为测试集。
-
前向滚动测试 不要使用一次静态划分,而是反复在历史数据上训练,并在下一个时间段测试。这降低了结论依赖于某个幸运时间段的风险。
-
控制选择偏差 如果你尝试了多种变体(不同窗口、阈值或时间框架),表现最好的结果可能是人为产物。记录试验次数,并优先选择预定义配置,而非“调参至有效”。
-
在不同市场环境下进行稳健性检查 在不同市场条件下(如高波动和低波动时期)运行相同的测试设置。当波动结构变化时,ATR相关行为也可能变化。
需计划的重要局限性/失效模式:如果你无意中使用了你试图交易的K线信息来计算ATR,就会产生前视偏差。另一个失效模式是现实的交易成本可能完全抵消看似良好的表现。
局限性与风险:ATR回测能告诉你什么,不能告诉你什么
- 波动尺度 ≠ 方向:ATR衡量的是价格变动幅度,而非价格将上涨还是下跌。
- 对成本敏感:回测通常低估了滑点、点差和执行延迟。在利润微薄的情况下,这些因素可能起决定性作用。
- 非平稳性:价格动态会变化。ATR的历史关系不能保证未来结果的相似性。
- 依赖假设:结果取决于你选择的计算窗口、平滑方法、时间戳对齐和执行假设。
验证或下一步问题:需要独立检查的内容
在得出任何结论前,为负责任地验证你的回测,请检查以下项目:
- ATR计算的正确性,在小样本中手动可检查。
- 时间对齐,确认未使用未来信息。
- 可复现性:你的数据集版本、参数和代码逻辑应被记录,以便他人可重新运行相同流程。
- 样本外纪律:避免仅报告多次试验中表现最好的单次结果。
如果你想深入,可以考虑如何定义使用ATR的规则逻辑(操作时间、阈值以及成本建模方式)。即便如此,也应将结果视为依赖于你的假设,而非可靠的预测。