01 The verdict in one screen
Four numbers that summarise 8.6 years of live event data across 1,000+ stocks.
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.
| Component | Definition |
|---|---|
| Signal — concordant | LONG: beat consensus and announcement-day return > 0 · SHORT: miss and return < 0 |
| Signal — magnitude | Surprise buckets: 0–2% / 2–5% / 5–10% / >10% of consensus EPS |
| Timing | BMO/AMC recovered from announcement timestamp (≤12:00 → BMO, ~16:00 → AMC) |
| Entry | Open of the session after the full reaction window (BMO: enter T+1 · AMC: enter T+2) |
| Exit | Close of the 60th trading day (Bernard & Thomas) |
| Execution models | Fixed-fraction (10% of initial, no compounding) + concurrent portfolio with daily MTM and a 100% gross-exposure cap |
| Costs | 0 / 10 / 20 / 50 bps round-trip sensitivity |
| Beta control | Every result is reported as a differential vs an equal-weight buy-and-hold benchmark of the same universe, with Welch t-tests |
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.
| Universe | Names | Resolvable events | Consensus source | Notes |
|---|---|---|---|---|
| US large-cap | 45 | 1,524 | Yahoo analyst estimates | Mega-caps: efficiently priced |
| US small/mid-cap | 37 | 1,231 | Yahoo analyst estimates | Where the edge first appeared (p = 0.002) |
| ASX large-cap | 13 | 173 | Time-series (YoY EPS) from results PDFs | No free keyless ASX consensus; pipeline works end-to-end |
| Russell 2000 (2016 PIT) | 909 with data | 26,674 | Yahoo analyst estimates | 1,909 listed; 862 since delisted → survivorship bias killed |
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 group | n | Avg 60d fwd | Diff vs baseline | p-value | Verdict |
|---|---|---|---|---|---|
| beat >10% (LONG) | 462 | +8.12% | +3.40pp | 0.0021 | Significant — the edge |
| beat 5–10% | 191 | +5.08% | +0.37pp | n.s. | Not significant |
| beat 2–5% | 164 | +1.02% | −3.70pp | n.s. | Not significant |
| beat 0–2% | 72 | +1.95% | −2.77pp | n.s. | Not significant |
| beat_up (concordant) | 503 | +4.90% | +0.18pp | 0.84 | Dead — no value added |
| miss_down (concordant short) | 188 | +1.54% | −3.18pp | 0.035 | Significant differential, poor economics |
US large caps (45 names) + ASX (13 names)
| Universe | Baseline /60d | beat_up diff | beat >10% diff | Verdict |
|---|---|---|---|---|
| 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%) |
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.
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)
| Hold | beat>10% long — total | beat>10% — PF | base_concordant — total | base_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 ADV | Events | Portfolio total | PF |
|---|---|---|---|
| none | 26,560 | +71.6% | 1.23 |
| $2M | 22,113 | +26.4% | 1.08 |
| $10M | 13,238 | −8.7% | 0.94 |
| $50M | 3,247 | +67.5% | 1.17 |
06 Key findings
- 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).
- 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.
- 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.
- 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.
- Costs are the binding constraint: the edge survives ~20bps round-trip and dies at 50bps. Only low-cost vehicles can express it.
- Best configuration found: 90-day hold, ≥$2M average daily volume, >10% EPS beat, long-only → +70.5%, PF 1.29 over 8.6 years.
- 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.
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.