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

joinquant 财报分析进阶:如何使用 get_history_fundamentals 提取多期财务指标?

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

问题描述

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

Title: joinquant 财报分析进阶:get_history_fundamentals 提取多期财务指标

Question: 如何使用 joinquant 的 get_history_fundamentals 获取股票连续几年的财报数据?

解决方案

joinquant 财报分析进阶:如何使用 get_history_fundamentals 提取多期财务指标

在基本面量化选股策略中,获取股票的历史多期财务数据(如连续多年的年报或连续多季度的季报)是评估公司盈利能力、成长性和财务健康度的重要步骤。聚宽(JoinQuant)提供了专门用于提取历史多期财务数据的 API:get_history_fundamentals


1. API 简介

get_history_fundamentals 用于获取多个季度或年度的历史财务数据,包含资产负债表(balance)、现金流量表(cash_flow)、利润表(income)以及财务指标表(indicator)等。

函数签名与参数说明

get_history_fundamentals(security, fields, watch_date=None, stat_date=None, count=1, interval='1q', stat_by_year=False)
  • security: 股票代码或股票代码列表(例如 '000001.XSHE'['000001.XSHE', '600000.XSHG'])。
  • fields: 查询的财务字段列表(如 [balance.cash_equivalents, income.total_operating_revenue])。
  • watch_date: 观察日期(字符串或 datetime)。指定后返回该日期及之前已发布的最新报表数据(有效规避未来函数)。
  • stat_date: 统计报告期(如 '2019''2019q1')。

    注意watch_datestat_date 只能指定其中一个。

  • count: 查询历史报告期的数量。
  • interval: 报告期时间间隔,可选 '1q'(每季度)或 '1y'(每年)。
  • stat_by_year: 是否按年度统计(布尔值)。为 True 时必须配合 interval='1y' 使用。

2. 核心使用示例

示例一:获取指定观察日(watch_date)前连续4个季度的营业收入

from jqdata import *

# 定义股票列表与查询字段
securities = ['000001.XSHE', '600000.XSHG']
fields_list = [
    income.total_operating_revenue,  # 营业总收入
    income.net_profit                 # 净利润
]

# 获取 2023-01-01 之前最新发布的连续4个季度的财报数据
df_quarterly = get_history_fundamentals(
    security=securities,
    fields=fields_list,
    watch_date='2023-01-01',
    count=4,
    interval='1q',
    stat_by_year=False
)

print(df_quarterly.head())

示例二:按年度获取连续4年的年报财务指标(stat_by_year=True)

from jqdata import *

# 获取截止 2022 年(包含 2022 年及之前)连续 4 年的年报数据
df_yearly = get_history_fundamentals(
    security=['000001.XSHE'],
    fields=[income.total_operating_revenue, balance.total_assets],
    stat_date='2022',
    count=4,
    interval='1y',
    stat_by_year=True
)

print(df_yearly)

3. 常见数据处理技巧

get_history_fundamentals 返回一个 pandas.DataFrame,每只股票在每个报告期占用一行。常用 groupby 方法按股票代码进行分组和计算增长率:

# 按股票代码分组计算平均营业收入或成长率
df_grouped = df_quarterly.groupby('code')['total_operating_revenue'].mean()
print(df_grouped)

4. 注意事项

  1. 不支持市值表(valuation):该 API 不可用于查询每日变动的市值数据,如需查询多日市值,请使用 get_valuation API。
  2. 单次返回限制:每次请求最多返回 5000 条数据。如果股票数量较多或获取周期较长,建议按标的或时间分批获取。
  3. 规避未来函数:在回测策略中,推荐使用 watch_date=context.previous_datewatch_date=context.current_dt,确保仅使用当前时刻已公开发布的财报。