如何负责任地进行CMO回测?

了解负责任的CMO回测、数据成本、偏差检查和局限性。

如何负责任地进行CMO回测?

什么是“负责任”的CMO回测

对CMO(Chande动量振荡器)进行回测,意味着从历史价格数据中计算其数值,并评估某个决策规则在历史上实时应用时的表现。“负责任”强调的是:测试是否可复现,以及是否避免了常见的错误——这些错误会使历史结果看起来比实际情况更优。

负责任的方法主要关注四个方面:(1)明确定义指标和数据;(2)包含交易成本和实际执行时机;(3)控制偏差和参数过拟合;(4)通过样本外验证,评估结果的脆弱性。

机制:定义指标、数据和假设

在开始任何测试之前,你需要对CMO及其输入有一个清晰、可验证的定义。在实践中,这意味着要明确写出:

  • 使用的确切数据序列(例如收盘价到收盘价)以及用于计算收益率或动量的采样频率。
  • CMO计算中使用的回看周期(即参数)。
  • 对缺失数据、交易时段中断和公司行为(如适用)的处理方式。
  • 日期对齐规则:你在时间 t 测试的信号是否仅使用了截至 t 时刻可用的信息。

然后明确你正在评估的任何决策规则。即使你并不声称CMO具有“预测”能力,你也必须描述当CMO穿越某个水平、上升超过阈值或满足特定条件时你会采取什么操作。在每个示例中,都应明确说明你的假设,例如建仓时间(下一K线开盘价 vs. 当前K线收盘价)、是否允许K线内执行,以及如何处理周末或流动性不足的时段。

交易成本和执行时机:许多测试忽略的关键部分

在回测中,成本不是事后考虑项。即使一个概念上合理的指标,如果忽略了实际交易摩擦,也可能显得非常有效。在典型的市场模拟中,你应该考虑:

  • 点差和佣金(或等效的交易成本模型),以及这些成本是仅在入场时收取,还是在入场和出场时都收取。
  • 滑点:模型执行价格与预期价格之间的差异。
  • 执行时机:信号的时间戳不能“作弊”。如果你的信号是基于第 t 根K线计算的,那么一个现实的测试应使用第 t 根K线结束后才可获得的价格进行执行。

假设的清晰性至关重要:例如,如果你假设在下一K线开盘价执行,那么应始终一致地应用该规则,并确认你的指标计算没有使用未来价格。

偏差控制:防止前瞻偏差和过拟合

许多回测失败的原因是无意中使用了本不应拥有的信息。

关键的偏差检查包括:

  • 前瞻偏差(Look-ahead bias):确保在时间 t 做出决策所使用的指标值,仅基于 t 时刻之前的数据计算得出。
  • 选择偏差(Selection bias):不要通过在同一数据集上反复搜索最佳历史表现来调整指标参数(如CMO的回看窗口)。
  • 数据窥探(Data snooping):如果你尝试了多种变体(阈值、参数值、过滤器),你的结果可能反映的是搜索过程,而非稳健的市场特性。

一个实用的控制方法是将数据至少分为两部分:一部分用于选择参数,另一部分用于评估表现。如果你进一步多次调整,应将这种调整视为模型构建过程的一部分,并保持最终评估部分完全未被触及。

证据与样本外验证

为了降低将噪声误认为结构的风险,应进行样本外验证。

常见的模式包括:

  • 训练/验证/测试划分:在训练段选择参数,在验证段进行验证,最后仅在保留的测试段上进行一次评估。
  • 前向滚动(滚动)评估:在移动窗口上反复重新训练或重新选择参数,然后在下一个时期进行测试。

在报告结果时,应关注能揭示脆弱性的指标。使用多个度量标准(例如平均收益和类似回撤的风险代理指标),并检查表现是否严重依赖于少数异常时期。如果测试仅在市场条件与训练阶段相似时才有效,那么当市场机制发生变化时,它很可能失败。

预期的局限性和失败模式

即使采用严谨的方法,CMO回测仍可能得出误导性的结论。主要的局限性示例包括:

  • 非平稳性:市场是变化的;历史上成立的关系可能不会持续。
  • 机制转换(Regime shifts):波动性、趋势和流动性条件的变化会影响动量振荡器的行为。
外汇和差价合约交易具有重大风险。FoxiForex的信息仅用于教育,不构成个人财务建议。赞助内容会被清楚标注。