如何负责任地回测变动率指标?
直接回答
负责任地回测变动率(Rate Of Change, ROC)意味着将其视为一次实验:你需要明确指定所用数据和ROC公式,模拟不可避免的成本,控制偏差,并在模型未调参的数据上验证表现。目标不是“证明”未来结果,而是检验基于ROC的策略在合理且明确的假设下是否仍保持一致。
机制:明确定义你要回测的内容
变动率是一种动量型指标,用于衡量某个值在选定回溯周期内的变化程度。在大多数教科书形式中,ROC是通过价格(或其他序列)和固定窗口长度计算得出的。要负责任地回测,你必须在开始前明确定义以下所有内容:
- 输入序列:你使用的数值(例如收盘价到收盘价的变化),以及是否使用原始价格或收益率。
- 回溯周期(n):用于计算变化的K线数量。
- ROC公式:例如百分比变化与绝对变化。需始终使用一种定义。
- 采样与时机:决定ROC值是否在K线收盘时计算,以及交易何时被假定为入场(例如下一根K线开盘时)。
一个负责任的回测还应区分两个层面:(1)指标计算,这在给定公式和数据的情况下是确定性的;(2)交易规则和执行模型,必须反映真实的交易摩擦。
证据或示例:像控制实验一样构建回测
常见的失败模式是,指标仅在样本内“看起来有用”,因为回测者无意中让策略受益于现实中无法实时获得的信息。为降低此风险,请包含以下控制措施:
-
执行真实性(成本建模)
即使没有实盘数据,你也可以模拟摩擦。至少应为每次进出仓包含一个通用的类似点差成本,以及反映不完美成交的滑点预留。明确说明你是对每笔交易动作都施加成本,还是仅在头寸变化时施加。 -
决策时机
确保用于决策的ROC值仅基于过去的K线计算,以防止前瞻性偏差。 -
参数选择纪律
如果你通过在完整数据集上优化结果来选择ROC的回溯长度、阈值或其他规则参数,就可能过度拟合。更负责任的方法是在训练窗口中选择参数,然后在独立的验证窗口中评估其表现。 -
前向滚动或样本外测试
与其仅做一次训练/测试分割,不如使用滚动窗口(前向滚动)来观察当市场状态变化时,表现是否下降。 -
稳定性检查
用微小变化重复测试:略微更改回溯周期、移动验证窗口,或测试输入序列的其他合理但不同的定义(前提是预先定义好探索范围)。如果结果在微小变化下崩溃,原始信号可能很脆弱。
局限性与风险:可能出现的问题
以下几个实质性局限可能导致ROC回测产生误导:
- 历史不可重复性:过去的关系不能保证未来行为。ROC可能在数学上保持一致,但市场动态可能已改变。
- 对成本敏感:动量策略通常交易更频繁。如果低估成本,表现可能看起来比实际更强。
- 过度拟合与多重比较:测试多个阈值和参数值会增加发现拟合噪声模式的可能性。
- 依赖市场状态:ROC在趋势市和盘整市中可能表现不同,混合状态可能掩盖弱点。
- 数据质量与幸存者偏差:如果你的历史数据集不完整或不一致,结果可能反映的是数据伪影。
验证或下一个问题
要独立验证关键事实,你可以对回测设计进行清单式审查:
- 你能否精确写出ROC的计算方式,包括回溯长度和选定的输入序列?
- 每个交易决策是否仅使用决策时刻已知的信息?
- 你是否建模了成本,并与你的交易规则一致地应用?
- 你是否保留了未用于参数选择的样本外段(或使用前向滚动验证)?
- 如果你用小的、预定义的变化重复测试,结果是否大致相似?
一个有用的问题不是“ROC是否预测准确”,而是“在应用成本和偏差控制后,ROC策略在哪些假设和市场状态下表现稳定?”