外汇回测如何工作:定义、输入、输出与限制
定义及回测试图实现的目标
回测(在外汇中)是指将一个预定义的、基于规则的策略应用于过去的市场数据,以观察其历史表现。换句话说,你将一个交易思路转化为明确的条件,然后模拟这些条件在历史时点上执行时会发生什么。
关键的一点是,回测本身默认并非预测工具。它产生的是对一组特定假设的评估:你所使用的数据、处理交易成本和执行的方式,以及你对决策时机建模的方法。
简化模型:输入、过程、输出
理解回测的一种有效方式是将其视为一个具有明确输入和输出的循环。
你必须指定的输入
- 规则集(决策定义):开仓、调整和关闭交易的精确逻辑。强调“基于规则”是因为你需要无歧义的条件(例如,基于从历史数据计算出的指标值,或基于价格水平)。
- 历史数据:用于模拟的价格序列。你还应明确时间戳代表什么,以及测试期间的数据集是否完整。
- 交易成本假设:典型组成部分包括点差和佣金,以及任何滑点模型(模拟成交价与假设执行价之间的差异)。如果忽略或简化这些因素,评估结果可能优于实际执行所能达到的效果。
- 执行与时机模型:交易如何成交(市价单 vs. 限价单逻辑),订单相对于价格K线/报价的提交时间,以及是否假设即时成交。
- 头寸与风险管理(如使用):如果你的流程包含头寸规模或风险暴露限制,则必须说明用于确定头寸规模和管理出场的算法。
- 测试设计:测试的时间窗口,以及如何将数据划分为训练期与评估期(如果你计划比较不同配置)。
过程
回测通常遵循以下顺序:
- 从决策时刻之前可用的数据中计算所需值。
- 应用规则集决定是否应开仓/平仓。
- 使用你的执行模型将模拟决策转换为成交价。
- 使用已实现的盈亏和成本更新账户状态。
- 在历史时间线的每一步重复此过程。
你通常检查的输出
根据目标不同,输出可能包括:
- 逐笔交易结果(每笔交易的盈亏、持仓时间分布)。
- 权益曲线或账户余额随时间的变化。
- 风险相关指标(回撤幅度、收益波动性)。
- 汇总统计(平均值、盈亏次数)以及在不同周期间的一致性。
你可以将这些输出视为描述模拟内部发生的情况,而非未来必然发生的结果。
通过示例验证:一次“正确测试”需要什么
考虑一个简化的回测配置示例。假设你有:
- 一个仅基于K线收盘时或之前信息来决定“入场”和“出场”的规则集。
- 包含点差和滑点估计的成本模型。
- 一个在决策K线相对价格上成交的执行规则。
为了使测试有意义,你还需明确以下假设:
- 如果决策在K线收盘时做出,则必须假设成交发生在下一个可交易价格时刻(或与你的数据粒度一致的合理近似值)。
- 如果使用滑点,你需要说明其应用方法(固定金额、基于分布,或与特定条件绑定的规则)。
一个常见的“陷阱”是使用了在决策时刻无法获知的信息。这通常被称为未来数据偏差(look-ahead bias)。例如,如果你的规则集无意中使用未来K线来计算当前K线的条件,你的回测可能会夸大表现。
局限性、风险与失败模式
由于真实市场存在不确定性,而模拟存在简化,回测结果可能产生误导。
重大局限性
- 历史关系可能变化:在一个时期出现的模式可能不会重复,尤其是在市场结构或参与者行为发生变化时。
- 执行现实性:许多回测假设理想成交。在外汇中,交易成本和成交时机可能显著影响结果。
- 数据质量与完整性:缺失数据或时间戳不匹配可能扭曲信号和交易时机。
- 过度拟合(overfitting):如果你将规则调整得过于紧密以至于匹配了过去的噪声,你可能会得到吸引人的结果,但这些结果无法泛化。
常见失败模式
- 不现实的成本假设(忽略点差和滑点)。
- 时机不一致(在同一根K线内以现实中不可能的方式进出)。
- 看到结果后更改规则(根据测试结果调整规则,而没有使用独立的评估期)。
- 测试的市场状态太少(仅在一种波动性或趋势环境下有效的规则集)。
验证:如何独立检查定义
要验证你是否正确理解了外汇回测,重点在于你是否能解释每个必要假设及其在模拟中的作用位置:
- 陈述规则集:你能否描述确切的决策逻辑而不留下模糊步骤?
- 陈述数据时间线:你是否知道用于计算决策的数据部分?
- 陈述执行与成本:你能否解释模拟交易如何转化为成交价,以及成本如何扣除?
- 陈述测试结构:你是否描述了如何评估而不重复使用同一数据进行调优?
- 陈述至少一个局限性:你能否说出一个与你的假设相关的失败模式(例如,未来数据偏差、过度拟合或成本现实性)?
如果你能完成这五项检查,你就具备了可独立验证的回测机制理解。你也能避免将结果视为预测性证明。
下一步探索的问题
如果你想加深理解,最有效的下一步是通过一次改变一个假设——尤其是执行和成本建模——来比较不同的回测设置,然后观察结果如何变化。这有助于你识别模拟中哪些部分驱动了评估结果。