研究流程 / 历史复盘 / 执行假设
回测成交价不能随便猜:从信号时点到可成交性的 7 项检查
回测里最容易被忽略的,往往不是指标,而是成交。
最近一则公开讨论里,有人问:策略在一根 5 分钟 K 线收盘后产生信号,能不能拿下一根 1 分钟 K 线的最高价,作为“最悲观的成交价”?
保守不等于可用。下单时还不知道的价格,不能直接当作当时的成交价。
为什么“下一根 K 线最高价”不一定更保守?
当信号在时点 t 产生时,你知道的只有 t 之前已经完成、且当时可获得的信息。下一根 K 线的最高价、最低价,要等这根 K 线走完之后才知道。
你想模拟的可能是订单发出后的延迟和不利价格,但使用的却可能是订单发出之后才走完的整根 K 线。两件事不能混为一谈。
对于买入,下一根 K 线的最高价有时会比开盘价更差,但如果价格先下跌、随后又冲高,它也未必代表真实能拿到的成交价。对于卖出,方向还要反过来处理。
回测成交前,先过这 7 项检查
- 信号到底在哪一刻产生? 指标使用哪根 K 线?是否已经收盘?
- 下单时,下一笔可观察价格是什么? 是下一根 K 线开盘、下一个报价,还是延迟后的第一笔报价?
- 买卖方向对应哪一侧报价? 买入通常面对卖方报价,卖出通常面对买方报价。
- 手续费、点差和滑点是否一起算? 记录理论价、成交价和成本变化后消失的交易。
- 限价单是真的成交,还是只“碰到过”? 触及价格不等于有足够数量成交。
- 订单规模会不会改变结果? 记录成交量上限、部分成交或跳过成交等假设。
- 异常交易能不能回查? 回到当时的信息、规则版本、订单时点和成交理由。
一个可以先用的最小执行流程
已收盘信号 → 下一可用时点 → 明确买卖报价 → 加入成本假设 → 记录成交/未成交 → 多套假设复核
这不是适用于所有品种和周期的唯一答案,而是一种诚实的起点。它至少把“信号是什么”和“怎么成交”拆开了。
当结果对成本、延迟或成交比例极其敏感时,结论应写成“在这些假设下观察到某种历史结果”,而不是“策略已经被证明有效”。
什么时候该做历史回放?
当你发现回测结果异常顺滑、改一次参数就完全换一条曲线,或者准备把策略推进到模拟执行时,先把规则放回历史时间顺序中:只展示当时可获得的信息,记录信号时点、等待时间、成交假设和没有成交的情况。
历史回放的价值,不是预测下一根 K 线,而是检查研究过程有没有把答案偷偷带进来。
从一句规则开始复查
山尖策略把“规则 → 策略预览 → 历史复盘 → 回查假设”放在同一条研究路径里。
本文参考近期公开讨论中关于成交假设、滑点、未来信息和模拟盘/实盘差异的提问与回复。
内容仅作量化研究科普;历史复盘不代表未来收益,不构成投资建议。