问题描述
/
解决方案
在 ptrade 量化平台中,使用 get_fundamentals 获取财务数据时,默认情况下为了防止未来函数(即在回测中使用了当时还未公布的数据),系统会返回首次发布的原始数据。如果上市公司后续对财务报表进行了修正或更新,默认参数下是获取不到这些最新修正数据的。
要获取最新的财务数据,您需要使用 merge_type 参数。
解决方法:设置 merge_type=1
在调用 get_fundamentals 接口时,将 merge_type 参数设置为 1,即可获取最新发布(修正后)的数据。这在研究场景或实盘交易场景中非常有用。
参数说明:
merge_type=None(默认):获取首次发布的数据,即使实际数据发生变化,也只返回原样数据信息。回测场景为避免未来数据建议使用此模式。merge_type=1:获取最新发布的数据,更新数据范围包括但不限于相关日期数据。研究场景或交易场景建议使用此模式。
代码示例
def initialize(context):
g.security = ['600570.SS']
set_universe(g.security)
def handle_data(context, data):
# 默认情况:获取首次发布的原始数据(可能不是最新的修正数据)
fields = ['total_assets', 'total_liability']
df_original = get_fundamentals(g.security, 'balance_statement', fields, '20230628')
log.info("原始财务数据:\n%s" % df_original)
# 解决方法:设置 merge_type=1 获取最新发布的修正数据
df_latest = get_fundamentals(g.security, 'balance_statement', fields, '20230628', merge_type=1)
log.info("最新财务数据:\n%s" % df_latest)
补充说明:date_type 参数的影响
除了 merge_type,date_type 参数也会影响您获取到的数据所属的周期:
date_type=None(默认):返回**发布日期(publ_date)**在查询日期(date)之前的数据。这意味着如果一季报在4月公布,你在3月查询,只能查到去年的年报或三季报。date_type=1:返回**会计周期(end_date)**在查询日期(date)之前的数据。如果未指定财报类型,则默认为查询日期最近季度会计周期的数据(如果该数据在查询日还未公布,则用 NaN 填充)。
总结:如果您在实盘或研究中发现数据不是最新的修正版,请加上 merge_type=1;如果您发现获取的季度不对,请检查 date_type 和查询日期 date 的设置。