Honesty doctrine. Every candidate anomaly is an artifact until proven otherwise; in-sample results are never findings; past statistical regularity does not imply future returns. This is research on statistical properties of market data — not investment advice, not a trading system.

Experiments / expD_leadlag_scan

expD_leadlag_scan

Lead-lag scan: lagged cross-correlations and Granger, separating timestamp artifacts

View benchmark implementation (benchmark.py) →

Figures

Generated server-side from the latest committed results.json — never hand-typed.

raw LOCF join (artifact included) both-fresh (synchronized) 0 0.05cross-correlation at +1 min (leader → follower)ESES[contin_UNadj]->SPY ES[contin_UNadj]->SPY raw LOCF join: -0.01056 ES[contin_UNadj]->SPY both-fresh: -0.01065ES[contin_adj_ratio]->SPY ES[contin_adj_ratio]->SPY raw LOCF join: -0.01057 ES[contin_adj_ratio]->SPY both-fresh: -0.01065ES[contin_adj_absolute]->SPY ES[contin_adj_absolute]->SPY raw LOCF join: -0.01063 ES[contin_adj_absolute]->SPY both-fresh: -0.01072INDEXSPX->SPY SPX->SPY raw LOCF join: -0.01442 SPX->SPY both-fresh: -0.0145LIQUIDSPY->JPM SPY->JPM raw LOCF join: 0.04571 SPY->JPM both-fresh: 0.04577SPY->GOOGL SPY->GOOGL raw LOCF join: 0.02618 SPY->GOOGL both-fresh: 0.02542 (FDR survivor)SPY->UNH SPY->UNH raw LOCF join: 0.02274 SPY->UNH both-fresh: 0.01272SPY->NVDA SPY->NVDA raw LOCF join: 0.0101 SPY->NVDA both-fresh: 0.01006 (FDR survivor)SPY->AMZN SPY->AMZN raw LOCF join: 0.00937 SPY->AMZN both-fresh: 0.00924SPY->TSLA SPY->TSLA raw LOCF join: 0.00639 SPY->TSLA both-fresh: 0.00627SPY->AAPL SPY->AAPL raw LOCF join: -0.00193 SPY->AAPL both-fresh: -0.00195SPY->XOM SPY->XOM raw LOCF join: -0.00421 SPY->XOM both-fresh: -0.00438SPY->META SPY->META raw LOCF join: -0.01308 SPY->META both-fresh: -0.01308 (FDR survivor)SPY->MSFT SPY->MSFT raw LOCF join: -0.0149 SPY->MSFT both-fresh: -0.01506 (FDR survivor)SPY->QQQ SPY->QQQ raw LOCF join: -0.01943 SPY->QQQ both-fresh: -0.0195 (FDR survivor)RANDOMSPY->BKE SPY->BKE raw LOCF join: 0.07889 SPY->BKE both-fresh: 0.07533 (FDR survivor)SPY->ATRO SPY->ATRO raw LOCF join: 0.07129 SPY->ATRO both-fresh: 0.06777 (FDR survivor)SPY->CECO SPY->CECO raw LOCF join: 0.05331 SPY->CECO both-fresh: 0.05896 (FDR survivor)SPY->AXDX SPY->AXDX raw LOCF join: 0.05037 SPY->AXDX both-fresh: 0.06008 (FDR survivor)SPY->HTD SPY->HTD raw LOCF join: 0.0481 SPY->HTD both-fresh: 0.0728 (FDR survivor)SECTORSPY->XLF SPY->XLF raw LOCF join: 0.02823 SPY->XLF both-fresh: 0.02824 (FDR survivor)SPY->XLP SPY->XLP raw LOCF join: 0.02382 SPY->XLP both-fresh: 0.02369 (FDR survivor)SPY->XLK SPY->XLK raw LOCF join: 0.01895 SPY->XLK both-fresh: 0.01889 (FDR survivor)SPY->XLY SPY->XLY raw LOCF join: 0.01656 SPY->XLY both-fresh: 0.01646 (FDR survivor)SPY->XLB SPY->XLB raw LOCF join: 0.01336 SPY->XLB both-fresh: 0.01297SPY->XLU SPY->XLU raw LOCF join: 0.01127 SPY->XLU both-fresh: 0.01121SPY->XLI SPY->XLI raw LOCF join: 0.00997 SPY->XLI both-fresh: 0.00987SPY->XLV SPY->XLV raw LOCF join: -0.0031 SPY->XLV both-fresh: -0.00297SPY->XLE SPY->XLE raw LOCF join: -0.00842 SPY->XLE both-fresh: -0.00847
expD — lead at +1 min per pair, 2014-2015: the gap between the raw join and the both-fresh subsample is the non-synchronicity artifact (T3), measured. Run 20260812T064047Z, regenerated from results.json.
raw LOCF join (artifact included) both-fresh (synchronized) 0 0.05 0.1cross-correlation at +1 min (leader → follower)LIQUIDSPY->JPM SPY->JPM raw LOCF join: 0.03163 SPY->JPM both-fresh: 0.03153 (FDR survivor)SPY->MSFT SPY->MSFT raw LOCF join: 0.03089 SPY->MSFT both-fresh: 0.03096 (FDR survivor)SPY->AMZN SPY->AMZN raw LOCF join: 0.02902 SPY->AMZN both-fresh: 0.02918 (FDR survivor)SPY->NVDA SPY->NVDA raw LOCF join: 0.02496 SPY->NVDA both-fresh: 0.02509 (FDR survivor)SPY->QQQ SPY->QQQ raw LOCF join: 0.01916 SPY->QQQ both-fresh: 0.01913 (FDR survivor)SPY->XOM SPY->XOM raw LOCF join: 0.01823 SPY->XOM both-fresh: 0.01868 (FDR survivor)SPY->UNH SPY->UNH raw LOCF join: 0.01773 SPY->UNH both-fresh: 0.01778 (FDR survivor)SPY->AAPL SPY->AAPL raw LOCF join: 0.01129 SPY->AAPL both-fresh: 0.01135 (FDR survivor)RANDOMSPY->BKE SPY->BKE raw LOCF join: 0.1048 SPY->BKE both-fresh: 0.11961 (FDR survivor)SPY->HTD SPY->HTD raw LOCF join: 0.03871 SPY->HTD both-fresh: 0.09514 (FDR survivor)SPY->ATRO SPY->ATRO raw LOCF join: 0.00641 SPY->ATRO both-fresh: 0.00757SECTORSPY->XLK SPY->XLK raw LOCF join: 0.15039 SPY->XLK both-fresh: 0.14773 (FDR survivor)SPY->XLI SPY->XLI raw LOCF join: 0.14409 SPY->XLI both-fresh: 0.12394 (FDR survivor)SPY->XLP SPY->XLP raw LOCF join: 0.1376 SPY->XLP both-fresh: 0.13013 (FDR survivor)SPY->XLY SPY->XLY raw LOCF join: 0.13493 SPY->XLY both-fresh: 0.12449 (FDR survivor)SPY->XLV SPY->XLV raw LOCF join: 0.12624 SPY->XLV both-fresh: 0.11474 (FDR survivor)SPY->XLB SPY->XLB raw LOCF join: 0.12014 SPY->XLB both-fresh: 0.11817 (FDR survivor)SPY->XLF SPY->XLF raw LOCF join: 0.08449 SPY->XLF both-fresh: 0.08357 (FDR survivor)SPY->XLU SPY->XLU raw LOCF join: 0.07486 SPY->XLU both-fresh: 0.07391 (FDR survivor)SPY->XLE SPY->XLE raw LOCF join: 0.03372 SPY->XLE both-fresh: 0.03377 (FDR survivor)
expD — lead at +1 min per pair, 2006-2007: the gap between the raw join and the both-fresh subsample is the non-synchronicity artifact (T3), measured. Run 20260812T064047Z, regenerated from results.json.

Hypothesis

documentexpD_leadlag_scan/hypothesisauthorSimon-Pierre BouchercreatedTue Aug 11 2026 20:00:00 GMT-0400 (heure avancée de l’Est)modifiedTue Aug 11 2026 20:00:00 GMT-0400 (heure avancée de l’Est)statusfinal

Hypothesis — expD_leadlag_scan#

Pre-specified 2026-08-12 before the scan ran. Alignment primitives (interval-fresh masks, both-fresh de-artifacting) passed the §8.1 gate first — the gate caught an end-freshness-only mask bug (Epps attenuation) before real data.

Hypothesis
  Tests H07/H08 (scan half) and previews H09/H11. Expectations:
  (i) raw LOCF joins will show SPY "leading" everything, in proportion to
  staleness (T3); (ii) on both-fresh subsamples, liquid and sector-ETF
  pairs will show NO lead-lag at ±1..3 min in 2014-2015 (H08
  expected-negative); (iii) 2006-2007 fresh pairs MAY retain a small lead
  (pre-decay regime, Chordia et al. 2005); (iv) ES→SPY: any 1min-visible
  lead is expected to be tiny or absent, and must be invariant to the three
  futures splice variants; (v) SPX→SPY: the raw lead persists even
  both-fresh (index prints are CONTENT-stale though print-fresh) — the H11
  artifact case.

Falsification criterion
  (ii) falsified if any liquid/sector both-fresh pair survives FDR(5%) at
  |lag| ∈ 1..3 in 2014-2015. (iv) falsified if the ES→SPY fresh lead
  changes sign/significance across splice variants (that would mean the
  measurement is splice-dominated, not economic).

Artifact null(s)
  T3 non-synchronicity: measured DIRECTLY as artifact share =
  raw_xcorr[+1] − fresh_xcorr[+1] per pair. Day-block bootstrap null
  (resampled days, n=200, seed=42) for fresh xcorr[±1] vs 0.

Method (grid pre-declared)
  Pairs vs SPY: 11 liquid (AAPL MSFT NVDA AMZN GOOGL META TSLA JPM XOM UNH
  QQQ), 9 sector ETFs (XLF XLE XLK XLV XLI XLY XLP XLU XLB), 10 random
  (first 10, sorted, of the seed-42 random-30). Plus ES→SPY (all three
  splice variants) and SPX→SPY. Windows: W1 2006-01-01→2008-01-01,
  W2 2014-01-01→2016-01-01 (ES/SPX: W2 only — history starts 2008).
  1min RTH grids; raw-LOCF vs both-fresh (interval-fresh) treatments;
  lags ±3; min 200 covered days and 10k fresh pairs per cell.
  Correction: BH-FDR over all fresh xcorr[+1] and xcorr[-1] tests jointly.
  Cell count ≤ (30×2 + 4 + 1) ≈ 65 pairs-windows × 2 lags.

Result
  Run 20260812T070742Z (198 requests, 8.4M rows, 49 pair-cells, 98 tests).
  2006-2007: broad both-fresh leads survive FDR — SPY leads every sector ETF
  by +0.07..+0.148 at +1min and liquid names by +0.01..+0.03. 2014-2015:
  collapse — liquid/sector fresh leads shrink to [-0.020, +0.046]; a handful
  remain FDR-significant at tiny magnitudes (XLF +0.028, JPM +0.046,
  MSFT -0.015 NEGATIVE); sparse names keep larger fresh leads (BKE +0.075,
  HTD +0.073). ES->SPY: fresh corr(SPY_{t-1}, ES_t) = -0.032, FDR, and
  IDENTICAL across all three splice variants (-0.0323 each). SPX->SPY: SPY
  leads SPX +0.132 both-fresh with artifact share ~0 (SPX prints every
  minute, fresh_frac 0.996) — synchronization does NOT remove it. Median
  raw-vs-fresh artifact share ~0 for liquid/sector; for ultra-stale names
  the raw LOCF join DILUTES the lead (HTD raw +0.048 vs fresh +0.073).

Interpretation
  (Level 0.) Clause (iii) held: 2006-2007 retained real minute-scale
  diffusion — and its 2014-2015 collapse is the cleanest decay measurement
  of the project so far (XLK +0.148 -> +0.019). Clause (ii) FALSIFIED as
  pre-registered: several liquid/sector pairs survive FDR in 2014-2015 —
  statistically nonzero but economically tiny residual structure; to expF.
  Clause (iv) held: the ES->SPY effect is splice-invariant, a genuine
  basis-reversion-like microstructure candidate. Clause (v) held: the SPX
  "lead" is content-staleness, not print-staleness — synchronizing on print
  times cannot fix a computed index (H11 candidate confirmed in scan form).
  New T3 nuance: LOCF joins INFLATE leads for mid-stale names (expB) but
  DILUTE them for ultra-stale names (zero-return mass) — the artifact is
  non-monotone in staleness.

Next experiment
  expE calendar scan (pre-counted budget); then expF correction battery.

Analysis

documentexpD_leadlag_scan/analysisauthorSimon-Pierre BouchercreatedTue Aug 11 2026 20:00:00 GMT-0400 (heure avancée de l’Est)modifiedTue Aug 11 2026 20:00:00 GMT-0400 (heure avancée de l’Est)statusreviewed

Analysis — expD_leadlag_scan#

Run: results/expD_leadlag_scan/20260812T070742Z/results.json (protocol pre-specified; alignment primitives §8.1-gated — the gate caught an interval-freshness bug before real data). All conclusions Level 0.

1. The decay measurement (H07/H08 scan half)#

Both-fresh leads at +1min, 2006-2007 → 2014-2015:

Pair family 2006-2007 2014-2015
SPY → sector ETFs +0.07 .. +0.148 (all FDR) −0.02 .. +0.028
SPY → mega-caps +0.01 .. +0.03 (mostly FDR) −0.015 .. +0.046
SPY → sparse names +0.09 .. +0.12 +0.06 .. +0.075 (still FDR)

Minute-scale market→component diffusion was REAL and large in 2006-2007 on synchronized samples, and collapsed by 2014-2015 — direct, open-data confirmation of the Chordia–Roll–Subrahmanyam convergence story at the 1min floor. The residual 2014-2015 structure is statistically detectable (huge n) but an order of magnitude smaller; several cells survive FDR, so the pre-registered expected-negative clause for H08 is formally falsified — recorded as such and handed to expF (costs will likely be decisive).

2. ES ↔ SPY (H09 preview)#

corr(SPY_{t−1}, ES_t) = −0.032 both-fresh, FDR-significant, and identical to 4 decimals across all three continuous-futures splice variants — the built-in robustness check held. Sign and size are consistent with minute-scale basis reversion rather than one-way price discovery (the +1 ES-leads direction is ≈0). A genuine structural candidate for expF/candidate work; economically tiny.

3. SPX → SPY: content staleness ≠ print staleness (H11 confirmed at scan level)#

SPY leads SPX by +0.132 on the both-fresh subsample, with artifact share ≈ 0 — SPX "prints" every minute (fresh_frac 0.996), so synchronizing on print times removes nothing: the staleness lives INSIDE the index computation (Fisher 1966, measured live). Confirms candidate 03's design: the correction must model constituent staleness, not print gaps.

4. A T3 refinement for the taxonomy#

expB showed LOCF joins inflate leads for mid-stale names (+0.047). expD adds the other arm: for ultra-stale names the LOCF zero-return mass dilutes the measured lead (HTD: raw +0.048 vs fresh +0.073). The non-synchronicity artifact is non-monotone in staleness — naive joins can hide as well as manufacture lead-lag. Added to T3.

5. Verdicts#

Clause (ii) falsified (tiny FDR residuals remain in 2014-2015); clauses (iii), (iv), (v) held. Hand-off to expF: the 2014-2015 FDR survivors, the ES→SPY basis effect, and the decay curve. expE (calendar) is next; its budget is pre-counted in research_gaps.md.

README

documentexpD_leadlag_scan/READMEauthorSimon-Pierre BouchercreatedTue Aug 11 2026 20:00:00 GMT-0400 (heure avancée de l’Est)statusdraft

expD_leadlag_scan#

Lead-lag scan: lagged cross-correlations and Granger, separating timestamp artifacts

Status: completed 2026-08-12 — decay 2006-07→2014-15 measured on synchronized pairs; ES↔SPY splice-invariant basis effect; SPX lead = content staleness (H11 confirmed at scan level).

Result runs