如何负责任地回测随机振荡器
在回测之前先了解随机振荡器是什么
随机振荡器是一种将当前价格与近期价格范围进行比较的指标。在其常见形式中,它使用一个基于回溯周期(即范围窗口)构建的 %K 线,通常还包括一个平滑步骤,以及一条 %D 线,通常是 %K 的移动平均线。
由于回测依赖于定义,您应首先写下将要实现的确切公式(例如:如何选择最高价/最低价、回溯周期长度是多少、使用何种平滑方法及长度)。即使是微小的差异——比如使用同一根K线的高低点还是将其前移——都可能改变结果。
数据、机制和必须声明的假设
负责任的回测始于一个清晰、明确定义的数据流程。
1) 定义数据字段及其对齐方式
- 指定用于OHLC(开盘价、最高价、最低价、收盘价)的时间区和K线周期。
- 决定如何处理缺失的K线、异常波动或数据不完整的交易日。
- 确保指标仅使用在决策时刻实际可获得的信息(K线收盘价与开盘价的区别很重要)。
2) 将指标参数定义为输入项 说明您将测试的参数集,例如:
- %K 回溯周期长度
- %K 平滑周期长度(如适用)
- %D 移动平均类型和周期长度
3) 精确指定计算规则 写下实现细节:
- 是否在回溯窗口内使用滚动的最高高点和最低低点来计算 %K。
- 是否在每个K线更新振荡器,还是仅在K线收盘后更新。
4) 区分“指标行为”与“交易规则” 一个指标可以作为时间序列进行回测(观察其走势),而不必声称它是独立信号。要估算表现,您需要一个明确且可测试的决策规则(例如,将振荡器数值映射到假设操作的条件)。即便如此,结果仍取决于您如何执行这些操作。
成本-特征控制:建模成本和可变因素
回测常常因忽略或低估影响收益的真实摩擦而失败。
基础执行模型中应包含的成本 您不需要猜测确切数值,但必须建模您将测试的成本类型,并一致地应用:
- 买卖价差假设(或等效的交易成本模型)
- 佣金(如适用)
- 滑点(实际成交价比理论价格差多少)
需控制的可变因素 包括随机振荡器在内的动量指标在不同市场环境下可能表现不同。为减少误导性结论:
- 测试多个时间段(不只是单一历史窗口)。
- 如果研究涵盖多个品种,则使用多个工具,或至少涵盖多个明显不同的市场状态。
- 在评估期间保持指标参数固定;仅在独立的调优阶段更改参数。
一种简单且避免偏差的调优方法
- 将数据划分为调优(样本内)期和后续评估(样本外)期。
- 仅在调优段上调整参数。
- 锁定参数并在样本外段上评估,不再进一步调整。
负责任工作流程的证据与示例
负责任的工作流程关注验证,而非侥幸成功。
示例工作流程(概念性,非推荐)
- 选择一个K线周期(例如,每个时间单位一根K线),并根据明确定义的参数实现随机振荡器。
- 构建一个基于振荡器数值触发操作的假设决策规则。明确写出触发逻辑。
- 添加一个至少包含一个敏感性范围的交易成本模型(例如,“低”、“中”、“高”摩擦情景),并重新运行评估。
- 使用前向滚动或滚动窗口方法:在较早窗口上调优,在下一个窗口上评估,并重复此过程。
- 使用稳健的诊断方法总结结果,而不仅仅是平均值。
应检查的关键诊断项
- 比较样本内与样本外的行为。
- 检查结果是否严重依赖于少数事件或几个特定日期。
- 查看在合理范围内轻微调整参数或阈值时是否存在不稳定性。
需包含的局限性和失败模式
即使技术上正确的回测也可能具有误导性。常见的失败模式包括:
1) 前瞻性错误和对齐错误 使用在决策时刻尚未可知的信息会夸大表现。
2) 对历史数据的过度拟合 过多的自由度(指标参数、规则阈值、成本假设)可能导致策略拟合噪声而非真实信号。