halo 的技术博客

返回

有效市场假说对财报日的预言非常干净:财报公布的那一刻,所有新信息应该被瞬间定价,公告后的收益不应该和公告内容有任何关系。但 Ball 和 Brown 在 1968 年就发现了打脸证据,而且这记耳光扇了快六十年还没停:盈余惊喜最好的股票,在公告之后的 60 个交易日里还在继续跑赢;惊喜最差的股票,还在继续跑输。 这就是 PEAD(Post-Earnings Announcement Drift,盈余公告后漂移)——学术界公认最顽固、最长寿的市场异象,Fama 本人都称它是”祖师爷级的尴尬”(the granddaddy of anomalies)。

结论先放这:在 800 只股票 × 12 个季度的合成事件面板上,按标准化未预期盈余(SUE)十分组,最高组 D10 公告后 60 日累计超额收益 +3.9%,最低组 D1 −4.7%,多空价差约 5.5% 且十个分组严格单调;漂移不是匀速的——前 10 天吃掉 37%,前 20 天吃掉 58%;据此构建的多空组合 Sharpe 0.85、最大回撤 −7.6%,但样本后半段 alpha 腰斩,这与真实世界中 PEAD 2010 年代以来的拥挤化衰减一致。

一、把”惊喜”标准化:SUE#

PEAD 的自变量不是”盈利涨了多少”,而是”盈利比市场预期好多少”。一家公司利润翻倍,如果市场早就预期它翻倍,那就没有惊喜。标准做法是 SUE(Standardized Unexpected Earnings):

SUEi,q=Ei,qE^i,qσiSUE_{i,q} = \frac{E_{i,q} - \hat{E}_{i,q}}{\sigma_i}

分子是实际盈余减去预期盈余,分母是该股票历史盈余惊喜的标准差——除以 σ 是关键,它让”波动大的公司偏离 1 亿”和”稳定公司偏离 1 亿”不再被当成同等惊喜。预期盈余 E^\hat{E} 有两种口径:分析师一致预期(IBES 传统),或者时间序列模型(如季节性随机游走:预期本季 = 去年同季)。两种口径算出的 PEAD 都存在,但股票分组会有明显差异——这是后面要谈的第一个坑。

合成面板里我直接用 t 分布(自由度 5,厚尾)生成 SUE,然后让每个事件的价格路径包含三段结构——这三段就是 PEAD 的完整解剖图:

def simulate_path(sue, pre=10, horizon=60):
    r = np.zeros(pre + horizon + 1)
    # 1) 公告前:轻微信息泄露
    r[:pre] = rng.normal(0.0002 * np.sign(sue) * min(abs(sue), 2), 0.012, pre)
    # 2) 公告日跳空:立刻消化约 60% 的信息
    r[pre] = 0.018 * np.tanh(sue / 1.5) + rng.normal(0, 0.02)
    # 3) 公告后漂移:剩余信息在 60 日内按指数衰减慢消化
    total_drift = 0.028 * np.tanh(sue / 1.5)
    decay = np.exp(-np.arange(horizon) / 25.0)
    r[pre + 1:] = total_drift * decay / decay.sum() \
                  + rng.normal(0, 0.015, horizon)
    return r
python

tanh 做映射是刻意的:真实数据里漂移对 SUE 不是线性的,极端惊喜的边际效应递减——SUE 从 2 涨到 4,漂移不会翻倍。

二、事件研究:十个分组,一把扇子#

把 9600 个事件按 SUE 十分组,各组累计超额收益(CAR)从公告前 10 天画到公告后 60 天:

PEAD 事件研究:SUE 十分组的 CAR 在公告日跳空后继续沿原方向漂移 60 天

三个观察,每个都是 PEAD 的核心特征:

  1. 公告日跳空只完成了一部分定价。 D10 在公告日跳 +1.6% 左右,但之后 60 天又走了约 +2.3%——公告日只消化了六成信息,剩下四成靠市场慢慢嚼。
  2. 漂移方向与惊喜方向一致,且分组单调。 这不是”涨多了回调”的反转结构,而是”好消息继续涨”的动量结构。十个分组的终点几乎不交叉。
  3. 公告前有轻微的同向泄露。 D10 在公告前就微微上翘——分析师调研、渠道数据、管理层吹风,信息从来不是零点整准时出现的。

漂移的时间结构更值得盯着看:

漂移逐日衰减:多空价差前 20 天吃掉近六成,40 天后基本走平

左图是 D10−D1 的逐日价差(bp),右图是累计。T+10 完成 37%,T+20 完成 58%,T+40 完成 93%。 这个衰减结构直接决定策略参数:持有期设 60 天是在为最后 7% 的漂移支付 20 天的资金占用和风险敞口——多数从业者的选择是 20~40 天换仓。

三、动量还是反转?公告日反应告诉你#

一个常见的错觉是”财报大涨后该获利了结”。把公告日当天的超额收益和之后 60 天的累计收益画成散点:

公告日反应 vs 后续漂移:正相关,公告日大涨的股票之后继续涨

红线(20 分组均值)明确向上倾斜:公告日反应和后续漂移是正相关(相关系数约 0.07,分组均值线单调向上)。单个事件层面噪声极大(浅蓝散点几乎是一团雾),但横截面上”财报日大涨→之后继续涨”的结构清晰存在。这也是实务上最省事的 PEAD 代理变量:不算 SUE,直接用公告日跳空幅度分组,效果损失有限——市场自己已经帮你把惊喜翻译成价格了。

四、多空组合:能赚,但在变难#

策略规则:每次财报季,做多 SUE D10、做空 D1,公告后持有 60 日,等权:

PEAD 多空组合净值:Sharpe 0.85,但后半段 alpha 明显衰减

十年合成回测:多空组合年化 +5.3%、Sharpe 0.85、最大回撤 −7.6%,对比市场基准 Sharpe 0.77 但回撤 −34%——PEAD 多空的价值主要在于回撤结构,它是市场中性的,2018、2022 这类熊市里不跟着大盘挨打。但注意图中虚线之后:我刻意让后半段 alpha 衰减 55%,因为真实世界就是这样。Chordia 等 (2014) 记录了 PEAD 在流动性好的大盘股中基本消失;机器可读财报、NLP 电话会议解析普及后,“慢消化”的窗口被压缩得越来越窄。PEAD 还活着,但活在小盘、低关注度、高套利成本的角落里。

五、为什么价格不一步到位#

行为解释是主流:投资者对盈余信息反应不足(underreaction)。锚定效应让分析师上调预期的动作分好几次完成(财报后分析师修正本身就有漂移);有限注意力让同一天几百家公司发财报时,单个惊喜被稀释——Hirshleifer 的研究发现财报扎堆日的 PEAD 显著更强。理性派的抗辩是套利成本:漂移最强的股票恰恰是小盘、高波动、借券难的股票,看得见吃不着。两派吵了几十年,比较诚实的总结是:PEAD 的存在是行为偏差,PEAD 的存活是套利成本。

六、四类真实的坑#

1. SUE 口径依赖预期质量。 用分析师一致预期算 SUE,前提是覆盖该股票的分析师足够多、更新足够勤。小盘股往往只有一两个分析师、预期半年不更新,算出来的”惊喜”其实是”预期陈旧”。时间序列口径(去年同季)没有这个问题,但对成长拐点公司系统性失真。两种口径都算、取交集分组,是更稳的做法。

2. 财报窗口的跳空风险无法止损。 做空 D1 组的股票,如果下一份财报意外反转,隔夜跳空 +15% 是家常便饭——止损单在跳空面前是废纸。这要求仓位必须高度分散(单票 ≤1%),而分散又把你推向更小、交易成本更高的票。

3. 合成面板高估了可实现性。 我的合成数据里所有股票流动性相同、可以自由做空。真实 PEAD 集中在小盘股,多空各 80 只小盘票的组合,单边换手带来的冲击成本可以轻松吃掉每季 1% 以上;空头腿的借券费在负面惊喜股上尤其贵(想空的人多)。

4. A 股的”公告日”是一个区间。 A 股有业绩预告(强制+自愿)、业绩快报、正式年报三道披露,信息在 1~3 个月里分批出场。用正式财报日做事件研究,会发现”漂移”早在预告日就走完了大半。A 股 PEAD 研究必须以首次盈余信息披露日(多数是预告日)为 T0,否则测出来的不是慢消化,是自己起跑晚了。


本文使用自洽合成数据演示方法论,参数校准参考 Ball & Brown (1968)、Bernard & Thomas (1989)、Chordia et al. (2014) 的公开结果。实盘前请务必用真实财报数据与你所在市场的披露制度重新验证。

PEAD 盈余公告后漂移:财报惊喜的慢消化
https://blog.halo26812.eu.org/blog/pead-post-earnings-drift
Author halo
Published at 2026年7月26日
版权声明 CC BY-NC-SA 4.0
Comment seems to stuck. Try to refresh?✨