如何负责任地对MT4图表进行回测?
定义“MT4图表回测”的含义
在MT4图表上进行回测,意味着将基于规则的方法应用于历史市场数据,以估算其在过去时期可能的表现。关键在于,你并不是在“观察”过去的结果——而是在使用假设进行模拟。
一次负责任的回测应从区分稳定机制与可变条件开始:
- 稳定机制:你的方法如何从图表数据生成决策、如何开平仓,以及在模拟中订单如何成交。
- 可变条件:点差、滑点、执行延迟、流动性变化,以及任何可能影响成交的平台或提供商差异。
由于历史关系并不能保证未来结果,回测的目标是验证推理过程并衡量不确定性,而非预测未来。
明确必须声明的输入和假设
为了使回测有意义,必须定义计算中使用的每一项假设。常见输入包括:
- 价格序列:图表的时间周期以及确切的历史数据来源。
- 规则:入场/出场逻辑、头寸规模方法(即使为固定值),以及如何处理多个信号。
- 时间:决策是在K线收盘时做出,还是在K线内进行,以及如何避免使用当时无法获知的信息。
然后需明确模拟的执行模型。例如,如果你的方法在信号出现时入场,你需要假设:
- 入场价格:买入与卖出所使用的买价/卖价惯例。
- 出场价格:止损和止盈水平在K线内的评估方式。
- 交易成本:点差处理、佣金及其他包含的摩擦成本。
- 滑点模型:是否假设固定滑点、某种分布,或无滑点(并明确标注该限制)。
如果你无法列出这些假设,就无法可靠地在不同回测之间进行结果比较,也无法解释为何两次回测结果不一致。
使用一致方法控制偏差
一个主要的失败模式是:回测变成了一种过拟合的“故事”——它之所以匹配某一历史周期,是因为参数是针对该数据集调优的。负责任的回测通过使用以下控制手段来减少偏差:
- 单一规则,多次测试:保持核心决策规则不变,同时在多个时间段进行测试。
- 样本外评估:选择一个周期用于参数选择(训练),另一个周期用于评估(测试)。如果样本外表现急剧下降,则表明历史拟合并不稳健。
- 前向滚动检查:使用滚动训练窗口反复重新评估参数,然后在接下来的未见数据段上进行测试。
同时要防范前瞻偏差。一个常见例子是:使用同一K线中在入场时点尚未可用的数据来计算指标或触发决策。如果时间不明确,结果可能会过于乐观。
即使使用简单模型,也要真实包含成本
许多回测失败是因为忽略了交易摩擦。你不需要完全真实的模拟,但必须以可解释且可调整的方式包含成本。
需要考虑的主要成本类别包括:
- 点差:如果你的模拟使用中间价而非买价/卖价,结果可能会被高估。
- 佣金和费用:即使是很小的固定成本,也可能改变长期结果。
- 滑点:实际成交可能与理论价格不符,尤其是在市场快速变动时。
负责任的方法是进行敏感性检查:在合理范围内调整点差/滑点假设,重复相同方法,并观察结论是否变化。如果结果仅在不切实际的有利成本下才成立,这就是一个警示信号。
验证指标并理解至少一个局限性
回测通常报告平均值,掩盖了风险。应使用能反映分布和回撤的指标,而不仅仅是收益。例如,考虑:
- 回撤幅度和恢复时间
- 交易频率和平均持仓时间
- 少数大额亏损的影响
主要局限性和失败模式包括:
- 执行不匹配:历史成交可能无法代表实际成交,因滑点和订单路由差异。
- K线内模糊性:当仅有K线数据时,止损/止盈的触发可能不明确。
- 过拟合:参数调优可能产生仅在训练窗口“有效”的方法。
鉴于这些局限性,回测应被视为对假设稳健性的证据,而非对未来表现的确定性保证。
独立验证并决定下一步要问什么
要负责任地验证一次回测,你应该能够使用相同的数据、规则和执行假设复现它。一个实用的检查清单:
- 记录确切的历史数据来源和时间周期。