如何负责任地回测威廉指标 %R?
在回测前定义威廉 %R
威廉 %R(常写作“威廉 R”)是一种动量类指标,用于将当前收盘价与选定回溯周期内的最高价和最低价进行比较。其核心思想是将价格在近期交易区间中的位置进行归一化,从而使数值在不同价格水平下具有可比性。
在开始回测前,必须明确记录你将使用的具体计算方式,因为细微差异可能导致结果显著不同:
- 回溯周期长度(用于确定最高价和最低价的K线数量)。
- “当前”点所用价格(通常为K线的收盘价)。
- 最高价/最低价的定义(根据你的方法决定是否包含当前K线)。
需明确说明的假设:你在回测数据和后续验证中使用相同的K线频率以及相同的“高”和“低”定义。
构建符合实际交易场景的回测数据集
负责任的回测始于可辩护的数据假设。
请考虑以下与数据相关的问题:
- K线构建方式:确定使用固定时间周期K线(例如1小时K线)还是其他类型。若改变K线类型,指标值将随之变化。
- 公司行为和品种影响:若数据集包含历史连续性不佳的品种,结果可能失真。即使在外汇类序列中(存在合约展期),你也应以可描述的方式处理价格不连续问题。
- 交易品种范围的一致性:若测试多个品种,需保持品种范围在时间上的一致性,或明确说明如何处理新上市品种。
不确定性提示:历史关系不能保证未来结果。即使计算“正确”,策略仍可能因市场行为变化而失效。
将成本和执行时机纳入指标测试建模
回测结果常因忽略摩擦因素而显得过于理想。对于威廉 %R,不能假设交易无成本。
需建模的成本与执行选择(需明确假设):
- 点差/交易成本:使用一致方法从每笔完成交易中扣除成本。
- 滑点:决定如何估算实际成交价与理想成交价之间的偏差。
- 下单时机:明确是否假设可在生成指标值的K线收盘时成交,或在下一K线成交。这是无意“前视偏差”的主要来源。
示例明确假设:“信号基于K线收盘价计算,并在下一K线开盘时交易。” 若不明确此点,可能无意中使用了当时无法获得的信息。
通过参数纪律和样本外检验控制偏差
当不断调整参数以拟合某一历史阶段时,威廉 %R 回测可能变得脆弱。负责任的做法应聚焦于降低“过拟合”风险。
关键控制措施:
- 划分训练与测试周期:使用一个时间段(训练集)确定参数组合,再在另一时间段(测试集)进行评估。
- 前向滚动验证(Walk-forward validation):在滚动窗口上重复训练,并在后续窗口测试。这有助于模拟实际中随时间更新规则的过程。
- 限制调参数量:若测试多种回溯周期、阈值和附加过滤器,某些配置可能因偶然性表现良好,从而增加过拟合风险。
严重失效模式:策略可能在样本内表现优异,但在样本外表现糟糕,因为它学习的是噪声而非可重复的市场规律。
明确定义“信号”——但不声称其具备独立预测能力
指标值本身并非交易规则。在负责任的回测中,必须定义将指标行为转化为决策的规则,包括:
- 进出仓逻辑(例如,当威廉 %R 满足特定条件时触发仓位变动)。
- 仓位管理假设(固定头寸、固定风险或其他规则)。
- 持仓与再入场规则(退出后如何操作)。
需承认的局限性:在某一数据集上看似有效的指标阈值,可能无法迁移到其他数据集。应将任何检测到的关系视为待验证的假设。
使用独立于回测引擎的验证方法
最后,验证有助于确认结果并非特定实现方式的产物。
可进行的独立检查包括:
- 独立重新计算指标值:在小样本上验证威廉 %R 的计算,以发现公式或索引错误。
- 合理性检查分布特征:确认 %R 值相对于近期高低点的行为符合预期(例如,极端值是否出现在价格接近区间边界时)。