盈余公告后漂移(PEAD)策略的A股实证:如何阻断财报截止日与披露日的时间倒流陷阱
核心摘要速览:
很多量化新手在回测时将 3月31日作为一季报生效日,而上市公司往往在4月20日才发布公告。这种提前20天‘开天眼’的低级错误,足以让回测年化凭空虚增 40% 以上。
很多量化新手在回测时将 3月31日作为一季报生效日,而上市公司往往在4月20日才发布公告。这种提前20天‘开天眼’的低级错误,足以让回测年化凭空虚增 40% 以上。
一、时空倒流:财报回测最容易失守的防线
A股定期报告披露有法定宽限期:一季报和年报最晚可至4月30日披露。如果数据清洗阶段仅以报告期(period)做 join,模型就会在3月31日收盘买入4月25日才公告业绩暴增的股票。这就是最典型的因果倒置。
二、无未来函数的 Point-in-Time 截面构建规范
构建特征矩阵时,必须以实际公告日(actual_ann_date)作为数据可被策略感知的基准时间戳。若当天公告在盘后发出,必须递延至次日开盘方可触发调仓信号。
三、无未来函数财报数据合并 Python 示范代码
def merge_point_in_time_financials(price_df, report_df):
"""
price_df: 索引为 trade_date
report_df: 包含 ann_date, period, net_profit 等
"""
# 强制将公告日作为排序基准,丢弃未到披露时间的财报行
clean_reports = report_df.sort_values('ann_date')
merged = pd.merge_asof(
price_df.sort_values('trade_date'),
clean_reports,
left_on='trade_date',
right_on='ann_date',
direction='backward'
)
return merged
四、速铺宝对定期报告类策略的专项穿透检查
在速铺宝策略诊断流程中,所有基本面与财务因子均强制置于 PIT 隔离沙盒下重新跑动。一旦检测到任何‘公布日前产生信号’的记录,立即出具高危风险红牌。