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.6 KB · 78 lines markdown
Rendered Raw Blame History
1---2project: anomaly-atlas3document: expG_cost_frontier/hypothesis4author: Simon-Pierre Boucher5contact: contact@spboucher.ai6data_source: hfmarketdata.io7created: 2026-08-128modified: 2026-08-129status: final10---1112# Hypothesis — expG_cost_frontier1314*Pre-specified 2026-08-12 before the sweep ran.*1516```text17Hypothesis18  Tests H-family question Q5 on the expF double-filtered pool (the only19  rules that beat BOTH the artifact nulls and the search correction,20  gross): 12 reversion cells + ES->SPY + the expD 2014-2015 FDR lead-lag21  set. Prior (Novy-Marx-Velikov; Chen-Velikov): high-turnover short-horizon22  rules die well below realistic costs. Expectation: every intraday rule23  has breakeven cost multiplier kappa* << 0.25 (a quarter of the half24  spread — the patient-execution floor of Frazzini et al.); at most the25  1day cells are ambiguous.2627Falsification criterion28  The "costs kill short-horizon anomalies" story is falsified if ANY29  intraday rule from the pool survives kappa = 1 (paying the full30  half-spread per trade) with positive net mean.3132Artifact null(s)33  None new — this experiment IS the cost layer. The spread input is the34  EDGE estimate from daily OHLC of the TRADED instrument over the rule's35  own period (independent granularity, as in expC).3637Method (pre-declared)38  Pool: mechanical intersection recomputed from committed expC/expF/expD39  results (no hand-picking). Rule return streams rebuilt from the frozen40  cache exactly as in expF, now with per-day TURNOVER = sum |delta41  position| (entry included). Cost model: net_day = gross_day - kappa *42  half_spread * turnover_day, half_spread = EDGE/2 per (traded instrument,43  period). Sweep kappa in {0, 0.1, 0.25, 0.5, 1.0, 2.0}; for each rule44  report gross mean, turnover/day, half-spread (bp), net mean and its45  block-bootstrap t at each kappa, and the analytic breakeven46  kappa* = gross_mean / (half_spread * mean_turnover). Survivor counts at47  each kappa level; ES uses the same machinery with the futures caveat48  declared (cost structure differs; kappa* still reported).4950Result51  Run 20260812T072128Z (cache-served). Pool: 31 rules (12 reversion cells,52  16 lead-lag incl. ES x3 splices, sparse-name pairs). kappa* median =53  0.0114, max = 0.28 (all 31 defined after invalid-day filtering): at the MEDIAN the double-filtered survivors capture54  0.7% of one half-spread per trade. Survivors: kappa=0.1 -> 3 rules (all55  sparse-name: AXDX 30min, CKX 1day, HTD 5min); kappa=0.25 -> CKX 1day56  alone (kappa*=0.28); kappa=0.5 -> NONE; kappa=1.0 -> NONE. Zero intraday57  rules survive kappa=1 — the pre-registered falsification did NOT trigger.58  ES->SPY: kappa*=0.0028, identical across splices.5960Interpretation61  (Level 0.) The cost frontier does exactly what the literature priors62  said it would (Novy-Marx-Velikov; Chen-Velikov): everything that63  survived the artifact nulls AND the search correction dies at a fraction64  of realistic costs. The gross "profits" were spread capture one cannot65  buy. Q5's answer on this pool: the frontier sits at ~0.01-0.04 of a66  half-spread for intraday rules — an order of magnitude below even the67  most optimistic patient-execution assumptions. The single kappa=0.2568  survivor (CKX 1day, an ultra-sparse name with a wide, noisy EDGE69  estimate) is exactly the profile of a measurement artifact — it goes to70  expH's validation split with a strong skeptical prior rather than being71  discarded by hand.7273Next experiment74  expH: validation-split evaluation of whatever survives kappa >= 0.2575  (if anything); otherwise expH validates the negative finding and the76  atlas receives its first confidence-labeled entries.77```78