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

聚宽 (JoinQuant) get_fundamentals 查询财务数据只返回一条记录的解决方法

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

问题描述

为什么get_fundamentals只能取一条记录?

如题,今天的代码只能返回一条记录,前些天一直都很正常。

代码很简单,如下:
q = jq.query(jq.balance).filter(jq.balance.code=='000651.XSHE')
df = jq.get_fundamentals(q)
df

解决方案

您好!出现 get_fundamentals 只返回一条记录的情况,是由于该 API 的默认查询机制决定的。

原因分析

根据 JoinQuant 的 API 文档,get_fundamentals(query_object, date=None, statDate=None) 函数主要用于获取截面数据

当您没有传入 datestatDate 参数时:

  • 研究环境中,date 默认取平台的最新日期(通常是昨天)。
  • 回测环境中,date 默认取 context.current_dt 的前一天。

这意味着,系统会返回在默认日期这一天,该股票所能看到的最新一期财务报表数据。因为您只查询了 '000651.XSHE' 这一只股票,所以自然只会返回最新的一条记录。

解决方法

如果您希望获取该股票历史多个季度或年度的财务数据,建议使用以下几种方法:

方法一:使用 get_history_fundamentals (推荐)

这是专门用于获取多个季度/年度历史财务数据的 API,使用起来非常方便。

from jqdata import *

# 获取格力电器过去 5 个季度的资产负债表数据
df = get_history_fundamentals(
    security='000651.XSHE', 
    fields=[balance.total_assets, balance.total_liability], # 填入您需要的具体字段
    stat_date='2023q3', # 指定结束的报告期
    count=5,            # 获取 5 个报告期
    interval='1q',      # 间隔为 1 个季度
    stat_by_year=False
)
print(df)

方法二:使用 get_fundamentals_continuously

如果您想按交易日连续获取多天的财务数据(例如每天的市值、PE等),可以使用此函数。

q = query(balance).filter(balance.code == '000651.XSHE')
# 获取过去 5 个交易日每天能看到的最新财务数据
df = get_fundamentals_continuously(q, end_date='2023-10-31', count=5, panel=False)
print(df)

方法三:循环传入 statDate

如果您坚持使用 get_fundamentals,可以通过列表推导式或循环,传入不同的季度参数(如 '2022q1', '2022q2')。

q = query(balance).filter(balance.code == '000651.XSHE')
# 获取 2022 年四个季度的资产负债表
rets = [get_fundamentals(q, statDate='2022q'+str(i)) for i in range(1, 5)]
import pandas as pd
df_all = pd.concat(rets)
print(df_all)

总结get_fundamentals 默认就是获取单期截面数据的。如果您之前感觉“正常”返回了多条,可能是因为之前查询时没有加 .filter(code=='...') 从而返回了全市场所有股票的截面数据(多条记录),或者使用了其他的 API。