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

为什么 JoinQuant 中 get_price 获取的数据日期不到今天?

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

问题描述

关于get_price的一个问题

def ir(context):
h = get_price('000001.XSHE', start_date= context.currdent_dt.data(),frequency='daily', fields=['high','low','close'])

h['close']
输出结果只到18号,为什么不是20号?

解决方案

在 JoinQuant (聚宽) 平台中使用 get_price 函数时,如果发现获取的数据日期没有到您预期的日期(例如只到18号而不是20号),通常是由以下几个原因导致的:

1. 未指定 end_date 参数

在您的代码中,只指定了 start_date,而没有指定 end_date。根据聚宽 API 文档,如果 countstart_date 都没有,默认 start_date 是 '2015-01-01',而 end_date 默认是 '2015-12-31'。在某些环境版本中,如果不传 end_date,系统可能会使用默认的截止日期或者当前回测环境的某个默认值。建议始终明确指定 end_date

2. 避免“未来函数”的限制

如果您是在回测或模拟交易的盘中(例如 20号的 09:30)调用该函数获取 daily(日线)数据,由于 20号 还没有收盘,当天的日线数据尚未生成。为了避免引入未来数据,系统最多只能返回到上一个交易日(即 19号)的收盘数据。

3. 节假日与非交易日因素

如果 20号 是周日,19号 是周六,那么 A股 市场最近的一个交易日就是 18号(周五)。get_price 返回的都是实际有交易的日期,因此数据只到 18号 是完全正常的。

4. 代码拼写错误

您的代码中存在拼写错误:context.currdent_dt.data() 应该是 context.current_dt.date()

正确的代码写法建议

如果您希望获取从某个开始日期到当前回测时间点(前一个交易日)的数据,建议这样写:

def ir(context):
    # 获取当前回测逻辑时间
    current_date = context.current_dt.date()
    
    # 明确指定 start_date 和 end_date
    # 注意:如果 start_date 和 end_date 是同一天,且当天未收盘,可能获取不到当天的日线数据
    h = get_price('000001.XSHE', 
                  start_date='2023-01-01', # 替换为您实际需要的开始时间
                  end_date=current_date, 
                  frequency='daily', 
                  fields=['high','low','close'])
    
    print(h['close'])

总结:请检查 19号 和 20号 是否为周末或节假日,并确保在调用 get_price 时显式传入 end_date 参数。如果需要获取当天的最新价格,请使用 get_current_data() 或将频率改为分钟级别 (frequency='1m')。