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%
-
expH: validation ladder closes + first atlas entries + Publications tab
…
expH (validation 2016-2021, opened once; holdout stays sealed): - negative finding REPLICATES: 0 net survivors at full half-spread OOS - CKX fails pre-registered sub-period clause (kappa* 0.445->0.263) - ES->SPY flips sign OOS (+0.003, p=0.68) — regime-fragile - daily reversal family: VR30 excess -0.143 -> +0.023 (crisis-regime) - figure: alphas collapse OOS, the SPX staleness artifact persists Atlas (via new_finding.py, Level 2 each): - F001 nothing in the searched universe survives the full ladder - F002 SPX->SPY lead is index content staleness (Fisher), survives SPA Publications: new tab + P001 'The Artifact Frontier, Part I' — formal write-up of expA->expG with live {{figure:...}} tokens rendered from committed results.json Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> -
expG: cost frontier — the double-filtered pool dies at a fraction of the spread
…
- net = gross - kappa*(EDGE/2)*turnover swept over kappa in {0,.1,.25,.5,1,2} - median breakeven kappa* = 0.0114 (max 0.28): the median rule captures ~1% of one half-spread per trade; ES->SPY kappa*=0.0028 splice-invariant - survivors: 3 at kappa=0.1 (all sparse names), 1 at 0.25 (CKX 1day, skeptical prior), 0 at 0.5+; zero intraday at kappa=1 — pre-registered falsification did not trigger; three-layer doctrine closes - results sanitized (NaN -> null: Python json emits bare NaN, invalid for every other consumer); kappa* log-scale figure with cost reference lines Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> -
expF: survival battery — statistical correction is not artifact correction
…
- 372 signed rules from the full C/D/E searched space; funnel: 232 naive (62%) -> 226 FDR (61%) -> 68 SPA step-1 (18%), all GROSS - survivors carry absurd Sharpes (10-31 ann.): bounce harvesting + frictionless timing; the KNOWN SPX->SPY artifact passes SPA (canary) — artifact nulls, search correction and costs are all three required - expE calendar block: zero survivors (pipeline tripwire did not fire) - 12/14 artifact-adjusted expC triage cells + ES->SPY form the double-filtered pool for expG - new stats/spa.py (Politis-Romano bootstrap, White RC, Hansen SPA, StepM step-1, DSR) with 4-gate synthetic validation; funnel figure - 0 network requests: entire battery served by the frozen cache Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
fix: expE lint (semicolons) + duplicated Next-experiment block
…
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Web: server-rendered SVG figures from results.json (dataviz-validated)
…
- web/lib/charts.js: expB staleness scatters, expC VR30-excess strip plot (FDR emphasis), expD raw-vs-fresh dumbbells; palette validated (validate_palette.js all-pairs PASS on card surface), native tooltips, ink-token text, selective direct labels - figures injected on experiment pages + latest figure on home - rendered and eyeballed (rsvg): fixed tick-label collision Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>