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

为什么 JoinQuant 中 get_bars 设置 end_dt 为当天日期会缺失当天数据?

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

问题描述

获取数据时截止日期为6月29日时,为什么返回值缺失当天数据?

在使用get_bar获取数据时,include_now=True, end_dt='2020-06-29',返回结果中没有29日数据;如果end_dt='2020-06-30',返回结果中有29日和30日的数据,这是什么原因?

data = get_bars(security='MA9999.XZCE', count=3, unit='1d',
fields=('date', 'open', 'high', 'low', 'close','volume'),
include_now=True,
end_dt='2020-06-29')

解决方案

出现这种情况的原因在于 end_dt 参数的时间默认值设置。

在 JoinQuant 的 API 中,当您给 end_dt 参数只传入日期字符串(如 '2020-06-29')而没有指定具体的时间时,系统会默认将其解析为该日期的 00:00:00

具体原因分析:

  1. end_dt='2020-06-29'
    系统将其解析为 2020-06-29 00:00:00。在这个时间点,6月29日的交易尚未开始,当天的日线(1d)Bar 还没有生成。因此,返回的数据截止到6月28日,不包含6月29日的数据。

  2. end_dt='2020-06-30'
    系统将其解析为 2020-06-30 00:00:00。在这个时间点,6月29日的交易已经全部结束,6月29日的日线 Bar 已经完整生成。因此,返回的结果中会包含6月29日的数据(如果30日有夜盘数据,且 include_now=True,可能也会包含30日的数据)。

解决方法:

如果您希望 end_dt 设定为某一天,并且结果中包含这一天的日线数据,您需要将时间指定到该交易日收盘之后。例如,指定时间为 15:30:00

data = get_bars(
    security='MA9999.XZCE', 
    count=3, 
    unit='1d',
    fields=('date', 'open', 'high', 'low', 'close','volume'),
    include_now=True,
    end_dt='2020-06-29 15:30:00'  # 加上具体的时间
)

这样设置后,系统就会获取到截止到 2020-06-29 下午 15:30 的数据,自然也就包含了 29 日当天的日线数据了。