🚀 AI 一键生成 ptrade 策略代码

PTrade 数据防坑:get_fundamentals 中 merge_type 参数的用法与意义

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

问题描述

get_fundamentals 中的 merge_type 参数有什么作用?

解决方案

在 PTrade 量化交易平台中,get_fundamentals 函数用于获取财务数据。其中 merge_type 参数主要用于控制财务数据更新版本的选择,即决定是获取上市公司首次发布的数据,还是获取经过修正后的最新发布数据。

以下是关于 merge_type 参数的详细说明:

1. 参数作用

上市公司发布的财务报表(如年报、季报)在发布后,可能会因为会计差错更正、追溯调整等原因进行修正。merge_type 决定了策略获取的是原始数据还是修正后的数据。

2. 参数取值及含义

  • 不传 或 merge_type=None(默认值)

    • 含义:获取首次发布的数据。
    • 逻辑:即使上市公司后续对财务数据进行了修正或更新,该模式下依然只返回当初第一次发布时的数值。
    • 适用场景回测(Backtest)
    • 原因:在回测历史行情时,为了模拟当时真实的市场环境,必须使用当时投资者能看到的数据。如果使用了后来修正过的数据(修正动作发生在回测时间点之后),就会产生“未来函数”(Look-ahead Bias),导致回测结果虚高或失真。
  • merge_type=1

    • 含义:获取最新发布的数据。
    • 逻辑:返回该财务指标当前最新的、经过修正后的数值。更新范围包括但不限于相关日期的数据。
    • 适用场景研究(Research)实盘交易(Live Trading)
    • 原因:在进行基本面研究或实盘交易决策时,通常需要最准确、最接近真实情况的财务数据来评估公司的价值。

3. 举例说明

假设某上市公司在 2022年4月20日 发布了2021年年报,净利润显示为 1亿元
随后在 2022年5月20日,公司发布公告更正了年报数据,将净利润修正为 0.8亿元

如果在策略中查询该股票2021年的净利润:

  • 使用 merge_type=None:无论何时查询,返回的都是 1亿元(还原历史发布时的状态)。
  • 使用 merge_type=1:返回的是 0.8亿元(获取修正后的准确数据)。

4. 注意事项

  • 并非所有的财务数据表都包含此字段,具体支持情况需参考 PTrade 的财务数据字典。
  • 在编写回测策略时,强烈建议保持默认值(不传该参数),以确保回测的严谨性。

Q&A

Q: 在回测中如果使用了 merge_type=1 会有什么后果?
A: 如果在回测中使用 merge_type=1,策略可能会利用“未来已知”的修正数据进行交易。例如,某公司原始财报很差导致股价下跌,但后来修正为盈利。如果回测使用了修正后的盈利数据买入,而当时市场上的投资者看到的是亏损数据在卖出,这会导致回测收益率虚高,无法反映真实交易情况(即引入了未来函数)。

Q: get_fundamentals 中哪些表支持 merge_type 参数?
A: 根据文档,只有部分表包含此字段。通常涉及核心财务报表(如资产负债表 balance_statement、利润表 income_statement、现金流量表 cashflow_statement)的数据更正较多,具体需以 API 文档中的各表字段说明为准。

Q: 实盘交易时必须设置 merge_type=1 吗?
A: 建议设置。实盘交易关注的是公司当前的真实财务状况。使用最新修正后的数据可以避免因原始报表错误而做出错误的估值判断。