Experiments / expC_reversion_scan
expC_reversion_scan
Mean-reversion scan: variance ratios, half-life, AR tests net of the bounce null
View benchmark implementation (benchmark.py) →
Figures
Generated server-side from the latest committed results.json — never hand-typed.
Hypothesis
Hypothesis — expC_reversion_scan#
Pre-specified 2026-08-12 before the scan ran. New detectors (EDGE, BH-FDR,
bootstrap p) passed the §8.1 gate first (6 tests). Splits declared in
data/universe.py; scan runs on TRAIN (2000–2016) only.
Hypothesis
Tests H01 (liquid short-horizon reversion is zero net of bounce) and the
scan half of H02 (reversal decays across sub-periods). Expectation, from
the literature priors: raw AC1/VR will show heavy "reversion" that is
MOSTLY bounce; excess reversion (net of the independent EDGE spread null)
will be near zero for liquid names, possibly nonzero in 2000-2007 where
real short-horizon reversal was still documented, and should SHRINK from
the 2000-2007 to the 2008-2015 sub-period (decay).
Falsification criterion
H01 falsified if liquid-bucket excess reversion survives FDR(5%) with a
negative sign in 2008-2015 at any intraday horizon. The decay story is
falsified if excess reversion is STABLE or GROWING across sub-periods.
Artifact null(s)
T1 bounce via the EDGE spread measured from the SAME ticker-period's
DAILY OHLC bars (independent granularity — no AC1 circularity);
bounce-implied AC1 = -s²/4 / Var(r_timeframe). T2 handled by trade-time
returns (no LOCF) + min-data guards. Random-walk null via block bootstrap.
Method (grid pre-declared)
Universe: the expB 42 (12 liquid + seed-42 random 30). Period: TRAIN
2000-2016, sub-periods 2000-2007 / 2008-2015.
Timeframes: 1day, 30min, 5min for all tickers; 1min for the liquid 12 on
2014-2016 only (volume restriction, declared here).
Intraday returns: RTH bars only (09:30-16:00), within-day diffs of log
close, no overnight. Adjustment: adj_split everywhere.
Statistics per cell (ticker × timeframe × sub-period): n, AC1, VR(5),
VR(30), EDGE daily spread, bounce-implied AC1, excess AC1; moving-block
bootstrap (block = 1 day of bars, n_boot = 200, seed = 42) for CIs and
two-sided p-values (AC1_excess vs 0; VR vs 1). Half-life on daily closes.
Correction: BH-FDR at 5% within each statistic family, all cells jointly.
Cell count declared: ≤ (42×3×2 + 12) ≈ 264 per family.
Result
Run 20260812T062408Z (354 requests, 10.5M rows). 127 analyzable cells.
THE PRE-SPECIFIED BOUNCE NULL WAS MIS-SPECIFIED at intraday frequencies:
EDGE daily spread + pure-Roll alternation predicts AC1 of -3 to -27
(impossible; AC1 is bounded by [-1,1]) because consecutive intraday closes
do not flip sides every bar. Consequence: the excess-AC1 positive family
(90 "survivors") is an artifact OF THE NULL and is discarded. Corrected
triage (documented post-hoc null FIX, not a hypothesis expansion — see
LOG): MA(1)-consistent VR null, VR30_null = 1 + 2*AC1*(1-1/30); negative
excess = multi-lag reversion beyond ANY lag-1 effect (bounce included).
Triage output: 14 cells (FDR-vr30 AND excess < -0.05), incl. JPM 1min
2014-15 (-0.243), MSFT 5min 2000-07 (-0.108), XOM/NVDA 1min; daily
mega-cap/index reversal 2008-15 (XOM excess_AC1 -0.133, SPY -0.055, both
FDR; median 1day VR30 excess -0.12 to -0.16 across cells).
Interpretation
(Level 0 throughout.) H01 CONFIRMED at lag 1: zero liquid intraday
negative-excess survivors in 2008-2015. Multi-lag daily reversion in the
2008-2015 train block is the strongest triage signal (crisis-regime
index/mega-cap reversal — plausibly regime-bound). Decay clause PARTIALLY
FALSIFIED: median VR30 excess is flat at 5min (-0.027 vs -0.025) and only
mildly shrinking at 1day (-0.157 vs -0.122) across sub-periods — the
clean monotone-decay story does not hold inside train. Methodological
finding: spread-based bounce nulls must be variance-consistent; adopted
into taxonomy T1 and Phase-9 methodology.
Next experiment
expD (lead-lag scan) on the same universe/splits; survivors of C+D+E
meet the full correction battery in expF.Analysis
Analysis — expC_reversion_scan#
Run: results/expC_reversion_scan/20260812T062408Z/results.json (354
requests, 10.5M rows, manifest embedded; protocol pre-specified; detectors
§8.1-gated). All conclusions Level 0.
1. The scan's most valuable output is about the NULL#
The pre-specified bounce null (EDGE daily spread, pure Roll alternation,
-s²/4/Var(r)) predicts intraday AC1 of −3 to −27 — outside [−1, 1],
mathematically impossible. Diagnosis: the daily effective spread implies
far more bounce variance than 1–5min bar closes contain, because consecutive
intraday closes rarely flip bid/ask side (order-flow persistence). Lesson
(now taxonomy T1, methodology rule): a spread-based bounce null must be
variance-consistent with the return series it is applied to — otherwise
"excess" statistics are artifacts of the null itself. The 90 positive-excess
"survivors" are exactly that and are discarded.
2. Corrected triage — MA(1)-consistent VR null#
Bounce (any lag-1-only process) implies VR(q) = 1 + 2·AC1·(1−1/q). Negative
VR30 − VR30_MA1 = multi-lag reversion beyond ALL lag-1 effects — a
conservative null (it also absorbs any real lag-1 reversion). This
correction is a documented post-hoc null fix (LOG §12 entry), computed from
the same saved cells.
14 triage cells pass FDR(vr30) with excess < −0.05:
- Daily 2008–2015 mega-cap/index reversal — the broadest pattern: XOM AC1 −0.148 (excess_AC1 −0.133, FDR), JPM −0.104, SPY −0.079 (−0.055, FDR); median 1day VR30 excess −0.12/−0.16 across all cells. Consistent with crisis-regime multi-day reversal; likely regime-bound.
- 1min multi-lag reversion in 2014–2015 liquid names: JPM (−0.243), XOM (−0.075), NVDA (−0.061) — 30-minute-horizon reversion visible in 1min bars, not explained by lag-1 bounce.
- Scattered 5min/30min cells (MSFT 2000–07 −0.108; illiquid names where staleness (T2) remains a live confound).
3. Verdicts on the pre-registered clauses#
- H01 (liquid intraday lag-1 reversion = 0 net of bounce): CONFIRMED — zero liquid negative-excess survivors in 2008–2015 intraday. The expected-negative held.
- Decay clause: PARTIALLY FALSIFIED — median VR30 excess is flat at 5min across sub-periods and only mildly shrinking at 1day. Recorded as-is; the clean monotone decay narrative does not hold inside train.
4. Hand-off#
The 14 triage cells + the daily-reversal family go to expF (SPA vs artifact-null benchmark, DSR with the 22-hypothesis budget) and expH (validation split). Nothing here enters the atlas. expD should reuse the MA(1)-consistency lesson for its cross-correlation nulls.
README
expC_reversion_scan#
Mean-reversion scan: variance ratios, half-life, AR tests net of the bounce null
Status: completed 2026-08-12 — 127 cells, corrected triage: 14 multi-lag-reversion cells + daily 2008-15 reversal family -> expF. Key output: the bounce-null variance-consistency lesson (taxonomy T1).
Result runs
- 20260812T062408Z / results.json 88.7 KiB