SPB Git

spb/anomaly-atlas Public License

Systematic discovery & rigorous validation of statistical anomalies in open HF market data (hfmarketdata.io) — pre-registered, artifact-null-driven, fully reproducible. Live atlas: www.anomaly-atlas.io

Python 61.4% JavaScript 28.7% CSS 8.6% Shell 0.7% Makefile 0.5%
4.0 KB · 83 lines markdown
Rendered Raw Blame History
1---2project: anomaly-atlas3document: expC_reversion_scan/hypothesis4author: Simon-Pierre Boucher5contact: contact@spboucher.ai6data_source: hfmarketdata.io7created: 2026-08-128modified: 2026-08-129status: final10---1112# Hypothesis — expC_reversion_scan1314*Pre-specified 2026-08-12 before the scan ran. New detectors (EDGE, BH-FDR,15bootstrap p) passed the §8.1 gate first (6 tests). Splits declared in16`data/universe.py`; scan runs on TRAIN (2000–2016) only.*1718```text19Hypothesis20  Tests H01 (liquid short-horizon reversion is zero net of bounce) and the21  scan half of H02 (reversal decays across sub-periods). Expectation, from22  the literature priors: raw AC1/VR will show heavy "reversion" that is23  MOSTLY bounce; excess reversion (net of the independent EDGE spread null)24  will be near zero for liquid names, possibly nonzero in 2000-2007 where25  real short-horizon reversal was still documented, and should SHRINK from26  the 2000-2007 to the 2008-2015 sub-period (decay).2728Falsification criterion29  H01 falsified if liquid-bucket excess reversion survives FDR(5%) with a30  negative sign in 2008-2015 at any intraday horizon. The decay story is31  falsified if excess reversion is STABLE or GROWING across sub-periods.3233Artifact null(s)34  T1 bounce via the EDGE spread measured from the SAME ticker-period's35  DAILY OHLC bars (independent granularity — no AC1 circularity);36  bounce-implied AC1 = -s²/4 / Var(r_timeframe). T2 handled by trade-time37  returns (no LOCF) + min-data guards. Random-walk null via block bootstrap.3839Method (grid pre-declared)40  Universe: the expB 42 (12 liquid + seed-42 random 30). Period: TRAIN41  2000-2016, sub-periods 2000-2007 / 2008-2015.42  Timeframes: 1day, 30min, 5min for all tickers; 1min for the liquid 12 on43  2014-2016 only (volume restriction, declared here).44  Intraday returns: RTH bars only (09:30-16:00), within-day diffs of log45  close, no overnight. Adjustment: adj_split everywhere.46  Statistics per cell (ticker × timeframe × sub-period): n, AC1, VR(5),47  VR(30), EDGE daily spread, bounce-implied AC1, excess AC1; moving-block48  bootstrap (block = 1 day of bars, n_boot = 200, seed = 42) for CIs and49  two-sided p-values (AC1_excess vs 0; VR vs 1). Half-life on daily closes.50  Correction: BH-FDR at 5% within each statistic family, all cells jointly.51  Cell count declared: ≤ (42×3×2 + 12) ≈ 264 per family.5253Result54  Run 20260812T062408Z (354 requests, 10.5M rows). 127 analyzable cells.55  THE PRE-SPECIFIED BOUNCE NULL WAS MIS-SPECIFIED at intraday frequencies:56  EDGE daily spread + pure-Roll alternation predicts AC1 of -3 to -2757  (impossible; AC1 is bounded by [-1,1]) because consecutive intraday closes58  do not flip sides every bar. Consequence: the excess-AC1 positive family59  (90 "survivors") is an artifact OF THE NULL and is discarded. Corrected60  triage (documented post-hoc null FIX, not a hypothesis expansion — see61  LOG): MA(1)-consistent VR null, VR30_null = 1 + 2*AC1*(1-1/30); negative62  excess = multi-lag reversion beyond ANY lag-1 effect (bounce included).63  Triage output: 14 cells (FDR-vr30 AND excess < -0.05), incl. JPM 1min64  2014-15 (-0.243), MSFT 5min 2000-07 (-0.108), XOM/NVDA 1min; daily65  mega-cap/index reversal 2008-15 (XOM excess_AC1 -0.133, SPY -0.055, both66  FDR; median 1day VR30 excess -0.12 to -0.16 across cells).6768Interpretation69  (Level 0 throughout.) H01 CONFIRMED at lag 1: zero liquid intraday70  negative-excess survivors in 2008-2015. Multi-lag daily reversion in the71  2008-2015 train block is the strongest triage signal (crisis-regime72  index/mega-cap reversal — plausibly regime-bound). Decay clause PARTIALLY73  FALSIFIED: median VR30 excess is flat at 5min (-0.027 vs -0.025) and only74  mildly shrinking at 1day (-0.157 vs -0.122) across sub-periods — the75  clean monotone-decay story does not hold inside train. Methodological76  finding: spread-based bounce nulls must be variance-consistent; adopted77  into taxonomy T1 and Phase-9 methodology.7879Next experiment80  expD (lead-lag scan) on the same universe/splits; survivors of C+D+E81  meet the full correction battery in expF.82```83