1. 看图之前先写下规则
回测检验的是写下来的规则,不是模糊的感觉。开始回放前,先记录:
- 市场和时段,例如 ES,只交易常规交易时段。
- 形态条件,什么情况出现后才考虑交易。
- 进场规则,明确触发条件和订单类型,例如在某价位挂限价单、在前高上方挂止损单,或收盘时用市价单进场。
- 止损和目标价,用跳动点、点数或图表结构说明各自位置。
- 仓位,固定合约手数,或每笔交易承担固定金额的风险。
- 持仓管理,例如移到保本、分批止盈、时间止损。
- 不交易条件,例如重要新闻、波动区间过小、每天最多交易几次。
如果测试时发现自己临场判断,就停下来把判断条件补成规则。中途改规则,等于把样本分成两半测试两套策略。
2. 选择数据和周期
日内期货策略至少需要 1 分钟数据。如果只看 5 分钟或 15 分钟 K 线,就无法判断止损和目标价哪个先被触及。还要检查价格基准。许多连续期货行情经过向后调整,历史价位会移动;如果规则涉及整数价位或精确的前期价位,这一点很重要。Charts Replay 上的 ES 和 NQ 从 2016 年起都保留真实成交价。
选择包含不同市场状态的区间,例如趋势年、震荡年和波动突然放大的时期,不要只挑对策略有利的那段行情。
3. 隐藏未来行情
手动回测最大的缺陷是前视偏差。静态图表上滚动时,视线会直接落在已经成功的形态上。使用逐根显示行情的回放工具,在下一根 K 线出现之前先做决定。不要提前看,也不要跳过“看起来很无聊”的交易日,平淡的日子同样属于样本。
4. 挂真实订单,不用事后假设的成交价
说“我本来会在最低点买入”不等于订单真的成交。按实盘时的方式挂单,让价格来触发订单。真实的回放撮合至少应该做到:
- 无论图表当前显示什么周期,每根 1 分钟 K 线都会先参与撮合,再绘制到图表上。挂在 4 小时图上的订单,也会按 1 分钟价格是否触及来成交。
- 限价单在价格到达时成交;止损单在价格穿过触发价时成交。
- 遇到跳空时按 K 线开盘价处理:买入限价单被跳空穿过时按更优的开盘价成交;止损单被跳空穿过时按更差的开盘价加滑点成交。
- 同一根 K 线上有多个订单触发时,先撮合止损单,再撮合限价单。
手续费也要算进去。每手每边手续费 $2.50 时,一手完整买卖一趟要花 $5,相当于 ES 0.1 点或 NQ 0.25 点。对剥头皮策略来说,手续费本身就可能把盈利交易变成亏损。
5. 记录每一笔交易
每笔交易记录日期和时间、方向、进场价、止损价、目标价、出场价、出场原因(止盈、止损或手动退出)、仓位大小、美元盈亏和 R 值、最大有利/不利变动(MFE/MAE),再加上形态截图或备注。跳过或撤销的交易也要记下来,它们能说明规则在哪些地方还不够明确。
6. 收集足够大的样本
十笔交易几乎说明不了什么,少数几笔幸运的盈利就足以影响小样本。常见经验法则是在不同市场状态下至少收集 100 笔交易,再考虑相信胜率;如果策略交易频率低,或胜率低但单笔盈利较大,还需要更多样本。
7. 解读结果
- 胜率,盈利交易数 ÷ 总交易数。单独看胜率没有意义。
- 盈亏比,平均盈利 ÷ 平均亏损。
- 期望值,胜率 × 平均盈利 − 亏损率 × 平均亏损。这是平均每笔交易的结果,扣除成本后应为正。
- 盈利因子,总盈利 ÷ 总亏损。大于 1 表示盈利;高出多少,反映策略对实盘滑点有多大承受空间。
- 最大回撤,权益从峰值到低点的最大跌幅。问问自己能否在实盘中承受这段回撤。
- 用 R 值看结果,按初始风险单位表示盈亏,才能公平地比较不同交易、交易日和市场。
8. 常见错误
- 前视:使用当时那根 K 线还没有显示的信息做决定。
- 只挑选部分交易日或时间区间。
- 忽略手续费和滑点。
- 测试中途修改规则。
- 在同一组数据上同时优化止损、目标价,再用这组数据报告结果。
用 Charts Replay 回测
- 新建会话,选择 ES 或 NQ、起始分钟、账户规模和手续费。
- 选择连续回放;如果策略只在特定时段交易,也可以设定每天固定时段。
- 以 1× 至 20× 回放或手动逐步前进,图表周期可在 1 分钟到日线之间切换。
- 像实盘一样在图表上挂限价单、止损单或市价单。每个新仓位都要带止损和目标价,因此下单前风险已经明确。
- 打开会话报告查看胜率、盈利因子、盈亏比、回撤、权益曲线、交易日历和 MAE/MFE,每项数据都能追溯到具体交易。