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%
3.5 KB · 79 lines markdown
Rendered Raw Blame History
1---2project: anomaly-atlas3document: expB_artifact_baselines/hypothesis4author: Simon-Pierre Boucher5contact: contact@spboucher.ai6data_source: hfmarketdata.io7created: 2026-08-128modified: 2026-08-129status: final10---1112# Hypothesis — expB_artifact_baselines1314*Pre-specified 2026-08-12, before any real-data measurement. Detectors passed15the §8.1 synthetic gate first (11 tests, benchmarks/synthetic/).*1617```text18Hypothesis19  The three mechanical artifacts identified in expA are MEASURABLE and20  MATERIAL in this dataset at 1-minute resolution:21  (i)   bid-ask bounce produces negative AC1 in 1min returns, larger for22        less liquid names (Roll-implied relative spread as the null level);23  (ii)  illiquid names are stale on a large fraction of RTH minutes;24  (iii) LOCF-gridding makes SPY spuriously "lead" stale tickers at +1 min,25        with the artifact magnitude increasing in staleness.2627Falsification criterion28  The experiment fails if the nulls are unusable as baselines: bounce AC129  indistinguishable from 0 across the liquidity spectrum (|median AC1| CI30  covering 0 for the bottom-liquidity tercile), or no monotone relation31  between staleness and the +1min SPY cross-correlation (Spearman rho <= 032  across tickers).3334Artifact null(s)35  This experiment BUILDS the artifact nulls; its own null is the synthetic36  ground truth (§8.1 gate) — detectors verified to read 0 on random walks.3738Method39  Universe (pre-specified): LIQUID = {AAPL MSFT NVDA AMZN GOOGL META TSLA40  JPM XOM UNH} + {SPY QQQ}; RANDOM = 30 tickers drawn from the full 1min41  stock ticker list with numpy seed 42 (deterministic given the cached42  list). Window: 2024-01-02 → 2024-04-01, RTH only (09:30 ≤ t < 16:00),43  adjustment adj_split, all data via hf_client (cached).44  Per ticker: staleness ratio on the 390-min RTH grid; trade-to-trade 1min45  log-return AC1 with moving-block bootstrap CI (block = 1 day, n=300,46  seed=42); Roll implied relative spread; VR(5), VR(30).47  Cross: lagged xcorr (±3 min, NaN-aware, day-boundary safe) of LOCF-grid48  returns vs SPY; SPX-vs-SPY as the index-staleness case.49  This is a DESCRIPTIVE measurement of artifact levels, not an anomaly50  claim: no OOS split; every number is Level 0 by construction.5152Result53  Run 20260812T055602Z (47 requests, 795 185 rows, 0 retries). 31/4254  tickers had enough data (>=30 days, >=2000 returns); 11 dropped, listed55  in results.json. Median by staleness tercile (staleness | AC1 | Roll rel56  spread | VR30 | SPY-leads-+1min):57    fresh  0.000 | -0.009 | 1.4 bp  | 0.972 | +0.00558    mid    0.107 | -0.051 | 3.8 bp  | 0.901 | +0.04759    stale  0.691 | -0.232 | 17.0 bp | 0.547 | +0.02160  Spearman(staleness, SPY-leads-+1) = +0.43 (> 0: monotone). Extreme case61  RITM.B: staleness 0.90, AC1 -0.253, VR30 0.35. Mega-caps: AC1 CI covers62  0 and the Roll estimator is undefined (positive autocov) — no measurable63  bounce at the top. SPX-vs-SPY: corr 0.965 at lag 0 and +0.065 with SPY64  leading by 1 min (index prints lag the tradable ETF).6566Interpretation67  Both falsification criteria FAILED to trigger: the nulls are usable.68  Headline: an uncorrected VR/AC1 scan on mid/low-liquidity names is69  DOMINATED by artifacts — VR30 of 0.55 and AC1 of -0.23 arise with no70  economic mean reversion whatsoever. All numbers Level 0 (descriptive71  null levels), as pre-specified. Magnitudes recorded in72  research/artifact_taxonomy.md.7374Next experiment75  expC (reversion scan) consumes these nulls: any reversion claim must76  exceed the bounce null for its liquidity bucket. Phase 1 literature77  sweep proceeds in parallel.78```79