3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
您好!您的观察非常敏锐,这涉及到 JoinQuant 平台在回测环境下的运行机制和撮合逻辑。简单来说,市价单确实是瞬间撮合的,但使用的价格是“最新价”(即上一分钟的收盘价);而限价单如果未能立即成交,则会在当前分钟结束时进行撮合。
以下是详细的机制解析:
在分钟级别的回测中,策略(如 handle_data)是在每分钟的第一秒运行的,而此时您获取到的 data 是上一分钟的分钟数据。
09:31:00 运行策略时,您获取到的 data 是 09:30:00 ~ 09:30:59 这一分钟的 K 线数据。当您在 handle_data 中下达市价单时,系统会立即尝试撮合。
最新价 + 滑点。data 中看到的上一分钟的收盘价)。09:31:00 运行时只能看到 09:30:59 的价格,所以系统会以 09:30:59 的价格(加减滑点)为您撮合成交。这可能让您产生了“价格延迟了一分钟”的错觉,实际上这是为了避免未来函数,使用您下单时刻所能看到的最新真实价格。当您下达限价单时,撮合分为两步:
09:31:59)按照本分钟的 Bar 信息(最高价、最低价)尝试撮合。如果满足条件,则以您的委托价成交。您感觉到的“延迟”,实际上是平台为了避免未来函数和模拟真实交易环境而设计的机制:
如果您希望更精细的撮合,可以考虑使用 Tick 级别回测,在 Tick 频率下,策略会在每个 Tick 到来时运行,撮合也会按照 Tick 数据进行,颗粒度会细致得多。