SYSTEMATIC EQUITY RESEARCH · 2018–2026 · NO LOOKAHEAD

Post-Earnings Announcement Drift —
is the reaction-day filter the edge,
or is it surprise magnitude?

A full walk-forward, cost-aware backtest of PEAD on US large caps, US small/mid caps and ASX, testing a YouTube-style “concordant” filter (beat + price rose / miss + price fell) against the academically-documented surprise-magnitude effect (Bernard & Thomas 1989; Livnat & Mendenhall 2006) — then a survivorship-bias-free expansion to the full Russell 2000.

Window 2018-01-01 → 2026-08-27 Universes 45 + 37 + 13 + 909 Events 27,564 resolvable Data Yahoo Finance + Market Index (free, keyless) Model concurrent portfolio, daily MTM

01 The verdict in one screen

Four numbers that summarise 8.6 years of live event data across 1,000+ stocks.

Magnitude edge (broad R2000)
+0.97pp /60d
LONG EPS beats ≥10% outpace the universe baseline 60 trading days out — p = 0.0001, n = 11,858. The real, significant PEAD edge.
Concordant filter (reaction-day)
−0.4pp to −44%
Filtering on announcement-day price direction adds nothing — and loses money at every holding period in the portfolio model (−45% at 30d).
Mega-caps & ASX
no edge
US large-caps and ASX large-caps are efficiently priced. Big compounded $ on large caps = leveraged beta, not drift.
Investability
≤20bps
Edge survives ~20bps round-trip costs; dies at 50bps. Realistic portfolio returns underperform equal-weight buy & hold (+799%).

02 Strategy & methodology

An event-driven backtest with strict point-in-time data handling. No lookahead: the reaction window only uses prices known before entry, and entry happens at the open of the session after the full reaction.

ComponentDefinition
Signal — concordantLONG: beat consensus and announcement-day return > 0 · SHORT: miss and return < 0
Signal — magnitudeSurprise buckets: 0–2% / 2–5% / 5–10% / >10% of consensus EPS
TimingBMO/AMC recovered from announcement timestamp (≤12:00 → BMO, ~16:00 → AMC)
EntryOpen of the session after the full reaction window (BMO: enter T+1 · AMC: enter T+2)
ExitClose of the 60th trading day (Bernard & Thomas)
Execution modelsFixed-fraction (10% of initial, no compounding) + concurrent portfolio with daily MTM and a 100% gross-exposure cap
Costs0 / 10 / 20 / 50 bps round-trip sensitivity
Beta controlEvery result is reported as a differential vs an equal-weight buy-and-hold benchmark of the same universe, with Welch t-tests
Why the differential matters: unconditional 60-day forward returns on US equities were +4.2% (large) and +4.7% (small) over 2018–2026 — that's just market beta. Every long rule compounds into huge fake $ numbers. The real signal is the per-event differential vs that baseline, with a p-value.

03 Universes & data

Three curated universes for the initial study, then a survivorship-bias-free expansion to the full point-in-time Russell 2000 for the follow-on.

UniverseNamesResolvable eventsConsensus sourceNotes
US large-cap451,524 Yahoo analyst estimatesMega-caps: efficiently priced
US small/mid-cap371,231 Yahoo analyst estimatesWhere the edge first appeared (p = 0.002)
ASX large-cap13173 Time-series (YoY EPS) from results PDFsNo free keyless ASX consensus; pipeline works end-to-end
Russell 2000 (2016 PIT)909 with data26,674 Yahoo analyst estimates1,909 listed; 862 since delisted → survivorship bias killed
1,909
Jan-2016 Russell 2000 constituents (point-in-time)
862
names delisted since — included, not dropped
909
tickers with price + earnings data
27,564
resolvable events in 2018–2026 (8.4× the original set)
Survivorship-bias kill: the R2000 expansion uses the Jan-2016 constituent list — a point-in-time snapshot that includes the 862 names that have since been acquired, delisted or gone bankrupt. A 2026 constituent list would silently bake in survivor bias and flatter every result.

04 Results — the edge analysis

60-trading-day forward returns vs the universe baseline. The concordant filter is tested head-to-head against surprise magnitude on every universe.

US small/mid caps (37 names) — where the edge first appeared

Signal groupnAvg 60d fwdDiff vs baselinep-valueVerdict
beat >10% (LONG)462+8.12%+3.40pp0.0021Significant — the edge
beat 5–10%191+5.08%+0.37ppn.s.Not significant
beat 2–5%164+1.02%−3.70ppn.s.Not significant
beat 0–2%72+1.95%−2.77ppn.s.Not significant
beat_up (concordant)503+4.90%+0.18pp0.84Dead — no value added
miss_down (concordant short)188+1.54%−3.18pp0.035Significant differential, poor economics

US large caps (45 names) + ASX (13 names)

UniverseBaseline /60dbeat_up diffbeat >10% diffVerdict
US large+4.21% +0.05pp (p=0.93) +1.38pp (p=0.073) No exploitable edge on mega-caps
ASX large+0.84pp beats n.s. No PEAD edge; every variant underperforms buy & hold (+104%)
Takeaway: the concordant reaction-day filter was never the source of the edge. On small caps, beats that fell on announcement day had higher forward returns than beats that rose (mean-reversion on the reaction day). The magnitude of the surprise is what matters.

05 The Russell 2000 expansion — does it survive at scale?

The headline question after the 37-name study: does the >10% beat edge hold on a broad, survivorship-bias-free universe? 909 tickers, 26,674 events — and a strict, realistic concurrent-portfolio model with a 100% gross-exposure cap.

+4.11%
avg 60d fwd for beat>10% (n=11,858)
+0.97pp
differential vs +3.14% baseline · t=3.96 · p=0.0001
−45% → −4%
base_concordant portfolio return range across holds
+70.5%
best realistic config: 90d hold · ≥$2M ADV · PF 1.29

Surprise magnitude is monotonic

Avg 60d forward return by EPS-surprise bucket (beat only, broad R2000).

Concordant filter destroys value

Portfolio model total return by holding period: beat>10% long vs base_concordant (incl. shorts).

Cost sensitivity — the edge's real capacity

Profit factor of the 60d · ≥$2M ADV beat>10% portfolio vs round-trip cost. Survives ~20bps, dies at 50bps.

Portfolio economics by holding period (100% gross cap, 10bps, ≥$2M ADV)

Holdbeat>10% long — totalbeat>10% — PFbase_concordant — totalbase_concordant — PF
30d+39.2%1.08−44.7%0.85
45d+42.6%1.11−4.0%0.96
60d+26.4%1.08−11.7%0.92
90d+70.5%1.29−23.0%0.90

Liquidity filter sweep (60d hold, beat>10%, 10bps)

Min ADVEventsPortfolio totalPF
none26,560+71.6%1.23
$2M22,113+26.4%1.08
$10M13,238−8.7%0.94
$50M3,247+67.5%1.17
Equity curve: beat>10% long vs equal-weight buy-and-hold benchmark, expanded Russell 2000
Equity ($100k start): beat>10% long portfolio (blue, 10bps) vs equal-weight buy & hold of the same universe (orange) and daily-rebalanced equal weight (green), 2018–2026. The differential is real — the absolute return is not competitive with just holding the universe.
The honest bottom line: the >10% beat edge is statistically real at scale (+0.97pp/60d, p=0.0001, monotone in magnitude) and the concordant filter still destroys value. But the per-event edge is ~3× thinner than on the curated 37-name set (+0.97pp vs +3.40pp — the broad universe's higher-beta baseline eats it), and realistic portfolio returns (+26% to +71% over 8.6y, PF 1.1–1.3) underperform just holding the equal-weight universe (+799%). Same lesson as ORB-on-perps and overnight-drift: a statistically real differential is not automatically an investable standalone edge.

06 Key findings

  1. The concordant filter (reaction-day direction) adds no value — and on small caps it hurts. Beats that fell on announcement day had higher forward returns than beats that rose (mean-reversion on the reaction day).
  2. The real, significant edge is surprise magnitude: LONG EPS beats ≥10% → +3.40pp/60d over baseline (p=0.002) on curated small caps, confirmed at +0.97pp/60d (p=0.0001) on the full Russell 2000. The classic Bernard–Thomas / Livnat–Mendenhall effect.
  3. Mega-caps (US + ASX) are efficiently priced — no edge, just leveraged beta. Any huge compounded dollar return on large caps is beta compounding, not drift.
  4. Shorting miss+down has a significant differential (−3.18pp, p=0.035) but poor absolute economics in a rising small-cap tape — a hedge, not a standalone book.
  5. Costs are the binding constraint: the edge survives ~20bps round-trip and dies at 50bps. Only low-cost vehicles can express it.
  6. Best configuration found: 90-day hold, ≥$2M average daily volume, >10% EPS beat, long-only → +70.5%, PF 1.29 over 8.6 years.
  7. Don't trade the transcript's concordant rule as-is. It systematically loses in the realistic portfolio model at every holding period.

07 Reproduce it

Everything is free-data, keyless and reproducible. Full pipeline, engine and results live in the pead_strategy/ workspace.

yfinance (Yahoo) — US prices + analyst consensus Market Index API — ASX announcements pypdf — ASX EPS extraction event-driven engine, no lookahead point-in-time Russell 2000 (Jan-2016) sequential + concurrent portfolio models Welch t-tests, cost sensitivity, beta control
Artifacts: src/backtest_engine.py (engine: fixed-fraction, capped portfolio, MTM asof), src/build_r2000_data.py / rebuild_r2000_data.py (data), src/run_r2000.py (edge analysis + sweeps), results/us_r2000_results.json (full JSON), results/trades_r2000_bigbeat_portfolio.csv (trade-by-trade). Full narrative: Research/StrategyBacktests/pead-post-earnings-announcement-drift.md in the companion vault.