🚀 AI 一键生成 joinquant 策略代码
立即体验
👉 AI 生成代码 👈

JoinQuant 平台回测时订单是瞬间撮合的吗?为什么撮合价格感觉延迟了一分钟?

joinquant | 发布时间: 2026/5/29
以下内容由 EasyQuant 生成。

问题描述

我的理解系统应当在我报单时刻,瞬间撮合吧?我发现回测撮合价格实在延迟一分钟之后的?不知道我说的对否?

{"text":"","hyperlink":"https://www.joinquant.com/user/f7438308ce378fc2894a517b0d2d4e55"}

解决方案

您好!您的观察非常敏锐,这涉及到 JoinQuant 平台在回测环境下的运行机制撮合逻辑。简单来说,市价单确实是瞬间撮合的,但使用的价格是“最新价”(即上一分钟的收盘价);而限价单如果未能立即成交,则会在当前分钟结束时进行撮合。

以下是详细的机制解析:

1. 回测的运行时间与数据获取(以分钟频率为例)

在分钟级别的回测中,策略(如 handle_data)是在每分钟的第一秒运行的,而此时您获取到的 data上一分钟的分钟数据

  • 例如:在 09:31:00 运行策略时,您获取到的 data09:30:00 ~ 09:30:59 这一分钟的 K 线数据。

2. 市价单的撮合逻辑

当您在 handle_data 中下达市价单时,系统会立即尝试撮合

  • 成交价格最新价 + 滑点
  • 什么是最新价? 在开盘时刻运行,最新价格为开盘价;在其他情况下,最新价为上一分钟的最后一个价格(即您在 data 中看到的上一分钟的收盘价)。
  • 结论:市价单是瞬间成交的,但因为策略在 09:31:00 运行时只能看到 09:30:59 的价格,所以系统会以 09:30:59 的价格(加减滑点)为您撮合成交。这可能让您产生了“价格延迟了一分钟”的错觉,实际上这是为了避免未来函数,使用您下单时刻所能看到的最新真实价格。

3. 限价单的撮合逻辑

当您下达限价单时,撮合分为两步:

  1. 下单时立即撮合:系统首先尝试以“最新价 + 滑点”进行撮合。如果您的限价满足条件(买单限价 >= 最新价+滑点,卖单限价 <= 最新价-滑点),则立即成交。
  2. 挂单按分钟 Bar 撮合:如果未能立即完全成交,剩余部分会挂单。挂单的限价单会在本分钟 Bar 结束时(例如 09:31:59)按照本分钟的 Bar 信息(最高价、最低价)尝试撮合。如果满足条件,则以您的委托价成交。
  • 结论:对于挂单的限价单,确实是在当前分钟结束时才进行撮合的,这符合真实的交易所撮合逻辑(等待价格触及您的限价)。

总结

您感觉到的“延迟”,实际上是平台为了避免未来函数模拟真实交易环境而设计的机制:

  • 市价单:瞬间成交,价格取自您下单时能看到的最新价格(上一分钟收盘价)。
  • 限价单:未立即成交的部分,会在当前分钟走完后,根据当前分钟的最高/最低价判断是否成交。

如果您希望更精细的撮合,可以考虑使用 Tick 级别回测,在 Tick 频率下,策略会在每个 Tick 到来时运行,撮合也会按照 Tick 数据进行,颗粒度会细致得多。