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

为什么 attribute_history 获取不到昨天和今天的数据?

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

问题描述

attribute_history()API的问题

咨询一个问题,我今天运行一个策略(10月12日),首先要选股,日期我设置在今天,10月12号,我使用 close_data = attribute_history(i, 20, '1d', ['close'])来获取股票之前的数据,我发现现在能够获取到的最新的数据是10月8号的。为什么10月11号的取不到呢?如果我今天要获取到10月11和10月12日的数据应该使用哪个API?

解决方案

在 JoinQuant 聚宽平台中,遇到 attribute_history 无法获取到最新数据的情况,通常与 API 的设计机制、交易日历以及股票的停复牌状态有关。以下是详细的原因分析及获取最新数据的解决方案:

一、 为什么取不到 10月11日 和 10月12日 的数据?

  1. 关于 10月12日(今天)的数据:
    根据 JoinQuant API 文档规定,attribute_historyhistory 函数在获取天级别(1d)数据时,严格不包含当天的数据(即使是在收盘后运行)。这是为了防止策略在回测时引入“未来函数”。因此,在 10月12日 运行策略时,attribute_history 最多只能取到 10月11日 的数据。

  2. 关于 10月11日(昨天)的数据缺失,可能的原因有:

    • 非交易日: 如果 10月11日 是周末或法定节假日,A股不开盘,自然没有行情数据。系统会返回距离 10月12日 最近的上一交易日(例如 10月8日)的数据。
    • 股票停牌: attribute_history 默认参数 skip_paused=True(跳过停牌日)。如果该股票在 10月9日-11日 期间处于停牌状态,API 会自动跳过这些日期,返回停牌前最近的交易日(10月8日)的数据。

二、 如何获取 10月11日 和 10月12日 的数据?

如果您需要获取包含今天(10月12日)在内的最新数据,可以使用以下 API 替代:

1. 获取今天(10月12日)的盘中实时数据

如果您只需要获取今天的最新价、开盘价、涨跌停价等,推荐使用 get_current_data()

def handle_data(context, data):
    # 获取当前时刻的实时数据
    current_data = get_current_data()
    
    # 获取某只股票今天的最新价和开盘价
    last_price = current_data['000001.XSHE'].last_price
    day_open = current_data['000001.XSHE'].day_open
    print(f"今日最新价: {last_price}, 今日开盘价: {day_open}")

2. 获取包含今天在内的历史 K 线数据(使用 get_bars

get_bars 函数支持获取包含当前未结束的 Bar(即今天)的数据,只需设置 include_now=True

def handle_data(context, data):
    # 获取包含今天在内的过去 20 个交易日的收盘价
    # include_now=True 表示包含当天的最新快照数据
    bars = get_bars('000001.XSHE', count=20, unit='1d', fields=['date', 'close'], include_now=True, df=True)
    print(bars)

注:get_bars 获取的当天数据为截至当前时刻的快照数据(例如 10:30 运行,则当天的 close 为 10:30 的最新价)。

3. 获取指定日期的历史数据(使用 get_price

如果您想明确获取到 10月11日 的数据,且不希望跳过停牌日(停牌日用前收盘价填充),可以使用 get_price

# 获取截至 10月11日 的过去 20 个交易日数据,不跳过停牌日
df = get_price('000001.XSHE', end_date='2023-10-11', count=20, frequency='1d', fields=['close'], skip_paused=False)
print(df)

总结建议

  • 查历史(不含今天): 继续使用 attribute_history,如果发现少日期,检查是否是周末或停牌(可设置 skip_paused=False 验证)。
  • 查今天实时切片: 使用 get_current_data()
  • 查历史 + 今天实时 K 线: 使用 get_bars(..., include_now=True)