问题描述
解决方案
在 JoinQuant(聚宽)平台中,获取一只股票过去多个季度的财务数据,最直接且高效的方法是使用 get_history_fundamentals 函数。
该函数专门用于查询多个季度或年度的历史财务报表数据。
代码实现
以下是在聚宽研究环境或回测中获取某只股票(以平安银行 '000001.XSHE' 为例)过去 8 个季度净利润数据的代码示例:
# -*- coding: utf-8 -*-
from jqdata import *
# 设定要查询的股票代码
security = '000001.XSHE'
# 使用 get_history_fundamentals 获取历史财务数据
# watch_date: 观察日期,默认为 None(回测中为当前日期,研究中为最新日期)
# fields: 查询字段,income.net_profit 代表净利润
# count: 查询的数量,这里设为 8
# interval: 查询间隔,'1q' 代表按季度查询
df = get_history_fundamentals(
security=security,
fields=[income.net_profit],
watch_date=None,
count=8,
interval='1q'
)
# 打印结果
print(df)
关键参数说明
security: 股票代码,可以是单个字符串(如'000001.XSHE')或列表。fields: 需要查询的财务字段列表。净利润位于利润表(income)中,字段名为net_profit,所以写作[income.net_profit]。count=8: 指定获取过去 8 个周期的数据。interval='1q': 指定时间间隔为 1 个季度。如果需要按年获取,可以设置为'1y'。watch_date: 观察日期。- 如果指定了日期(如
'2023-01-01'),系统会返回该日期之前(包含该日期)发布的最近 8 期财报数据。 - 如果不指定(
None),在回测中默认为当前回测日期,在研究中默认为今天。
- 如果指定了日期(如
返回数据格式
函数返回一个 pandas.DataFrame。
- 索引 (Index): 通常是股票代码(如果是单只股票,索引可能是日期,具体取决于返回数据的结构,通常建议打印
df.head()查看)。 - 列 (Columns): 包含
statDate(财报统计日期,如 '2022q4')和请求的字段(如net_profit)。
Q&A
Q: get_history_fundamentals 和 get_fundamentals 有什么区别?
A: get_fundamentals 主要用于获取某一个时间点(截面)的财务数据,常用于选股;而 get_history_fundamentals 用于获取一段时间内(时间序列)的财务数据,常用于分析单只股票的财务趋势。
Q: 如果我想获取“归属于母公司股东的净利润”而不是“净利润”,应该用哪个字段?
A: 应该使用 income.np_parent_company_owners。income.net_profit 是包含少数股东损益的净利润。
Q: 获取的数据是单季度数据还是累积数据?
A: get_history_fundamentals 返回的数据通常是单季度数据(对于利润表和现金流量表)。这意味着 2023q4 的数据仅代表第四季度当季的数值,而不是全年的累积值。这对于趋势分析非常方便。