如何负责任地回测布林带策略?
在测试前先定义概念
基于布林带的策略是一套规则,利用移动平均线与波动带(通常由标准差推导而来)之间的距离,判断当前条件相对于近期历史是否显得异常高或低。负责任的回测始于明确定义具体的计算机制,以便他人可以重复相同的计算。
用通俗语言说明你正在计算什么以及何时计算:
- 移动平均类型(例如,简单移动平均或指数移动平均)和窗口长度。
- 带宽乘数(应用于波动率度量的因子)。
- 决策规则(例如,什么触发“信号”,以及什么算作入场和出场)。
- 时间对齐(使用哪个K线的布林带值进行决策,以及假设交易在何时执行)。
即使策略使用了布林带,其结果也高度依赖于这些假设。历史关系并不能证明未来数据会以相同方式表现。
区分稳定机制与可变条件
当测试设置随着数据集悄悄变化时,回测将变得不可靠。为降低该风险,应将稳定机制与可变条件分开:
稳定机制(策略定义): 指标计算方法、决策逻辑以及你假设的事件时序。
可变条件(可在不同运行中变化的因素): 市场状态、时间框架、数据质量以及执行假设。
明确说明你的数据假设。例如,定义你是使用中间价还是买卖报价,是否进行重采样,以及是否允许价格缺口或公司数据调整(如适用)。如果你不明确这些,所谓的“相同”策略可能产生不同的结果。
在计算中建模成本和执行
在基于指标的策略回测中,一个常见的失败模式是忽略交易摩擦。负责任的测试至少应包含简化的成本模型和保守的执行假设。
应在绩效计算中定义并包含的常见成本类别:
- 点差或有效买卖价差: 你概念上观察到的价格与你假设可交易价格之间的差异。
- 佣金或费用: 每笔交易或按交易量计的成本。
- 滑点: 规则触发时刻与假设执行时刻之间发生的不利价格变动。
- 融资或持仓成本: 如果你的策略在会产生成本累积的时间段内持有头寸。
你不需要完全真实的模拟才算负责任,但应将成本视为测量的一部分,而非事后补充。同时,定义成本如何应用:例如,仅在入场时、入场和出场时,或随持仓时间持续计算。
控制偏差:假设、调参和幸存者偏差
即使你的策略规则是固定的,偏差仍可能出现。关键控制措施包括:
假设控制: 记录用于计算信号和收益的每一个假设(时间对齐、舍入、缺失数据处理,以及是否对极端值设限)。
调参控制(防止过度拟合): 如果你根据后续“评估”的同一时期来调整参数,结果可能具有误导性。负责任的方法是在参数选择与最终评估之间进行分离。
数据范围控制: 避免挑选有利的样本周期。如果你只测试看起来有利的年份,实际上你已将回测变成了选择过程,而非验证。
使用样本外检查和稳健性测试
样本外测试意味着你在未用于选择参数或优化假设的数据上评估表现。
一种实用且独立的验证方法是:
- 使用一段历史数据选择策略定义和参数。
- 在另一段不同数据上评估相同的定义。
- 在多个不重叠的时期(滚动或前向测试方法)重复该过程,以查看结果是否依赖于单一有利窗口。
稳健性测试同样重要。使用合理的参数变化(例如,不同的窗口长度或多倍数)重新运行,并确认主要结论在微小变化下不会崩溃。
证据与示例:应报告的内容
负责任的报告应聚焦于可度量、可验证的项目,而非无法验证的结果。至少应报告:
- 使用的确切参数值和指标设置。
- 样本周期和时间框架。
- 成本和执行假设。
- 评估指标及其计算方式。
- 结果是否基于样本外数据。
仅在狭窄假设下表现良好的策略是一个危险信号。还应检查绩效是否由少数极端事件驱动;如果是,微小的假设变化就可能逆转结论。