如何负责任地进行MACD回测?
先定义MACD,再定义“回测”的含义
MACD(移动平均收敛发散指标)是一种基于移动平均线构建的趋势跟踪振荡器。在回测中,你并不是在测试“MACD本身”对未来走势的保证;而是在测试一条将MACD数值转化为历史数据上可衡量结果的规则。
要负责任地进行回测,首先应写下你将使用的精确机制:
- 用于计算MACD的移动平均类型和参数(例如,两条移动平均线和信号线的周期长度)。
- 如何从同一价格序列计算MACD线和信号线。
- 你是使用K线收盘价还是K线内的近似值进行测试。
- 如何处理时间戳、缺失数据以及类似公司行为的调整(如果适用于你的数据源)。
“回测”的一个实用定义是:将你的决策规则应用于过去的数据,以生成一系列假设交易或假设收益,然后使用考虑成本和执行假设的指标来评估它们。
明确数据和假设(最可能影响结果的因素)
大多数可避免的错误源于不一致或不现实的数据处理。由于市场结果各不相同,请将以下因素视为明确的假设:
数据范围和采样
- 选择一个时间范围和固定的采样频率(例如,日线)。在不同运行中混合频率或重新聚合数据可能会扭曲结果。
- 决定是否使用相同的收盘价来计算指标和后续的交易决策。
前视和对齐
- 确保在决策时间点指标值是可用的。如果你使用同一根K线的信息来计算指标并“入场”,可能会无意中引入前视偏差。
- 使用一致的信号偏移规则:如果你的决策基于第 t 根K线结束时的指标值,那么你的模拟操作应在第 t 根K线之后发生。
数据完整性
- 检查是否存在数据缺口、重复的时间戳、价格源的突变以及任何缺失的K线。
- 如果你从调整或转换后的价格计算指标,请记录转换步骤。
这些选择并非表面问题;它们会改变你输入到规则中的MACD值,从而改变整个回测路径。
包含成本和执行假设(摩擦很重要)
即使MACD实现正确,在忽略摩擦的回测中也可能显得盈利。负责任的回测至少应包括三层成本和明确的执行行为假设:
成本类型
- 交易成本(佣金、费用)。
- 点差/价格影响近似值(你如何建模理论决策价格与实际执行价格之间的差异)。
- 滑点(执行价格偏离假设价格的程度)。
执行假设
- 决定交易是以决策价格成交、下一K线开盘价成交,还是其他约定方式。请记录下来。
- 决定是否忽略部分成交、订单簿影响或延迟。
由于你可能不知道实际执行的精确情况,建议使用敏感性测试来建模不确定性(在合理范围内变动滑点/点差假设,并用你的数据和市场微观结构知识加以证明)。目标不是“预测未来”,而是观察结论在更现实的假设下是否依然成立。
添加偏差控制以减少对历史数据的过度拟合
MACD参数选择和规则变体可能意外“拟合”噪声。偏差控制有助于你识别这一点。
样本外分离
- 将数据至少分为两部分:一部分用于参数选择或规则设计,另一部分用于评估。
- 如果你在评估期间调整参数,结果可能会产生误导。
前向滚动测试(Walk-forward testing)
- 不要对整个历史使用一组静态参数,而应使用滚动或逐步程序:在一个窗口上拟合,在下一个窗口上测试,然后向前移动。
- 这可以降低某组参数仅在一个历史时期有效的可能性。
避免反复窥探
- 如果你在看到表现后多次迭代规则修改,实际上是在评估集中搜索最佳答案。
- 通过在广泛评估前固定流程,并对每个版本仅使用一次评估集来控制这一点。
参数透明度
- 记录你尝试过的所有参数和阈值,以及选择最终参数的原因。
至少检查一种实质性限制和失败模式
负责任的回测应明确识别可能出错的情况。