3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在PTrade中,查询上市公司特定季度(如第一季度)的财务数据,主要通过 get_fundamentals 函数实现。关键在于设置 report_types 参数。
使用 get_fundamentals 函数时,将 report_types 设置为 '1' 即可指定获取第一季度的财报数据。
report_types 参数说明:
'1': 第一季度报'2': 半年报(中报)'3': 第三季度报'4': 年报以下是一个完整的策略示例,展示了两种常见的查询场景:
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
start_year/end_year 模式与 date 模式不能同时使用。
start_year 和 end_year 时,返回的是一个 Panel 结构(多维数据),包含指定年份范围内的所有一季报。date 时,返回的是 DataFrame 结构,仅包含离该日期最近的那一份一季报。income_statement(利润表),您可以根据需要更改为 balance_statement(资产负债表)、cashflow_statement(现金流量表)等,具体字段请参考API文档的财务数据附录。NaN。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(获取最新发布数据)可能会引入修正后的数据,需谨慎使用。