New to these reports? Start here
  • Dotted-underlined words have a plain-English definition — hover or tap them. Every term is also on the glossary page.
  • "Null" means we found nothing, not that something broke. Most reports here are negative results, on purpose — knowing an idea doesn't work is the point.
  • Two questions get asked separately. First, is the effect real? Second, is it already priced into the betting odds? An effect can be completely real and still useless to bet on.
  • A "calibration" row is a self-check. It runs the same method on something already known to be true. If that fails, the whole report is unreliable — so it's reported alongside the findings.
  • If a confidence interval includes zero, the real effect might be nothing at all, so no claim gets made.

Strategy 003: Post-Earnings Announcement Drift (PEAD)

Source

Bernard & Thomas, Post-Earnings-Announcement Drift: Delayed Price Response or Risk Premium? (1989). Replicated and refined for ~40 years.

Thesis

Stocks that beat earnings estimates by a large margin continue to drift upward for ~60-90 days after the announcement. Stocks that miss materially drift downward over the same horizon.

Mechanism: investors underreact to fundamental news. The full price adjustment to the new information takes weeks, not the efficient-markets-instant-pricing seconds. Earnings surprises are a clean signal because the data is unambiguous and dated.

Formula

For each stock that just reported earnings: * Compute SUE = (EPS_actual - EPS_estimate) / |EPS_estimate| * If SUE > +0.05 (5%+ positive surprise) AND price moved up >= 2% on announcement day, enter long position at next day's open * Hold for 60 days * Exit at close on day 60 (or earlier on -8% stop)

Why it might still work in 2025

  • Documented since 1968, still exists in academic data through 2020
  • Mechanism (investor underreaction) is psychological — hard to fully arbitrage
  • Earnings season has many concurrent surprises — institutional bandwidth is finite

Why it might NOT work

  • Effect has shrunk over decades (Hou et al. 2020: shrunk by ~50% since 2000)
  • Algos and quant funds explicitly trade PEAD now
  • Transaction costs (5-7 trades per quarter per stock at hold/exit) eat thin edge
  • Earnings releases include forward guidance — the "surprise" we measure is backward-looking and may not capture forward signal

Implementation details

  • Universe: liquid_us (~150 US stocks)
  • Position: equal-weight up to MAX_POSITIONS concurrent
  • SUE threshold: 0.05 (5% positive surprise)
  • Confirmation: stock price moved up at least 2% on announcement day (filters out beats where market already disagreed)
  • Hold period: 60 calendar days
  • Stop loss: -8% from entry
  • Rebalance: event-driven (positions enter/exit asynchronously)

NOTE: Our signal_eval harness uses fixed-cadence rebalancing. For PEAD we approximate by rebalancing weekly and computing the "signals as of this week" as: all stocks where the most recent earnings was within last 60 days AND met entry criteria.

Data requirements

  • Earnings dates + EPS estimates + actuals (yfinance — sometimes flaky)
  • Daily prices

Expected outcome

Academic: top SUE-decile minus bottom SUE-decile spread of ~6%/yr. Long-only top decile: ~3-5%/yr alpha over market.

Modern (post-2010): probably +1-3%/yr if it works at all. The 2020-2024 period had unusual earnings-season dynamics (COVID, AI hype, hiring swings) that may distort recent results.

Pass/fail criteria

  • Pass: CAGR >= SPY + 1%, SharpeSharpe ratioReturn relative to how much it bounced around. Higher means smoother returns for the same profit. > 0.4
  • Marginal: CAGR within ±0.5% of SPY (diversifying signal but no alpha)
  • Fail: CAGR < SPY by more than 2%, OR fewer than 30 trades/year (insufficient signal volume to be useful)