问题描述
在使用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。
具体原因分析:
-
end_dt='2020-06-29':
系统将其解析为2020-06-29 00:00:00。在这个时间点,6月29日的交易尚未开始,当天的日线(1d)Bar 还没有生成。因此,返回的数据截止到6月28日,不包含6月29日的数据。 -
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 日当天的日线数据了。