🚀 AI 一键生成 ptrade 策略代码

PTrade 财报挖掘:如何精准查询特定季度的财务数据?

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

问题描述

我想只查询上市公司的第一季度财报数据,应该怎么写代码?

解决方案

在PTrade中,查询上市公司特定季度(如第一季度)的财务数据,主要通过 get_fundamentals 函数实现。关键在于设置 report_types 参数。

核心方法

使用 get_fundamentals 函数时,将 report_types 设置为 '1' 即可指定获取第一季度的财报数据。

report_types 参数说明:

  • '1': 第一季度报
  • '2': 半年报(中报)
  • '3': 第三季度报
  • '4': 年报

代码实现

以下是一个完整的策略示例,展示了两种常见的查询场景:

  1. 按年份查询:获取指定股票在过去几年中每一年的第一季度净利润。
  2. 按日期查询:获取指定日期前最新发布的一份第一季度财报数据。
def initialize(context):
    # 设置股票池,以恒生电子为例
    g.security = ['600570.SS']
    set_universe(g.security)

def before_trading_start(context, data):
    # 场景一:按年份查询(推荐用于研究历史趋势)
    # 查询 2020年 到 2022年,每年的第一季度(Q1)的净利润数据
    # table='income_statement' (利润表)
    # fields='net_profit' (净利润)
    # report_types='1' (指定只看一季报)
    log.info("=== 开始查询 2020-2022 历年一季报数据 ===")
    q1_history = get_fundamentals(
        g.security, 
        'income_statement', 
        fields='net_profit', 
        start_year='2020', 
        end_year='2022', 
        report_types='1'
    )
    log.info(q1_history)

    # 场景二:按日期查询(推荐用于回测或实盘获取最新数据)
    # 查询在 2023年5月1日 之前发布的、最近的一份第一季度报数据
    # 如果2023年一季报已发,则返回2023Q1;如果未发,则返回2022Q1
    log.info("=== 开始查询指定日期前最新的一季报数据 ===")
    q1_latest = get_fundamentals(
        g.security, 
        'income_statement', 
        fields='net_profit', 
        date='20230501', 
        report_types='1'
    )
    log.info(q1_latest)

def handle_data(context, data):
    pass

注意事项

  1. 参数互斥start_year/end_year 模式与 date 模式不能同时使用。
    • 使用 start_yearend_year 时,返回的是一个 Panel 结构(多维数据),包含指定年份范围内的所有一季报。
    • 使用 date 时,返回的是 DataFrame 结构,仅包含离该日期最近的那一份一季报。
  2. 数据表选择:示例中使用的是 income_statement(利润表),您可以根据需要更改为 balance_statement(资产负债表)、cashflow_statement(现金流量表)等,具体字段请参考API文档的财务数据附录。
  3. 缺省情况:如果查询的年份或日期对应的财报尚未披露,系统可能会返回 NaN

Q&A

Q: get_fundamentals函数中report_types参数不填会返回什么?
A: 如果使用年份查询模式(start_year/end_year),不填 report_types 默认返回当年可查询到的全部类型财报;如果使用日期查询模式(date),不填 report_types 默认返回距离指定日期最近的一份财报(可能是季报、半年报或年报)。

Q: 如何查询上市公司的年报数据?
A: 将 get_fundamentals 函数中的 report_types 参数设置为 '4' 即可查询年报数据。

Q: PTrade回测中获取财务数据会有未来函数吗?
A: 如果使用 date 参数且不传入具体日期(默认取回测当前日期),或者传入了具体的历史日期,PTrade 会根据财报的**实际公告日期(publ_date)**来返回数据。只有当回测日期大于等于公告日期时,才能获取到该财报数据,从而避免未来函数。但如果使用 merge_type=1(获取最新发布数据)可能会引入修正后的数据,需谨慎使用。