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%

# project: anomaly-atlas document: expC_reversion_scan/hypothesis author: Simon-Pierre Boucher contact: contact@spboucher.ai data_source: hfmarketdata.io created: 2026-08-12 modified: 2026-08-12 status: final

# Hypothesis — expC_reversion_scan

Pre-specified 2026-08-12 before the scan ran. New detectors (EDGE, BH-FDR, bootstrap p) passed the §8.1 gate first (6 tests). Splits declared in data/universe.py; scan runs on TRAIN (2000–2016) only.

text
Hypothesis
  Tests H01 (liquid short-horizon reversion is zero net of bounce) and the
  scan half of H02 (reversal decays across sub-periods). Expectation, from
  the literature priors: raw AC1/VR will show heavy "reversion" that is
  MOSTLY bounce; excess reversion (net of the independent EDGE spread null)
  will be near zero for liquid names, possibly nonzero in 2000-2007 where
  real short-horizon reversal was still documented, and should SHRINK from
  the 2000-2007 to the 2008-2015 sub-period (decay).

Falsification criterion
  H01 falsified if liquid-bucket excess reversion survives FDR(5%) with a
  negative sign in 2008-2015 at any intraday horizon. The decay story is
  falsified if excess reversion is STABLE or GROWING across sub-periods.

Artifact null(s)
  T1 bounce via the EDGE spread measured from the SAME ticker-period's
  DAILY OHLC bars (independent granularity — no AC1 circularity);
  bounce-implied AC1 = -s²/4 / Var(r_timeframe). T2 handled by trade-time
  returns (no LOCF) + min-data guards. Random-walk null via block bootstrap.

Method (grid pre-declared)
  Universe: the expB 42 (12 liquid + seed-42 random 30). Period: TRAIN
  2000-2016, sub-periods 2000-2007 / 2008-2015.
  Timeframes: 1day, 30min, 5min for all tickers; 1min for the liquid 12 on
  2014-2016 only (volume restriction, declared here).
  Intraday returns: RTH bars only (09:30-16:00), within-day diffs of log
  close, no overnight. Adjustment: adj_split everywhere.
  Statistics per cell (ticker × timeframe × sub-period): n, AC1, VR(5),
  VR(30), EDGE daily spread, bounce-implied AC1, excess AC1; moving-block
  bootstrap (block = 1 day of bars, n_boot = 200, seed = 42) for CIs and
  two-sided p-values (AC1_excess vs 0; VR vs 1). Half-life on daily closes.
  Correction: BH-FDR at 5% within each statistic family, all cells jointly.
  Cell count declared: ≤ (42×3×2 + 12) ≈ 264 per family.

Result
  Run 20260812T062408Z (354 requests, 10.5M rows). 127 analyzable cells.
  THE PRE-SPECIFIED BOUNCE NULL WAS MIS-SPECIFIED at intraday frequencies:
  EDGE daily spread + pure-Roll alternation predicts AC1 of -3 to -27
  (impossible; AC1 is bounded by [-1,1]) because consecutive intraday closes
  do not flip sides every bar. Consequence: the excess-AC1 positive family
  (90 "survivors") is an artifact OF THE NULL and is discarded. Corrected
  triage (documented post-hoc null FIX, not a hypothesis expansion — see
  LOG): MA(1)-consistent VR null, VR30_null = 1 + 2*AC1*(1-1/30); negative
  excess = multi-lag reversion beyond ANY lag-1 effect (bounce included).
  Triage output: 14 cells (FDR-vr30 AND excess < -0.05), incl. JPM 1min
  2014-15 (-0.243), MSFT 5min 2000-07 (-0.108), XOM/NVDA 1min; daily
  mega-cap/index reversal 2008-15 (XOM excess_AC1 -0.133, SPY -0.055, both
  FDR; median 1day VR30 excess -0.12 to -0.16 across cells).

Interpretation
  (Level 0 throughout.) H01 CONFIRMED at lag 1: zero liquid intraday
  negative-excess survivors in 2008-2015. Multi-lag daily reversion in the
  2008-2015 train block is the strongest triage signal (crisis-regime
  index/mega-cap reversal — plausibly regime-bound). Decay clause PARTIALLY
  FALSIFIED: median VR30 excess is flat at 5min (-0.027 vs -0.025) and only
  mildly shrinking at 1day (-0.157 vs -0.122) across sub-periods — the
  clean monotone-decay story does not hold inside train. Methodological
  finding: spread-based bounce nulls must be variance-consistent; adopted
  into taxonomy T1 and Phase-9 methodology.

Next experiment
  expD (lead-lag scan) on the same universe/splits; survivors of C+D+E
  meet the full correction battery in expF.