问题描述
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_bars 的 unit 参数设置为 '60m' 时,它属于标准 bar。标准 bar 的分割方式与主流股票软件完全一致,是按照固定的时间刻度来划分的,而不是从您传入的 end_dt 往前倒推 60 分钟。
对于 A 股市场,60m 标准 Bar 的固定划分时间段如下:
- 09:30:00 - 10:30:00
- 10:30:00 - 11:30:00
- 13:00:00 - 14:00:00
- 14:00:00 - 15:00:00
下面针对您的两种情况进行详细解释:
情况 1:end_dt 为 2023-03-29
您的理解基本正确。
如果您传入的 end_dt='2023-03-29'(在 get_bars 中如果不带时分秒,默认等同于 00:00:00,但如果是取历史已收盘的数据,通常指代这一天结束),那么这一天最后一个完整的 60m bar 确实是 14:00 至 15:00 这个时间段的 Bar。
情况 2:end_dt 为 2023-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,自己在代码中进行合成。