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

JoinQuant 平台如何连续获取多日财务与市值数据?(get_fundamentals_continuously 实战指南)

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

问题描述

请根据以下 SEO 主题生成完整页面内容:

Title: joinquant 财务数据获取:get_fundamentals_continuously 多日查询实战

Question: 如何在 joinquant 中连续获取多日的市值和财务指标数据?

解决方案

JoinQuant 平台如何连续获取多日财务与市值数据?(get_fundamentals_continuously 实战指南)

在进行量化回测与因子研究时,经常需要获取某只或多只股票在一段时间内的连续财务数据(如市盈率、市值、换手率、EPS 等)。JoinQuant 提供了 get_fundamentals_continuously 函数,能够高效地一次性查询多日财务数据。


一、get_fundamentals_continuously API 核心说明

1. 函数语法与参数

get_fundamentals_continuously(query_object, end_date=None, count=None, panel=False)
  • query_object:通过 query(...) 构造的 SQLAlchemy 查询对象,包含需要查询的表和字段。
  • end_date:查询截止日期。在回测环境中默认为 context.current_dt 的前一天(避免未来函数);在研究环境中默认为最新可用日期。
  • count:获取 end_date 之前 count 个交易日的数据。
  • panel:由于 Pandas 0.24+ 已废弃 Panel 结构,强烈建议设置为 False,以返回等效的 DataFrame(默认为 True)。

2. 注意事项与限制

  • 数据条数限制:系统做出了返回总条数不超过 5000 条的限制,即:查询股票数量 × count < 5000。若超出限制,返回数据会不完整。
  • 避免未来函数:财务报表数据(如利润表、资产负债表)按季度更新,但在指定日期范围内,每日获取到的均是当时最新的已知财报数据;市值表(valuation)则每日更新。

二、实战代码示例:查询连续 5 个交易日的市值与财务指标

以下代码展示了如何在 JoinQuant 中连续获取平安银行(000001.XSHE)与浦发银行(600000.XSHG)连续 5 个交易日的换手率、总市值与每股收益(EPS)。

from jqdata import *

# 1. 构造 Query 查询对象,指定要查询的表与字段以及目标股票
q = query(
    valuation.code,
    valuation.day,
    valuation.turnover_ratio, # 换手率(%)
    valuation.market_cap,     # 总市值(亿元)
    indicator.eps             # 每股收益EPS(元)
).filter(
    valuation.code.in_(['000001.XSHE', '600000.XSHG'])
)

# 2. 调用 get_fundamentals_continuously 获取连续 5 个交易日的数据
# 建议设置 panel=False
df_res = get_fundamentals_continuously(q, end_date='2023-12-29', count=5, panel=False)

# 3. 查看返回结果
print(df_res)

三、返回数据提取与常用处理方式

panel=False 时,返回的 DataFrame 包含形如 codeday 以及具体字段的多重列或索引,可通过 Pandas 的 groupby 或透视表轻松提取特定股票的数据:

# 筛选平安银行(000001.XSHE)的连续财务数据
payh_df = df_res[df_res['code'] == '000001.XSHE']
print(payh_df[['day', 'turnover_ratio', 'market_cap', 'eps']])

四、常见问题 FAQ

Q1: get_fundamentalsget_fundamentals_continuously 有何区别?

  • get_fundamentals 用于获取单日的截面财务数据。
  • get_fundamentals_continuously 用于获取连续多日的时间序列财务数据,避免循环调用单日 API,大幅提升运行效率。

Q2: 提示数据不完整或超过 5000 条限制怎么办?

如果股票池较大(例如沪深300指数成分股 300 只),且需要获取 30 天数据(300 × 30 = 9000 > 5000),请将股票列表分批次(Batch)传入查询,最后使用 pd.concat 合并结果。