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%

Phases 2-4: state of the art, 22-hypothesis research gaps, candidate ranking

- state_of_the_art.md: 10 anomaly families (charter §5 template) with
  epistemic status; methods inventory with macOS arm64 availability
- research_gaps.md: H01-H22, each with constructable artifact null;
  multiple-testing budget declared (22) for expF
- candidate_ranking.md: 10-axis scoring; selected C01=H15 intraday momentum
  decay, C02=H13 turn-of-month, C03=H11+H03 index-artifact decomposition,
  C04=H10 crypto-weekend gap; reserve H09

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Simon-Pierre Boucher committed 4 h ago (Aug 12, 2026) parent 3df9755

Showing 7 changed files with +540 and −17

modified experiments/candidate_01/README.md +2 −2
@@ -10,6 +10,6 @@ status: draft
10 10
11 11 # candidate_01
12 12
13 Candidate 01 (selected in Phase 4 from research/candidate_ranking.md)
13 +H15 — Intraday momentum post-publication decay (Gao et al. 2018 spec frozen; 2018–2026 OOS; gamma-state proxy from options chains).
14 14
15 Status: scaffolded 2026-08-12, not yet run.
15 +Status: assigned 2026-08-12 (Phase 4); prototyping starts after expC–E scans.
modified experiments/candidate_02/README.md +2 −2
@@ -10,6 +10,6 @@ status: draft
10 10
11 11 # candidate_02
12 12
13 Candidate 02 (selected in Phase 4 from research/candidate_ranking.md)
13 +H13 — Turn-of-month 2006–2026: did the last calendar survivor (Marquering et al. 2006) survive? One pre-registered window (−1..+3), permuted-calendar null, SPA.
14 14
15 Status: scaffolded 2026-08-12, not yet run.
15 +Status: assigned 2026-08-12 (Phase 4); prototyping starts after expC–E scans.
modified experiments/candidate_03/README.md +2 −2
@@ -10,6 +10,6 @@ status: draft
10 10
11 11 # candidate_03
12 12
13 Candidate 03 (selected in Phase 4 from research/candidate_ranking.md)
13 +H11 + H03 — Index-artifact decomposition: SPX→SPY 1min lead as pure print-staleness, and the Fisher share of index VR momentum (SPX vs SPY divergence).
14 14
15 Status: scaffolded 2026-08-12, not yet run.
15 +Status: assigned 2026-08-12 (Phase 4); prototyping starts after expC–E scans.
modified research/LOG.md +21 −0
@@ -108,3 +108,24 @@ OHLC spread estimator for expG.
108 108 vs artifact nulls for Level 1 -> DSR with logged trial counts. Next: Phase 2
109 109 state-of-the-art map, then research_gaps (Phase 3). In parallel (user
110 110 request): major web platform upgrade (mobile + comments).
111 +
112 +## 2026-08-12 03:30 ET — Phases 2–4 complete: state of the art, 22 hypotheses, candidates selected
113 +
114 +**Question.** Given the verified literature and the measured artifact nulls,
115 +which hypotheses deserve prototyping?
116 +
117 +**Output.** state_of_the_art.md (10 anomaly families in the §5 template with
118 +epistemic status + methods/arm64 inventory); research_gaps.md (H01–H22, each
119 +with a constructable artifact null; MULTIPLE-TESTING BUDGET DECLARED: 22);
120 +candidate_ranking.md (10-axis scores).
121 +
122 +**Selected.** C01=H15 intraday-momentum post-2018 decay; C02=H13
123 +turn-of-month 2006–2026; C03=H11+H03 index-artifact decomposition (SPX/SPY
124 +staleness + Fisher VR share); C04=H10 crypto-weekend→Monday-gap (novelty
125 +pick). Reserve: H09. Controls H14/H20/H21 run inside the micro-experiment
126 +pipeline. Selection used priors + expA/expB artifact levels only — no
127 +real-data effect peeking.
128 +
129 +**Decision.** Next: expC–expE scans (consuming expB nulls), then expF
130 +correction with the declared 22-hypothesis budget. Candidate 04 requires
131 +crypto volume-semantics verification first (expA follow-up).
modified research/candidate_ranking.md +85 −4
@@ -5,10 +5,91 @@ author: Simon-Pierre Boucher
5 5 contact: contact@spboucher.ai
6 6 data_source: hfmarketdata.io
7 7 created: 2026-08-12
8 status: draft
8 +modified: 2026-08-12
9 +status: reviewed
9 10 ---
10 11
11 # Candidate ranking
12 +# Candidate ranking (Phase 4)
12 13
13 *Phase 4 output. Not yet written.* 10-axis scoring per CLAUDE.md §7;
14 3-5 candidates selected for prototyping.
14 +All 22 hypotheses from `research_gaps.md`, scored 1–10 per charter-§7 axis
15 +(10 = best). Axes: **T** testability on hfmarketdata.io · **N** cleanliness
16 +of the artifact null · **O** OOS feasibility · **M** multiple-testing
17 +discipline · **S** survival odds after costs (5 = n/a, structural claim) ·
18 +**V** novelty of the honest test · **R** reproducibility · **P** public-atlas
19 +value · **I** implementation simplicity · **D** safety against
20 +self-deception.
21 +
22 +| H | Hypothesis (short) | T | N | O | M | S | V | R | P | I | D | Σ |
23 +|---|---|--|--|--|--|--|--|--|--|--|--|---|
24 +| H15 | Intraday momentum post-2018 decay | 9 | 7 | 9 | 9 | 6 | 9 | 9 | 10 | 7 | 8 | **83** |
25 +| H11 | SPX→SPY lead = staleness artifact | 9 | 9 | 8 | 9 | 5 | 8 | 9 | 9 | 8 | 9 | **83** |
26 +| H13 | Turn-of-month survived 2006–2026 | 9 | 8 | 9 | 8 | 6 | 8 | 9 | 9 | 8 | 8 | **82** |
27 +| H03 | Index VR residual = Fisher share | 9 | 9 | 8 | 9 | 5 | 7 | 9 | 8 | 8 | 9 | **81** |
28 +| H16 | Overnight premium convention share | 9 | 9 | 8 | 9 | 5 | 7 | 9 | 8 | 8 | 9 | **81** |
29 +| H20 | Intraday artifact U-profile (input) | 9 | 9 | 8 | 9 | 5 | 6 | 9 | 8 | 8 | 10 | **81** |
30 +| H14 | Monday effect stays dead (control) | 9 | 9 | 9 | 9 | 5 | 4 | 9 | 7 | 9 | 10 | **80** |
31 +| H09 | ES→SPY ordering at the 1min floor | 8 | 8 | 8 | 9 | 5 | 8 | 9 | 8 | 7 | 8 | **78** |
32 +| H10 | Crypto weekend → Monday equity gap | 8 | 7 | 7 | 9 | 5 | 9 | 8 | 9 | 7 | 7 | **76** |
33 +| H21 | Vol persistence (positive control) | 9 | 9 | 9 | 9 | 5 | 3 | 9 | 6 | 7 | 10 | **76** |
34 +| H01 | Liquid 1–60min reversion = 0 net | 9 | 9 | 8 | 8 | 2 | 4 | 9 | 7 | 8 | 9 | **73** |
35 +| H08 | SPY→sector ETFs zero on fresh pairs | 9 | 8 | 8 | 8 | 3 | 5 | 9 | 6 | 8 | 9 | **73** |
36 +| H07 | Large→small decay + artifact share | 8 | 8 | 8 | 7 | 3 | 6 | 8 | 8 | 6 | 8 | **70** |
37 +| H05 | Crypto 1min reversion by maturity | 8 | 7 | 7 | 7 | 4 | 7 | 8 | 7 | 7 | 7 | **69** |
38 +| H17 | Crypto hour-of-week calendar | 8 | 8 | 8 | 5 | 4 | 7 | 8 | 7 | 7 | 5 | **67** |
39 +| H02 | Daily reversal decay curve | 8 | 7 | 8 | 7 | 2 | 5 | 8 | 7 | 6 | 7 | **65** |
40 +| H18 | Holiday effects are dead | 7 | 8 | 7 | 7 | 4 | 4 | 8 | 5 | 8 | 7 | **65** |
41 +| H12 | Options activity → next-day vol | 7 | 6 | 8 | 7 | 5 | 7 | 7 | 7 | 4 | 6 | **64** |
42 +| H22 | OpEx-week volume/vol patterns | 7 | 6 | 7 | 6 | 4 | 7 | 8 | 7 | 6 | 6 | **64** |
43 +| H19 | DST-transition distortions | 7 | 7 | 7 | 7 | 4 | 6 | 8 | 5 | 6 | 5 | **62** |
44 +| H04 | Post-jump 1min overreaction | 7 | 5 | 7 | 6 | 3 | 7 | 7 | 7 | 5 | 5 | **59** |
45 +| H06 | FX session-boundary reversion | 7 | 6 | 7 | 5 | 3 | 6 | 8 | 5 | 6 | 6 | **59** |
46 +
47 +## Selected for prototyping (charter: 3–5)
48 +
49 +**Candidate 01 — H15, intraday momentum post-publication decay** (Σ83).
50 +The single highest-information test: a famous published effect (Gao et al.
51 +2018) with a freezable specification, an untouched 2018–2026 out-of-sample
52 +window that only time could create, a mechanism proxy available in our
53 +options chains (Baltussen et al.), moderate cost exposure (2 trades/day in
54 +SPY), and near-zero researcher degrees of freedom. Every outcome —
55 +persistence, decay, or reversal — is a publishable McLean–Pontiff-style
56 +data point.
57 +
58 +**Candidate 02 — H13, turn-of-month 2006–2026** (Σ82). The last calendar
59 +survivor per Marquering et al. (2006), untested since on open data;
60 +low-frequency (12×/yr → real cost-survival chance), one pre-registered
61 +window, permuted-calendar null + SPA. Highest chance in the whole list of a
62 +genuine Level-3 finding — and a clean negative if dead.
63 +
64 +**Candidate 03 — H11 + H03, the index-artifact decomposition** (Σ83/81).
65 +One machinery, two published deliverables: prove the SPX→SPY 1min "lead" is
66 +pure print-staleness (result-type C/D: artifact demonstration), and quantify
67 +the Fisher share of index-level variance-ratio momentum. Cleanest nulls of
68 +the entire list; already seeded by expB (+0.065 measured).
69 +
70 +**Candidate 04 — H10, crypto-weekend → Monday equity gap** (Σ76, novelty
71 +pick). The one genuinely NEW question this dataset is structurally
72 +positioned to ask (24/7 crypto × equity session opens). Pre-registered
73 +exposed set {COIN, MSTR, RIOT, MARA, HUT} + placebo set + SPY-gap control +
74 +permuted-weekend null. Higher self-deception risk (selection, short joint
75 +history ~400 weekends) — ranked last of the selected four accordingly.
76 +
77 +**Reserve — H09** (ES→SPY at the 1min floor): promoted if a selected
78 +candidate dies early at the data layer.
79 +
80 +## Not selected (why, in one line each)
81 +
82 +Controls/inputs H14, H20, H21 run *inside* the micro-experiment pipeline
83 +(expE, expB/expG, framework) — they are mandatory, not candidates. H16
84 +(strong score) folds into candidate 03's convention machinery as a shared
85 +deliverable. H01/H08 are expected-negatives that expC/expD produce as scan
86 +output without candidate-level investment. H07/H02 are decay re-measurements
87 +scheduled after the scans (reuse candidate-03 machinery). H05/H17 (crypto)
88 +wait for volume-semantics verification (expA follow-up noted in the data
89 +profile). H12/H22 need the options ingestion layer (heavier implementation).
90 +H04/H06/H19 have the weakest nulls or lowest power — revisit only if the
91 +scans surface something.
92 +
93 +**Multiple-testing accounting:** selection made on *priors and design
94 +cleanliness*, not on any real-data effect sizes — no data peeking occurred
95 +beyond expA/expB artifact levels. The 22-hypothesis budget stands for expF.
modified research/research_gaps.md +194 −4
@@ -5,10 +5,200 @@ author: Simon-Pierre Boucher
5 5 contact: contact@spboucher.ai
6 6 data_source: hfmarketdata.io
7 7 created: 2026-08-12
8 status: draft
8 +modified: 2026-08-12
9 +status: reviewed
9 10 ---
10 11
11 # Research gaps
12 +# Research gaps (Phase 3) — 22 testable hypotheses
12 13
13 *Phase 3 output. Not yet written.* Target: >= 20 substantially different,
14 testable hypotheses, each with an explicitly constructable artifact null (CLAUDE.md §6).
14 +Each hypothesis: **(a)** what existing work shows, **(b)** what is untested
15 +on open HF data at this granularity, **(c)** why it matters, **(d)** plausible
16 +mechanism, **(e)** biggest artifact/statistical reason it would be fake,
17 +**(f)** smallest Mac-runnable falsifying experiment. Every hypothesis has an
18 +explicitly constructable artifact null (charter §6 requirement). Format
19 +compresses (a)–(f) into labeled lines.
20 +
21 +The hypothesis *count* here is the multiple-testing budget input for expF —
22 +expanding this list later requires a LOG entry and re-budgeting (§12).
23 +
24 +## Family R — Mean-reversion (Q1)
25 +
26 +### H01 — Liquid-name 1–60 min reversion is zero net of bounce
27 +(a) Chordia et al. 2005: arbitraged within minutes by 2005. (b) Never
28 +measured net of a *measured* bounce null on open 1min data 2000–2026.
29 +(c) Anchors the whole survival curve; expected-negative. (d) None expected —
30 +that is the point. (e) T1 bounce; T2 staleness. (f) VR/AC1 on 20 pre-specified
31 +liquid names × 4 sub-periods vs expB bucket nulls; falsified if excess
32 +reversion CI excludes 0 anywhere.
33 +
34 +### H02 — Daily individual-stock reversal decay curve 2000–2026
35 +(a) Lehmann/Jegadeesh gross reversal; Blume–Stambaugh: bounce halves it;
36 +McLean–Pontiff decay. (b) The *net-of-measured-bounce* decay path on open
37 +data. (c) Cleanest decay re-measurement. (d) Liquidity-provision compensation
38 +shrinking with spreads. (e) T1 (dominant), T4. (f) Weekly-rebalanced reversal
39 +deciles, both close conventions, net of EDGE spread; falsified (as decay
40 +story) if net effect is stable across sub-periods.
41 +
42 +### H03 — Index VR momentum has converged to 1; residual = Fisher artifact
43 +(a) Lo–MacKinlay VR>1 (1988); Fisher 1966 stale-index bias. (b) SPX-vs-SPY VR
44 +divergence as a direct artifact quantification. (c) Methodological: measures
45 +the Fisher share. (d) Stale index prints. (e) T2/T3 — deliberately the object
46 +of study. (f) VR(q∈{2,5,10,30}) on SPX vs SPY 1day+30min, 2008–2026; the
47 +artifact claim is falsified if SPX VR ≈ SPY VR.
48 +
49 +### H04 — Post-jump 1min overreaction reversal
50 +(a) Overreaction literature is daily+; intraday jump reversion is mostly HFT
51 +lore. (b) Reaction after >5σ 1min idiosyncratic moves on open data, net of
52 +bounce (jumps widen spreads — the null must be *conditional* on the jump).
53 +(c) Tests overreaction where attention is scarcest. (d) Liquidity vacuum then
54 +refill. (e) Conditional bounce inflation (spread doubles at jumps → mechanical
55 +reversal). (f) Event study on pre-specified jump definition, conditional Roll
56 +null from post-jump spread estimates; ±CI on excess reversal.
57 +
58 +### H05 — Crypto 1min reversion (no auction, 24/7, younger market)
59 +(a) Crypto microstructure literature is thin and exchange-specific. (b) Open
60 +1min BTC/ETH reversion with a constructable bounce null, 2013–2026 maturity
61 +sweep. (c) Tests the "young markets are less efficient" prior cleanly.
62 +(d) Retail flow + fragmented liquidity. (e) T1 (vendor aggregation may smooth
63 +prints); volume field semantics unverified. (f) Same battery as H01 on
64 +BTC/ETH/top-10, by year; falsified if excess reversion ≈ 0 across all years.
65 +
66 +### H06 — FX 1min reversion at session boundaries
67 +(a) FX microstructure well-studied on proprietary data. (b) Open 1min FX
68 +around the 17:00 ET roll and fixings. (c) Session-boundary liquidity is a
69 +mechanism magnet. (d) Dealer inventory at rollover. (e) T7 session semantics;
70 +sparse Sunday bars (expA: single 00:xx bar). (f) AC1/VR by hour-of-week grid
71 +(pre-counted), permuted hour-labels null.
72 +
73 +## Family L — Lead-lag (Q2)
74 +
75 +### H07 — Large→small lead-lag: decay + artifact share
76 +(a) Lo–MacKinlay 1990; Scholes–Williams artifact. (b) Joint decay curve AND
77 +staleness-share decomposition on open data 2000–2026. (c) Settles how much of
78 +a textbook effect was ever real. (d) Slow information diffusion. (e) T3 —
79 +measured in expB (+0.047 mid-tercile). (f) Size-decile xcorr on both-fresh
80 +subsamples vs staleness-matched null, per sub-period.
81 +
82 +### H08 — SPY → sector ETFs at 1min is zero on fresh pairs
83 +(a) Index→constituent diffusion literature (daily, older). (b) ETF↔ETF at
84 +1min on open data. (c) Expected-negative control extending H07 to the most
85 +liquid pairs. (d) None expected. (e) T3 residual staleness in low-volume
86 +sector ETFs. (f) xcorr SPY↔{XLF,XLE,XLK,…} both-fresh, staleness null;
87 +falsified if any |lead| beats null after FDR.
88 +
89 +### H09 — ES futures → SPY at 1min: does any ordering survive the floor?
90 +(a) Sub-second futures lead is established (proprietary data). (b) Whether
91 +ANY of it is visible at the 1min floor on open data, and whether the futures
92 +splice variant changes the answer. (c) Structural price-discovery question
93 +our data can just barely reach. (d) Futures-first discovery. (e) T3/T7
94 +session mismatch; splice artifacts (3 variants = built-in robustness check).
95 +(f) ES↔SPY xcorr 09:31–15:59 both-fresh, all 3 adjustments, sub-periods
96 +2008–2026.
97 +
98 +### H10 — Crypto weekend return predicts Monday open gap of crypto-exposed equities
99 +(a) Effectively untested on open data; related overnight-information papers.
100 +(b) The full 24/7→session-open information relay. (c) One of the few genuinely
101 +NEW questions this dataset can pose. (d) Equity prices cannot move while
102 +crypto does. (e) Selection of "exposed" set post-hoc (must pre-register:
103 +e.g. COIN, MSTR, RIOT, MARA, HUT + placebo set); overlapping market-wide
104 +weekend news (control: SPY gap). (f) Regress Monday open gap on BTC weekend
105 +return vs placebo set + permuted-weekend null; ~400 weekends.
106 +
107 +### H11 — SPX→SPY "lead" is 100 % staleness artifact
108 +(a) Fisher 1966. (b) Direct decomposition at 1min on open data (expB seed:
109 ++0.065). (c) Publishable artifact demonstration (charter result-type C/D).
110 +(d) Index print lag. (e) None — the artifact IS the claim. (f) Show the lead
111 +disappears when SPX grid is lagged by its print-latency estimate; falsified
112 +if a residual lead survives the correction.
113 +
114 +### H12 — Daily options-chain activity → next-day underlying volatility
115 +(a) Options volume→volatility literature (mixed, mostly intraday quotes).
116 +(b) With *daily* chains only: does aggregate chain volume/OI change add to a
117 +HAR-RV vol forecast? (c) Uses the dataset's unique options depth; forecasting
118 +vol (not returns) dodges the efficiency prior. (d) Informed vol trading.
119 +(e) Mechanical volume–vol contemporaneity (must be strictly lagged);
120 +HAR benchmark must be strong. (f) HAR-RV ± options features, Diebold–Mariano
121 +with block bootstrap, pre-2020 train / post-2020 validation.
122 +
123 +## Family C — Calendar (Q3)
124 +
125 +### H13 — Turn-of-month survived 2006–2026
126 +(a) Ariel; Lakonishok–Smidt; Marquering et al.: last survivor as of 2006.
127 +(b) Its post-2006 fate on open data. (c) THE calendar re-test. (d) Pension/
128 +payroll flows. (e) Calendar p-hacking (window choice) — ONE pre-registered
129 +window (−1..+3); OpEx overlap. (f) SPY daily 2000–2026, permuted-calendar
130 +null, SPA vs full window universe, sub-periods.
131 +
132 +### H14 — Monday effect stays dead (negative control)
133 +(a) French 1980; decayed per Schwert/Marquering. (b) 2000–2026 open-data
134 +confirmation. (c) Calibrates the calendar pipeline on a known corpse — if we
135 +"find" it, the pipeline is broken. (d) None. (e) T4/T7 conventions. (f)
136 +Day-of-week means + permuted null; expected inside null bands.
137 +
138 +### H15 — Intraday momentum (Gao) post-publication decay
139 +(a) Gao et al. 2018 (in-sample 1993–2013); Baltussen 2021 mechanism. (b) The
140 +2018–2026 out-of-sample fate — untouched by the original authors, perfectly
141 +measurable here. (c) Textbook McLean–Pontiff test at intraday scale. (d)
142 +Gamma hedging → should persist when dealer gamma is short. (e) Overnight-gap
143 +spec choice; U-shape spread costs at both trade times. (f) Frozen published
144 +spec on SPY 30min bars, split pre/post-2018, gamma-state proxy from our
145 +options chains; DSR-corrected.
146 +
147 +### H16 — Overnight premium is (partly) a close-convention artifact
148 +(a) Overnight-vs-intraday split literature. (b) Sensitivity of the premium to
149 +close/open conventions quantifiable with both series (T4: 8bp/day discrepancy
150 +seed). (c) Convention share of a famous stylized fact. (d) Auction dynamics.
151 +(e) The artifact is the object. (f) Recompute premium under 4 convention
152 +combos on 20 liquid names + SPY; report the spread of estimates.
153 +
154 +### H17 — Crypto "weekend effect" with permuted-calendar null
155 +(a) Anecdotal/thin literature. (b) Systematic day-of-week/hour-of-week on
156 +open 24/7 1min data 2013–2026 with honest correction. (c) Only market with
157 +no session artifacts — the cleanest calendar laboratory. (d) Retail weekend
158 +flow. (e) Pure MT risk (168-hour grid!) — strict pre-count + FDR + SPA.
159 +(f) Hour-of-week grid on BTC/ETH, permuted labels, FDR; survivors → SPA.
160 +
161 +### H18 — Holiday-adjacent effects are dead
162 +(a) Lakonishok–Smidt documented; decayed per Marquering. (b) 2000–2026
163 +confirmation, pre-holiday and post-holiday, exchange calendar from data
164 +gaps. (c) Completes the calendar corpse count. (d) None expected. (e) Small-n
165 +(≈9 holidays/yr) → low power, wide CIs; report power explicitly. (f) Event
166 +windows vs permuted-date null.
167 +
168 +### H19 — DST-transition week distortions
169 +(a) Sparse literature (sleep/mood papers, disputed). (b) At 1min: does the
170 +hour-of-day return/vol profile mis-align in DST weeks (a T7 check that could
171 +also be a mild real effect)? (c) Doubles as a data-integrity test. (d)
172 +Clock-relative order flow. (e) OUR OWN timestamp handling (T7) — the test
173 +must first prove the pipeline handles DST. (f) Compare DST-week intraday
174 +profiles vs adjacent weeks, permuted-week null.
175 +
176 +## Family V — Volatility & structure (supporting)
177 +
178 +### H20 — Intraday bounce/staleness profile (U-shape of the artifact)
179 +(a) Wood et al. U-shape. (b) The intraday profile of OUR bounce null —
180 +taxonomy open item. (c) Input required by expE/expG; positive control.
181 +(d) Known microstructure. (e) None. (f) Roll/EDGE spread by half-hour bucket
182 +on the expB universe.
183 +
184 +### H21 — Realized-vol persistence (positive control)
185 +(a) HAR-RV: overwhelming evidence of vol persistence. (b) n/a — we USE it as
186 +the pipeline's positive control: a detector that misses vol persistence is
187 +broken. (c) Guards against over-aggressive nulls (Type II). (d) Volatility
188 +clustering. (e) Noise-biased RV (use 5min subsampling per Zhang et al.).
189 +(f) HAR-RV R² on SPY must be strongly positive OOS; failure = pipeline bug.
190 +
191 +### H22 — OpEx-week patterns in volume/vol (options-expiration calendar)
192 +(a) Practitioner lore + some evidence on pinning. (b) With actual expiration
193 +calendars from our chains: volume/vol/return patterns on OpEx Fridays vs
194 +matched Fridays. (c) Mechanism-rich calendar effect with a natural control
195 +group. (d) Hedge unwinds. (e) Confound with turn-of-month (H13) and
196 +quarter-end — joint design needed. (f) OpEx vs non-OpEx Friday panel,
197 +permuted-Friday null.
198 +
199 +---
200 +
201 +**Budget declared: 22 hypotheses** (+ their pre-specified parameter grids,
202 +enumerated in each experiment's hypothesis.md). Preference for prototyping
203 +goes to hypotheses with the cleanest nulls and highest information value per
204 +CPU-hour (Phase 4 ranking → `candidate_ranking.md`).
modified research/state_of_the_art.md +234 −3
@@ -5,9 +5,240 @@ author: Simon-Pierre Boucher
5 5 contact: contact@spboucher.ai
6 6 data_source: hfmarketdata.io
7 7 created: 2026-08-12
8 status: draft
8 +modified: 2026-08-12
9 +status: reviewed
9 10 ---
10 11
11 # State of the art
12 +# State of the art (Phase 2)
12 13
13 *Phase 2 output. Not yet written.* Per-anomaly template in CLAUDE.md §5.
14 +Critical map of each anomaly family and method, in the charter §5 template.
15 +Sources: `research/bibliography.md` (52 verified references, accessed
16 +2026-08-12); dataset facts: `research/data_source_profile.md`; measured
17 +artifact levels: `research/artifact_taxonomy.md` (T1–T7).
18 +
19 +**Epistemic status legend:** robust / decayed / disputed / likely-artifact.
20 +
21 +---
22 +
23 +## A1 — Short-horizon individual-stock reversal
24 +
25 +- **What it claims.** Individual stock returns revert at daily–monthly
26 + horizons (Lehmann 1990 weekly; Jegadeesh 1990 monthly).
27 +- **Granularity required.** Daily suffices; our 1min adds the ability to
28 + separate close-convention effects. ✅ testable.
29 +- **Known artifact confounds.** Bid-ask bounce (T1 — Blume–Stambaugh showed
30 + it halves such effects), stale prices (T2), auction-close mismatch (T4).
31 +- **Decay evidence.** McLean–Pontiff −58 % post-publication; Chordia et al.
32 + 2014 attenuation with liquidity. Largely gone in liquid U.S. names.
33 +- **Correct test.** Cross-sectional reversal portfolios with bounce-robust
34 + prices + VR/AC1 net of the liquidity-bucket bounce null; block-bootstrap
35 + CIs (assumes stationarity within blocks).
36 +- **Multiple-testing exposure.** Moderate: horizon × universe × weighting
37 + grid. Pre-specify or FDR-correct.
38 +- **Cost sensitivity.** Extreme — highest-turnover class; Novy-Marx–Velikov
39 + prior: dies net of costs.
40 +- **Open-source impl.** Our own `stats/reversion.py` (gated §8.1); arch's
41 + `VarianceRatio` as cross-check — both build on macOS arm64. ✅
42 +- **Main limitation.** Without quote data, bounce correction is estimated,
43 + not measured.
44 +- **Honest new test here.** A 2000–2026 *decay curve* of daily reversal net
45 + of the measured bounce null, by liquidity bucket — a decay re-measurement,
46 + not a discovery claim. **Status: decayed (gross); likely-artifact (net).**
47 +
48 +## A2 — Index/portfolio variance-ratio momentum
49 +
50 +- **Claims.** Weekly index returns positively autocorrelated, VR(q) > 1
51 + (Lo–MacKinlay 1988).
52 +- **Granularity.** Daily/weekly from our 1day bars (2000→) and intradaily
53 + aggregation. ✅
54 +- **Confounds.** Fisher stale-constituent effect (T2/T3) inflated early
55 + index autocorrelation; largely gone in ETF prices (SPY trades fresh).
56 +- **Decay.** The classic effect faded post-1990s; on ETFs (traded prices,
57 + not stale indices) it was always weaker.
58 +- **Correct test.** Lo–MacKinlay VR with heteroskedasticity-robust CIs /
59 + block bootstrap; on BOTH the index (SPX) and the ETF (SPY) — divergence
60 + measures the Fisher artifact directly.
61 +- **MT exposure.** Low if q-grid pre-specified (q ∈ {2,5,10,30}).
62 +- **Cost sensitivity.** n/a as stated (it's a statistical property claim).
63 +- **Impl.** Ours + arch. ✅
64 +- **Limitation.** Regime breaks (2008, 2020) dominate long windows —
65 + Bai–Perron sub-periods mandatory.
66 +- **Honest new test.** SPX-vs-SPY VR divergence as a *quantified Fisher
67 + artifact* 2008–2026 — methodological contribution. **Status: decayed;
68 + index-level residual = likely-artifact.**
69 +
70 +## A3 — Lead-lag: large caps → small caps
71 +
72 +- **Claims.** Returns of large stocks lead small stocks (Lo–MacKinlay 1990);
73 + the source of "contrarian" profits.
74 +- **Granularity.** Daily and 1min both usable. ✅
75 +- **Confounds.** Non-synchronous trading (T3) — THE canonical confound
76 + (Scholes–Williams); our expB measured SPY spuriously leading stale names
77 + +0.047 at 1min.
78 +- **Decay.** Chordia–Roll–Subrahmanyam: minute-scale predictability
79 + arbitraged within 5–60 min by 2005; expect near-zero today in fresh pairs.
80 +- **Correct test.** Lagged cross-correlation/Granger ONLY on both-fresh
81 + subsamples, against the staleness-matched null (expB machinery);
82 + Epps-aware at 1min.
83 +- **MT exposure.** High (pairs explosion) — pre-specify a small pair set.
84 +- **Cost sensitivity.** Extreme for any tradable interpretation.
85 +- **Impl.** Ours (`stats/leadlag.py`, gated). ✅
86 +- **Limitation.** No trade timestamps within the bar; sub-minute lead-lag
87 + invisible.
88 +- **Honest new test.** Decay curve of large→small lead-lag 2000–2026 net of
89 + the staleness null — with the *artifact share* reported alongside the
90 + total. **Status: decayed (fresh pairs); the textbook effect is largely T3
91 + artifact in modern data.**
92 +
93 +## A4 — Futures/ETF/index lead-lag (price-discovery ordering)
94 +
95 +- **Claims.** Futures (ES) lead cash ETFs (SPY) which lead the index print
96 + (SPX) at minute scale.
97 +- **Granularity.** 1min is coarse for this (the true lead is seconds) but
98 + the *ordering* may still be detectable. ⚠️ marginal.
99 +- **Confounds.** T3/T7 (session semantics, index staleness — expB measured
100 + SPX lagging SPY +0.065); futures splice choice (3 variants — testable).
101 +- **Decay.** At seconds-scale this is permanent structure; at 1min it may be
102 + fully arbitraged/invisible.
103 +- **Correct test.** Both-fresh 1min xcorr ES↔SPY with staleness null;
104 + robustness across the three futures adjustment variants.
105 +- **MT exposure.** Low (one pre-specified triple).
106 +- **Cost sensitivity.** n/a (structural claim, not a strategy).
107 +- **Impl.** Ours. ✅
108 +- **Limitation.** 1min floor; ES data starts 2008.
109 +- **Honest new test.** Is ANY ES→SPY lead detectable at 1min after the
110 + staleness null, and is SPX→anything pure artifact? **Status: robust at
111 + sub-second (literature); unknown at 1min on open data — genuine gap.**
112 +
113 +## A5 — Cross-asset information flow: crypto ↔ crypto-exposed equities
114 +
115 +- **Claims.** (Thin literature.) 24/7 crypto prices embed information that
116 + equity prices can only reflect at the next open.
117 +- **Granularity.** 1min crypto (24/7) + equity opens. ✅ — this is a
118 + *structural* granularity advantage of our dataset.
119 +- **Confounds.** Overnight-gap conventions (T4), selection of "exposed"
120 + equities (must be pre-specified), regime dependence (crypto-equity beta
121 + varies).
122 +- **Decay.** Unknown — modern, underexplored on open data.
123 +- **Correct test.** Does BTC's Friday-close→Monday-preopen return predict
124 + the Monday opening gap of pre-specified crypto-exposed equities, vs a
125 + placebo set and a permuted-weekend null?
126 +- **MT exposure.** Low if the equity set and horizon are pre-registered.
127 +- **Cost sensitivity.** Open-auction execution is costly; report the
128 + frontier.
129 +- **Impl.** Ours. ✅
130 +- **Limitation.** Short joint history (crypto-exposed equities mostly
131 + 2018→); few independent weekends (~400).
132 +- **Honest new test.** Exactly the above — one of the few places our data
133 + can ask something not already answered. **Status: unknown/genuine gap.**
134 +
135 +## A6 — Weekend / Monday effect
136 +
137 +- **Claims.** Negative Monday returns (French 1980).
138 +- **Granularity.** Daily. ✅
139 +- **Confounds.** Close conventions (T4); DST weeks (T7).
140 +- **Decay.** The cleanest corpse: gone post-publication (Schwert 2003;
141 + Marquering et al. 2006).
142 +- **Correct test.** Day-of-week means with permuted-calendar null + SPA
143 + against the full day-of-week universe (STW 2001 protocol).
144 +- **MT exposure.** High by construction — the calendar space.
145 +- **Cost sensitivity.** Any exploitation is high-turnover.
146 +- **Impl.** Ours. ✅
147 +- **Honest new test.** Re-confirmation of absence on 2000–2026 open data,
148 + published as a **negative control** for the calendar pipeline.
149 + **Status: decayed.**
150 +
151 +## A7 — Turn-of-month
152 +
153 +- **Claims.** Returns concentrate around month boundaries (Ariel 1987;
154 + Lakonishok–Smidt 1988).
155 +- **Granularity.** Daily. ✅
156 +- **Confounds.** Month-boundary volume/flows are real mechanics
157 + (pension/401k flows) — a *mechanism*, not an artifact; but overlap with
158 + OpEx week and quarter-ends must be disentangled.
159 +- **Decay.** The last survivor as of Marquering et al. 2006. Post-2006
160 + behavior on open data = open question.
161 +- **Correct test.** Pre-specified window (−1..+3 trading days), permuted-
162 + calendar null, SPA vs the full window universe, sub-period stability.
163 +- **MT exposure.** Moderate — window choice is the researcher degree of
164 + freedom; pre-register ONE window.
165 +- **Cost sensitivity.** Low-frequency (12×/year) — the rare calendar effect
166 + that could survive costs if real.
167 +- **Impl.** Ours. ✅
168 +- **Honest new test.** Did the last survivor survive 2006–2026?
169 + **Status: disputed — the most interesting calendar re-test.**
170 +
171 +## A8 — Intraday momentum (first → last half-hour)
172 +
173 +- **Claims.** First half-hour market return predicts last half-hour (Gao et
174 + al. 2018); mechanism: gamma hedging (Baltussen et al. 2021).
175 +- **Granularity.** 1min/30min SPY. ✅ perfect fit.
176 +- **Confounds.** Overnight-gap inclusion choice; T4 close convention; spread
177 + seasonality (U-shape) at both ends of the day.
178 +- **Decay.** Published 2018 — post-publication window (2018–2026) is exactly
179 + what open data can measure now.
180 +- **Correct test.** Pre-registered replication (their exact spec) + OOS
181 + post-2018 sample + gamma-state split using our options chains; DSR for the
182 + spec search.
183 +- **MT exposure.** Low if the published spec is frozen.
184 +- **Cost sensitivity.** Two trades/day at the most liquid instrument's most
185 + liquid hours — survivable in principle; measure.
186 +- **Impl.** Ours. ✅
187 +- **Honest new test.** The cleanest possible *decay measurement*: published
188 + effect, published spec, untouched post-publication data.
189 + **Status: disputed (post-2018 fate unknown).**
190 +
191 +## A9 — Intraday U-shape (open/close vol & spread concentration)
192 +
193 +- **Claims.** Volatility, volume, spreads peak at open and close (Wood et
194 + al. 1985).
195 +- **Granularity.** 1min. ✅
196 +- **Confounds.** None — this one is *real microstructure*, and it is itself
197 + a confounder for other intraday claims.
198 +- **Decay.** Robust across decades.
199 +- **Correct test.** Descriptive profile with bootstrap bands.
200 +- **Cost sensitivity.** n/a (input to the cost model, not a strategy).
201 +- **Honest contribution.** Measure the intraday profile of OUR bounce null
202 + (taxonomy open item) so expE can subtract it. **Status: robust — use as
203 + positive control + cost-model input.**
204 +
205 +## A10 — Overnight vs intraday return split
206 +
207 +- **Claims.** Equity returns accrue disproportionately overnight.
208 +- **Granularity.** Daily open/close (+1min for convention checks). ✅
209 +- **Confounds.** T4 is *central*: auction close vs last bar changes overnight
210 + returns mechanically; stale opens for illiquid names.
211 +- **Decay.** Persistent in the literature but convention-sensitive —
212 + disputed as economics vs plumbing.
213 +- **Correct test.** Recompute under BOTH close conventions and both open
214 + definitions (first 1min bar vs daily open field); effect must survive all
215 + four.
216 +- **MT exposure.** Low.
217 +- **Cost sensitivity.** High (daily turnover).
218 +- **Honest new test.** Quantify how much of the overnight premium is
219 + convention-dependent on this dataset. **Status: disputed.**
220 +
221 +---
222 +
223 +## Methods inventory (with macOS arm64 status)
224 +
225 +| Method | Use | Implementation | arm64 |
226 +|---|---|---|---|
227 +| Lo–MacKinlay VR + block bootstrap | Q1 scans | ours (§8.1-gated) + `arch.unitroot.VarianceRatio` cross-check | ✅ |
228 +| Lo (1991) modified R/S | long-memory claims | to implement, gate on synthetic long-memory | ✅ |
229 +| Lagged xcorr / Granger | Q2 | ours + `statsmodels grangercausalitytests` | ✅ |
230 +| Roll / Corwin–Schultz / CHL / EDGE spreads | cost model, T1 null | ours (Roll); `bidask` package (EDGE, pure numpy) + own CS/CHL | ✅ |
231 +| Moving-block / stationary bootstrap | all CIs | ours (Künsch); Politis–Romano to add for RC/SPA | ✅ |
232 +| White RC / Hansen SPA / Romano–Wolf StepM | expF | no maintained OSS — implement ourselves, gate on synthetic | ✅ (numpy) |
233 +| Benjamini–Hochberg FDR | scan triage | trivial; `statsmodels.stats.multitest` | ✅ |
234 +| Deflated Sharpe / PBO-CSCV | expF/expH | implement from Bailey–López de Prado formulas | ✅ |
235 +| Bai–Perron breaks | regime robustness | `statsmodels` (partial) / own dynamic-programming impl | ✅ |
236 +
237 +**Cross-cutting conclusion.** On modern liquid U.S. equities, the honest
238 +prior for every *gross* short-horizon effect is decay toward zero, and for
239 +every *net* effect, death by costs. The genuine opportunities on THIS data
240 +are: (i) decay re-measurements with artifact shares reported (A1–A3, A8),
241 +(ii) the structural questions our dataset uniquely reaches (A4 at 1min, A5
242 +cross-asset 24/7), (iii) the last-survivor calendar re-test (A7), and
243 +(iv) methodological artifact quantifications (A2 Fisher share, A10
244 +convention share) — all publishable regardless of sign.
14 245