如何负责任地回测布林带?
什么是布林带,你究竟在测试什么?
布林带是一种基于两个组成部分构建的波动率指标:一条中线和上下两条带。中线通常是基于选定回看周期的价格移动平均线。上下带则从中线出发,根据相同回看窗口内价格的标准差设定距离。
一个负责任的回测并不是在测试“市场”,而是在测试一套具体且完整定义的规则在历史数据上的表现。这意味着你必须明确指定:(a) 所使用的价格序列(例如收盘价 vs. 典型价格),(b) 回看长度和任何标准差倍数,以及 (c) 将布林带行为转化为操作的决策规则——如果你确实在评估某种操作行为。如果没有明确的规则和输入,“回测”就会变成一种主观解释,而非可复现的实验。
机制:在运行任何数据前明确你的假设
首先写下你的计算和评估流程的机制。
- 指标计算输入
- 窗口长度:用于移动平均和标准差计算的周期数。
- 标准差定义:你使用的是总体还是样本形式的标准差,这是一个选择;需明确说明。
- 标准差倍数:设定带宽的因子。
- 价格数据:从哪个字段和时间框架计算布林带。
-
回测时间规则 指标值依赖于历史K线。一种常见的失败模式是无意中使用了你打算交易的同一根K线中的信息。你需要一个清晰的规则,说明布林带值何时“已知”,以及何时评估操作。明确操作是在下一根K线的开盘、收盘或其他时间戳上评估。
-
事件处理与数据清洗 定义你如何处理缺失K线、类似公司行为的不连续性(如果适用于你的数据)以及任何插值。如果你的数据集存在缺口,布林带的计算和任何规则触发都可能发生变化。
成本与数据真实性:区分模型拟合与可交易性
即使不提供任何交易建议,一个负责任的回测也必须考虑成本和约束,因为它们可能主导结果。
- 成本作为成本模型:至少应包含对交易成本(如点差和佣金)的简单估算。如果你忽略成本,结果通常会向上偏差。
- 执行真实性:明确你是否假设中间价、买/卖价,或保守的成交模型。如果你的规则依赖于布林带触及,成交假设就至关重要。
- 滑点:在真实市场中,执行价格可能偏离理想价格。决定是否包含固定滑点假设或保守上限。
同时,将指标行为与绩效评估分开。布林带可以描述波动率,但你的回测是在评估你的完整流程:计算、规则触发、执行和成本核算。
偏差控制:如何避免过拟合和前瞻错误
回测常常失败,是因为它们对过去“过于聪明”。你可以通过偏差控制来降低这种风险。
-
在测试前固定参数 如果你尝试多种回看长度和标准差倍数,直到结果看起来不错,那你就是在选择恰好符合历史的数据。负责任的方法是提前定义参数候选,或减少自由度。
-
样本外验证 至少使用两个阶段:一个用于设定选择(即使只是为了规则清晰),另一个用于评估绩效。滚动或前向滚动方案有帮助,因为它测试了对不同市场状态的敏感性。
-
在多个不重叠时期重复测试 波动率指标在平静和波动时期可能表现不同。在多个时间段上评估相同规则,以降低你只是拟合某一特定环境的可能性。
证据或示例:在不假设未来成功的情况下测量什么
回测应产生反映你评估完整定义的指标。
- 定义你的结果:一个“结果”意味着什么(例如,由规则定义的操作的收益,或如果你在预测统计量,则是类似预测误差的指标)。
- 使用一致的测量方法:窗口大小、入场/出场时机和成本包含必须与你声明的假设一致。
- 检查稳定性:比较不同子周期的结果,而不是依赖单一的总体数字。
如果你仅计算价格“触及”布林带的频率,那你是在衡量指标交互,而不一定是可操作的优势。