问题描述
解决方案
在 JoinQuant 聚宽平台中,若要查询 2022 年第一季度的财务数据,get_fundamentals 函数的 statDate 参数应设置为字符串 '2022q1'。
参数说明
根据聚宽 API 文档,statDate 参数用于指定财报统计的季度或年份,格式如下:
- 季度格式:
'年份' + 'q' + '季度序号'。例如:一季报为'2022q1',中报为'2022q2',三季报为'2022q3',年报为'2022q4'。 - 年份格式:仅年份数字字符串,例如
'2022'(通常返回该年的年报数据)。
代码示例
以下是一个完整的代码示例,展示如何查询平安银行(000001.XSHE)在 2022 年第一季度的营业收入和净利润:
# -*- coding: utf-8 -*-
from jqdata import *
def initialize(context):
# 设定查询对象:平安银行
security = '000001.XSHE'
# 构造查询语句
# 查询字段:股票代码、财报统计日期、营业收入、净利润
q = query(
income.code,
income.statDate,
income.operating_revenue,
income.net_profit
).filter(
income.code == security
)
# 调用 get_fundamentals 获取 2022 年第一季度的数据
# 注意:statDate='2022q1'
df = get_fundamentals(q, statDate='2022q1')
# 打印结果
print("2022年第一季度财务数据:")
print(df)
def handle_data(context, data):
pass
注意事项
-
未来函数风险:
使用statDate指定特定季度(如'2022q1')获取数据时,系统会直接返回该季度的财务数据。在回测中,如果当前回测时间早于该财报的实际发布日期(例如 2022 年一季报通常在 4 月份发布,如果在 2022 年 3 月就调用此代码),则会引入未来函数。- 回测建议:在回测中通常建议使用
date参数(如date=context.previous_date),系统会自动返回当时已发布的最新财报数据,从而避免未来函数。 - 研究建议:在研究环境做特定季度分析时,可以放心使用
statDate。
- 回测建议:在回测中通常建议使用
-
数据更新机制:
- 由于“资产负债数据”表是存量性质的,查询年度数据(如
statDate='2022')通常返回的是第四季度的数据。 - 银行业、券商、保险专项数据通常只有年报数据,需传入
statDate参数且为年份格式(如'2022'),传入季度可能会返回空值。
- 由于“资产负债数据”表是存量性质的,查询年度数据(如
Q&A
Q: get_fundamentals 中 date 和 statDate 参数有什么区别?
A: date 参数用于查询在指定日期“能看到”的最新数据,系统会根据财报发布日期判断,避免未来函数,适合回测使用。statDate 参数用于强制查询指定会计期间(如某年某季度)的数据,不考虑发布时间,适合在研究环境中进行历史财务分析。两者只能二选一,不可同时使用。
Q: 如果查询不到数据会返回什么?
A: 如果指定了 statDate 但上市公司未发布该季度的财报,或者该股票在当时已退市/未上市,返回的 DataFrame 对应的字段将为空值或 DataFrame 为空。
Q: 如何查询 2022 年全年的年报数据?
A: 将参数设置为 statDate='2022' 即可。注意,部分专项数据(如银行专项指标)只能通过这种年份格式查询。