研究流程 / 历史复盘 / 执行假设

回测成交价不能随便猜:从信号时点到可成交性的 7 项检查

回测里最容易被忽略的,往往不是指标,而是成交。

最近一则公开讨论里,有人问:策略在一根 5 分钟 K 线收盘后产生信号,能不能拿下一根 1 分钟 K 线的最高价,作为“最悲观的成交价”?

保守不等于可用。下单时还不知道的价格,不能直接当作当时的成交价。

为什么“下一根 K 线最高价”不一定更保守?

当信号在时点 t 产生时,你知道的只有 t 之前已经完成、且当时可获得的信息。下一根 K 线的最高价、最低价,要等这根 K 线走完之后才知道。

你想模拟的可能是订单发出后的延迟和不利价格,但使用的却可能是订单发出之后才走完的整根 K 线。两件事不能混为一谈。

对于买入,下一根 K 线的最高价有时会比开盘价更差,但如果价格先下跌、随后又冲高,它也未必代表真实能拿到的成交价。对于卖出,方向还要反过来处理。

回测成交前,先过这 7 项检查

  1. 信号到底在哪一刻产生? 指标使用哪根 K 线?是否已经收盘?
  2. 下单时,下一笔可观察价格是什么? 是下一根 K 线开盘、下一个报价,还是延迟后的第一笔报价?
  3. 买卖方向对应哪一侧报价? 买入通常面对卖方报价,卖出通常面对买方报价。
  4. 手续费、点差和滑点是否一起算? 记录理论价、成交价和成本变化后消失的交易。
  5. 限价单是真的成交,还是只“碰到过”? 触及价格不等于有足够数量成交。
  6. 订单规模会不会改变结果? 记录成交量上限、部分成交或跳过成交等假设。
  7. 异常交易能不能回查? 回到当时的信息、规则版本、订单时点和成交理由。

一个可以先用的最小执行流程

已收盘信号 → 下一可用时点 → 明确买卖报价 → 加入成本假设 → 记录成交/未成交 → 多套假设复核

这不是适用于所有品种和周期的唯一答案,而是一种诚实的起点。它至少把“信号是什么”和“怎么成交”拆开了。

当结果对成本、延迟或成交比例极其敏感时,结论应写成“在这些假设下观察到某种历史结果”,而不是“策略已经被证明有效”。

什么时候该做历史回放?

当你发现回测结果异常顺滑、改一次参数就完全换一条曲线,或者准备把策略推进到模拟执行时,先把规则放回历史时间顺序中:只展示当时可获得的信息,记录信号时点、等待时间、成交假设和没有成交的情况。

历史回放的价值,不是预测下一根 K 线,而是检查研究过程有没有把答案偷偷带进来。

从一句规则开始复查

山尖策略把“规则 → 策略预览 → 历史复盘 → 回查假设”放在同一条研究路径里。

输入一句交易规则,生成策略预览并完成一次历史复盘 →

本文参考近期公开讨论中关于成交假设、滑点、未来信息和模拟盘/实盘差异的提问与回复。

内容仅作量化研究科普;历史复盘不代表未来收益,不构成投资建议。