外汇策略回测是把预先写清的交易规则应用于历史数据,检验在指定成本和成交假设下会出现什么结果。应依次固定规则、检查数据、加入费用与执行限制、区分样本内外,再查看收益与回撤。历史盈利只能描述该组条件下的结果,不能保证未来盈利。
第一步:把策略写成可以重复执行的规则
至少写清货币对、周期、信号使用已收盘还是未收盘K线、入场时点、止损止盈、移动止损、持仓上限和手数算法。“趋势明显时买入”无法稳定重现,应该改成可观察的条件,并记录策略版本。
信号在一根K线收盘后才能确定,就不能假设在该根K线收盘前按已知结果成交。用当时尚未公布的数据决定过去交易,属于未来信息泄漏。
第二步:检查历史数据是否适合策略
| 检查项 | 影响 |
|---|---|
| 数据缺口与重复时间 | 信号、持仓时长和费用可能失真 |
| 时区与夏令时 | 交易时段与日线边界可能改变 |
| Bid、Ask或中间价 | 入场、退出与止损触发口径不同 |
| 逐笔或K线数据 | 是否能够判断周期内价格路径 |
| 合约与账户币种 | 点值、盈亏和保证金换算不同 |
日内策略尤其需要理解价格路径。只有开高低收数据时,不能确信最高价和最低价谁先发生;逐笔数据也仍受覆盖范围与质量影响。
同根K线同时触及止盈止损怎么办
假设买入后某根K线最高价超过止盈、最低价低于止损,仅凭这根K线无法判断先后。不能默认每次都是止盈先成交。可改用更细数据还原路径,或采用明确的保守处理并另外报告歧义交易数量。
若策略在一个周期内多次调整止损,粗粒度数据更容易造成理想化成交。更换建模精度后应重新检查关键订单,而不是只比较总收益。
第三步:加入点差、佣金和持仓费用
买入开仓与卖出平仓使用不同报价侧;若数据只有单侧价格,需要明确怎样补充另一侧。费用应包含适用的往返佣金和隔夜成本,并避免对已使用双侧成交价的盈亏再重复扣点差。
滑点与执行延迟可以做情景压力测试,但不能宣称一个固定滑点值覆盖所有行情。成本核对可结合外汇点差与交易成本。
第四步:把样本内与样本外分开
样本内用于形成和选择规则,样本外用于检验冻结后的版本。时间序列通常按先后切分,防止未来信息进入过去。若看完样本外结果后继续调参,这段数据就已参与选择,不能继续称为完全独立验证。
可以保留新的未使用时间段,或采用滚动训练与验证;每一步都要留下使用过哪些数据的记录。多次尝试后只保留最好的一条曲线,会夸大策略可靠程度。
怎样检查过度拟合
- 邻近参数略变就从高收益转为大亏损,提示结果可能依赖单个巧合。
- 盈利只来自很少几笔交易,需要单独展示这些交易的贡献。
- 换到其他时间段或增加合理成本后完全失效,应重新评估可执行性。
- 过滤条件越来越多、每组样本越来越少时,应警惕用复杂规则解释偶然结果。
这些检查是诊断线索,不是自动判定标准。策略确有适用环境时,也要预先定义环境条件,不能在结果出来后任意排除亏损期间。
回测报告至少看哪些指标
除了净收益,还应记录交易数量、平均净R、胜率、平均盈利与亏损、最大回撤、回撤持续时间、费用占比和极端损失。相同收益下,资金占用与水下时间不同,体验和可执行性也不同。
常见问题
回测越久越好吗?
更长历史可能增加环境覆盖,但数据质量、合约规则和市场结构也可能变化。应说明样本范围和可比性。
胜率高就算通过吗?
还要看盈亏幅度、成本和尾部风险。高胜率可以与负期望同时出现。
回测后下一步是什么?
冻结版本,进行新的样本外与模拟前向观察,核对信号和订单是否按规则出现。任何测试阶段都不能消除真实执行风险。
结论
回测的价值在于暴露规则缺陷与条件依赖。把数据、执行假设、版本和独立样本写清,比追求一条漂亮曲线更有助于判断策略能否被重复检验。
风险提示:本文仅用于信息参考与投资者教育,不构成投资建议。历史回测可能高估可实现结果,外汇及杠杆交易可能造成重大损失。