🚀 AI 一键生成 joinquant 策略代码

JoinQuant 平台 get_bars 获取 60m 级别 K 线数据的划分规则

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

问题描述

假设unit为60m
1、check_data为 2023-03-29 ,那么最后一个bar为2023-03-29 14:00至2023-03-29 15:00;
2、check_data为 2023-03-29 14:36:50,那么最后一个bar为2023-03-29 13:36:00至2023-03-29 14:36:00
是这个理解吗?

解决方案

您的第一点理解基本正确,但第二点理解是不正确的

在 JoinQuant 平台中,当 get_barsunit 参数设置为 '60m' 时,它属于标准 bar。标准 bar 的分割方式与主流股票软件完全一致,是按照固定的时间刻度来划分的,而不是从您传入的 end_dt 往前倒推 60 分钟。

对于 A 股市场,60m 标准 Bar 的固定划分时间段如下:

  1. 09:30:00 - 10:30:00
  2. 10:30:00 - 11:30:00
  3. 13:00:00 - 14:00:00
  4. 14:00:00 - 15:00:00

下面针对您的两种情况进行详细解释:

情况 1:end_dt2023-03-29

您的理解基本正确。
如果您传入的 end_dt='2023-03-29'(在 get_bars 中如果不带时分秒,默认等同于 00:00:00,但如果是取历史已收盘的数据,通常指代这一天结束),那么这一天最后一个完整的 60m bar 确实是 14:00 至 15:00 这个时间段的 Bar。

情况 2:end_dt2023-03-29 14:36:50

您的理解不正确。
首先,get_bars 的最小单位是分钟,秒和毫秒会被忽略,所以 14:36:50 等同于 14:36:00
其次,由于 60m 是标准 Bar,它不会生成 13:36-14:36 这种非标准的 Bar。此时返回的结果取决于 include_now 参数的设置:

  • 如果 include_now=False(默认值)
    系统会返回距离 14:36:00 最近的一个已经结束的完整 Bar。根据固定划分,上一个结束的 Bar 是 13:00-14:00。因此,最后一个 Bar 是 13:00 至 14:00
  • 如果 include_now=True
    系统会包含当前正在生成的 Bar。14:36:00 处于 14:00-15:00 这个 Bar 的生成过程中。因此,最后一个 Bar 是 14:00 至 14:36 的数据(即这个 60m Bar 截至 14:36 的快照数据)。

总结

JoinQuant 的标准周期(如 1m, 5m, 15m, 30m, 60m, 1d)都是固定刻度划分的,不会因为查询时间的不同而改变 Bar 的起止时间边界。如果您确实需要从某个特定时间往前推 60 分钟的数据,您应该获取 unit='1m' 的数据,然后取 count=60,自己在代码中进行合成。