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%
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