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: expF_multiple_testing/analysis author: Simon-Pierre Boucher contact: contact@spboucher.ai data_source: hfmarketdata.io created: 2026-08-12 modified: 2026-08-12 status: reviewed

# Analysis — expF_multiple_testing

Run: results/expF_multiple_testing/20260812T072749Z/results.json. Battery: 372 signed rules (every cell/pair/class the C/D/E scans searched), 6 blocks, White RC + Hansen SPA (500 stationary bootstraps) + BH-FDR + DSR. RC/SPA/DSR §8.1-gated first. 0 network requests — the entire experiment ran from the frozen cache (the reproducibility anchor doing its job).

# The survival curve (charter result-type E) — gross, frictionless

layer survivors rate
universe (searched) 372 100 %
naive |t| > 1.96 232 62 %
BH-FDR 5 % 226 61 %
Hansen SPA step-1 68 18 %

# The headline is methodological

The SPA survivors carry annualized Sharpes of 10–31 — physically absurd, which is the charter-§12 red flag, and the diagnosis is clean:

  1. Statistical correction corrects for search, not for mechanism. A contrarian rule mechanically earns −autocov₁ > 0 on paper wherever bid-ask bounce exists — frictionless, that is "profit"; in reality it is the spread you would pay. SPA has no way to know that.
  2. The canary proves it: −L:SPX→SPY — the index-staleness artifact we know is fake (T3, measured twice) — survives SPA comfortably.
  3. The expE calendar block survives nothing anywhere (naive 0, SPA p 0.87): the pre-registered pipeline-broken tripwire did not fire.

Honest validation therefore requires ALL THREE independent layers — artifact nulls (the scans), search correction (this experiment), and costs (expG) — and no one of them substitutes for another. This goes into methodology.md as a design axiom, with this experiment as the demonstration.

# The double-filtered pool (artifact-adjusted ∩ search-corrected, gross)

12 of the 14 expC artifact-adjusted triage cells also clear SPA: AAPL/ATRO/BKE/HTD/ICUI/MSFT/SLF/XOM 5min, AXDX 30min, CKX 1day, JPM/NVDA 1min. Lead-lag: −L:ES→SPY (splice-invariant basis reversion) plus the expD 2014-2015 FDR residuals; −L:SPX→SPY is excluded from the tradable pool (routed to candidate 03 as the artifact demonstration). This pool — and nothing else — proceeds to expG.

# Caveats

In-sample by design (rules evaluated on the data that surfaced them; validation split untouched until expH). DSR values are reported per block but the bounce-driven Sharpe heterogeneity inflates sr0; treat them as universe diagnostics, not verdicts.