Skip to content
Inconclusive

pead

Post-earnings announcement drift (buy EPS beats, hold 60d)

INCONCLUSIVE — not validatable on free data. It posts 9/11 on paper, but the placebo passes only at noise-level margin and the apparent drift is largely market beta in costume. A clean read needs paid IBES/Compustat earnings data.

Category
Event-driven
Window
In progress
Instruments
Timeframe
Tested
2026-06-25
2.20Profit factor
3.40Sharpe
-6.5%Max drawdown
205Trades
9/11Gates passed
PASSPlacebo

Gate scorecard — 9 / 11

auto-imported from results.json
#GateResultPass
01Minimum sample205 events
02Profit factor ≥ 1.20PF 2.200
03Sharpe ≥ 0.6Sharpe 3.40
04Max drawdown ≤ 12%MaxDD -6.5%
05Positive ≥ 60% of periods100% years positive ([2025, 2026])
06Bootstrap LB Sharpe > 02.5pct LB Sharpe 1.10
07Placebo beats p95real PF 2.200 vs random-stock placebo p95 2.103
082× cost stress PF > 1.02x-cost PF 2.175
09Deflated Sharpe positiveSR_hat 3.40 vs SR0 0.00, DSR=1.000
10No component > 40%max year share 77%
11Walk-forward OOS ≥ 0.9× ISIS PF 3.452 -> OOS PF 1.443

Date: 2026-06-25 Archetype: Post-Earnings Announcement Drift — buy EPS beats, hold 60 days Intended window: 2015–2025, S&P 500. Actual achievable window: ~2024-06 → 2026-05 (free-data ceiling). Bench: Python event engine, equal-weight, no-look-ahead.

Verdict (read this first)

INCONCLUSIVE — not validatable on free data. (Secondary read: VARIANT RETIRED — g7 passes only at noise-level margin, g10 and g11 fail.)

The strategy nominally clears 9/11 gates, but those passes are an artifact of a single bull-market regime, not evidence of an anomaly. The binding problem is not the strategy — it is that free data cannot test it:

  • yfinance.Ticker.get_earnings_history() is hard-capped at 4 quarters (~1 year) per ticker.
  • The richer .earnings_dates / get_earnings_dates paths require lxml, which is not installed (pip forbidden in this run) — and even with it, lookback is limited.
  • Every one of the 205 tradable events therefore lands in one ~12-month bull regime. There is no regime diversity, no down market, no decade of decay to measure.

This is a distinct failure class from the other archetypes: not “no edge proven” but “cannot be honestly tested on free data.”


1. Gate table — 9/11 PASS (but see the asterisks)

GateThresholdResultPass
g1 events≥100205
g2 PF net≥1.202.200✅*
g3 Sharpe≥0.63.40✅*
g4 Max DD≤12%−6.5%✅*
g5 years positive≥60%100% (only 2 years exist)✅*
g6 bootstrap LB Sharpe>0+1.10✅*
g7 placebo (KILL SHOT)real PF > p952.200 vs 2.103 (3.7% of placebos beat real)✅ (razor-thin)
g8 2× cost PF>1.02.175
g9 DSRSR_hat > SR03.40 vs 0.00✅*
g10 year concentration≤40%77% in one year
g11 walk-forwardOOS PF ≥0.9×ISIS 3.45 → OOS 1.44

* These “passes” are computed over a single bull regime and are not trustworthy out-of-sample.

2. The placebo tells the real story

The kill-shot placebo (buy a random same-week S&P reporter, matched count/timing, N=300) gives p95 = 2.103 against the real strategy’s PF 2.200 — a margin of 0.10, with 3.7% of random baskets beating the real signal. Read plainly: ~96% of the “drift” is holding-window market beta, not post-earnings selection alpha. The classic PEAD drift curve does rise (+5.9% over 60 days), but random same-week stocks captured nearly all of it. In a rising market, anything held 60 days drifts up.

3. Decay within the only window we have

Even inside the single regime, the signal decays:

Sub-periodPFn
Early (≤2025-10)3.45134
Late (>2025-10)1.4471

g11 fails on exactly this collapse (IS 3.45 → OOS 1.44). Consistent with the literature: PEAD is a real-but-declining anomaly, and what little we can see is already fading.

4. Data-sourcing section (brutally clear)

ItemReality on free data
Earnings surpriseyfinance get_earnings_history() JSON (epsActual / epsEstimate / surprisePercent)
LookbackHARD 4 quarters/ticker — the binding constraint; 2015–2025 impossible
Blocked APIs.earnings_dates needs lxml (not installed) → blocked
Guidance (“raised guidance” filter)No free source → NOT applied; signal reduced to EPS-beat >5% only (not fabricated)
Universe153 current large-caps → survivorship-biased → optimistic upper bound
Announcement dateApproximated as period_end + 28d (no timestamp in free JSON; no-look-ahead-safe)
Pricesyfinance auto-adjusted Open/Close, 2024–2026
Stooq fallback404 / rate-limited; not used
Events613 earnings rows / 153 tickers → 290 beats >5% → 205 tradable

5. Why this is the honest outcome

  • Not cost: PF 2.20 → 2.18 at 2× cost. Costs do not constrain it.
  • Not “tested and failed”: it was never testable. The 4-quarter cap confines the entire experiment to one regime, and in that regime the EPS-beat signal is statistically ~indistinguishable from random same-week reporters — beta in a costume.
  • g10/g11 fail precisely because there is only one regime: 77% of P&L in one year, OOS PF collapse.

6. What a real test would require (not free)

A point-in-time, survivorship-bias-free, multi-year (ideally 2005–2025) dataset with consensus EPS and management guidance — e.g. a paid vendor (Refinitiv/IBES, Zacks, FactSet, or a clean Compustat+IBES merge). Without that, PEAD stays out of scope for this free-data validation program. No v2 on free data.

7. Backtest-vs-live expectation delta

Moot — the backtest itself is not trustworthy. Even taken at face value, live would be worse: survivorship bias removed (the universe would include the de-listed and the crashed), the guidance filter unavailable, crowding/decay continuing, and 2024–26 was an unusually strong tape.


Files: PRE_REGISTRATION.md, results.json (metrics + per-gate + data manifest), universe.py, fetch_data.py, engine.py, gates.py, run.py, charts/{equity,drawdown,placebo,walkforward,drift_curve}.png.

Charts & evidence

pead — drawdown
pead — drift curve
pead — equity curve
pead — placebo distribution
pead — walk-forward

Frequently asked

Is pead profitable in 2026?

In this pre-registered backtest, pead returned a profit factor of 2.20 and passed 9/11 validation gates (placebo PASS). Verdict: INCONCLUSIVE. Every result is published, pass or fail.

Has pead been backtested honestly?

Yes — through The Validation Gauntlet, a pre-registered 11-gate framework (profit factor, deflated Sharpe, a random-permutation placebo, cost-stress and walk-forward) with the specification locked before any out-of-sample metric is computed.

Methodology: The Validation Gauntlet — pre-registered spec, 11-gate battery, real market data. Full reproducible report: backtests/pead/REPORT.md in the source repository. Author: Brent Akamine (Founder, Vinovest). Backtests are not investment advice.