🚀 AI 一键生成 joinquant 策略代码

JoinQuant 财务数据查询中 statDate 参数如何指定特定季度?

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

问题描述

我想查询 2022 年第一季度的财务数据,get_fundamentals 的 statDate 参数应该怎么写?

解决方案

在 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

注意事项

  1. 未来函数风险
    使用 statDate 指定特定季度(如 '2022q1')获取数据时,系统会直接返回该季度的财务数据。在回测中,如果当前回测时间早于该财报的实际发布日期(例如 2022 年一季报通常在 4 月份发布,如果在 2022 年 3 月就调用此代码),则会引入未来函数

    • 回测建议:在回测中通常建议使用 date 参数(如 date=context.previous_date),系统会自动返回当时已发布的最新财报数据,从而避免未来函数。
    • 研究建议:在研究环境做特定季度分析时,可以放心使用 statDate
  2. 数据更新机制

    • 由于“资产负债数据”表是存量性质的,查询年度数据(如 statDate='2022')通常返回的是第四季度的数据。
    • 银行业、券商、保险专项数据通常只有年报数据,需传入 statDate 参数且为年份格式(如 '2022'),传入季度可能会返回空值。

Q&A

Q: get_fundamentalsdatestatDate 参数有什么区别?
A: date 参数用于查询在指定日期“能看到”的最新数据,系统会根据财报发布日期判断,避免未来函数,适合回测使用。statDate 参数用于强制查询指定会计期间(如某年某季度)的数据,不考虑发布时间,适合在研究环境中进行历史财务分析。两者只能二选一,不可同时使用。

Q: 如果查询不到数据会返回什么?
A: 如果指定了 statDate 但上市公司未发布该季度的财报,或者该股票在当时已退市/未上市,返回的 DataFrame 对应的字段将为空值或 DataFrame 为空。

Q: 如何查询 2022 年全年的年报数据?
A: 将参数设置为 statDate='2022' 即可。注意,部分专项数据(如银行专项指标)只能通过这种年份格式查询。