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 / expB_artifact_baselines

expB_artifact_baselines

Artifact baselines: null distributions of bounce, staleness, non-synchronous lead-lag

View benchmark implementation (benchmark.py) →

Figures

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

1min return AC1-0.347000.51staleness (share of RTH minutes without a fresh print)AAPL — staleness 0, 1min return AC1 0.00162MSFT — staleness 0, 1min return AC1 -0.01245NVDA — staleness 0, 1min return AC1 0.01298AMZN — staleness 0, 1min return AC1 -0.00916GOOGL — staleness 0, 1min return AC1 -0.02624META — staleness 0, 1min return AC1 -0.02418TSLA — staleness 0, 1min return AC1 0.01645JPM — staleness 0, 1min return AC1 -0.03379XOM — staleness 0, 1min return AC1 -0.01076UNH — staleness 0.0024, 1min return AC1 -0.05529SPY — staleness 0, 1min return AC1 0.00628QQQ — staleness 0, 1min return AC1 0.01507ATRO — staleness 0.6919, 1min return AC1 -0.05122AUVI — staleness 0.6646, 1min return AC1 -0.21019AXDX — staleness 0.8335, 1min return AC1 -0.32299BKE — staleness 0.288, 1min return AC1 -0.04574CECO — staleness 0.5311, 1min return AC1 -0.16489HPE — staleness 0.0003, 1min return AC1 -0.06183HTD — staleness 0.6906, 1min return AC1 -0.31279HWM — staleness 0.0052, 1min return AC1 -0.02708ICUI — staleness 0.4941, 1min return AC1 -0.10807KEY.K — staleness 0.8674, 1min return AC1 -0.3469KSPI — staleness 0.471, 1min return AC1 -0.20949LENZ — staleness 0.7067, 1min return AC1 -0.27902PBYI — staleness 0.3251, 1min return AC1 -0.11171PLNT — staleness 0.0305, 1min return AC1 -0.01553RITM.B — staleness 0.8984, 1min return AC1 -0.25345RPM — staleness 0.2196, 1min return AC1 -0.0903RUM — staleness 0.0291, 1min return AC1 -0.05627SLF — staleness 0.1826, 1min return AC1 -0.01447SPB — staleness 0.3332, 1min return AC1 -0.04111KEY.K SPY leads +1 min (LOCF join)00.11900.51staleness (share of RTH minutes without a fresh print)AAPL — staleness 0, SPY leads +1 min (LOCF join) 0.01237MSFT — staleness 0, SPY leads +1 min (LOCF join) 0.00645NVDA — staleness 0, SPY leads +1 min (LOCF join) 0.00859AMZN — staleness 0, SPY leads +1 min (LOCF join) 0.0037GOOGL — staleness 0, SPY leads +1 min (LOCF join) -0.00674META — staleness 0, SPY leads +1 min (LOCF join) 0.00367TSLA — staleness 0, SPY leads +1 min (LOCF join) 0.00585JPM — staleness 0, SPY leads +1 min (LOCF join) 0.00377XOM — staleness 0, SPY leads +1 min (LOCF join) -0.00728UNH — staleness 0.0024, SPY leads +1 min (LOCF join) 0.02334QQQ — staleness 0, SPY leads +1 min (LOCF join) 0.01068ATRO — staleness 0.6919, SPY leads +1 min (LOCF join) 0.06282AUVI — staleness 0.6646, SPY leads +1 min (LOCF join) 0.0057AXDX — staleness 0.8335, SPY leads +1 min (LOCF join) -0.00701BKE — staleness 0.288, SPY leads +1 min (LOCF join) 0.08981CECO — staleness 0.5311, SPY leads +1 min (LOCF join) 0.06433HPE — staleness 0.0003, SPY leads +1 min (LOCF join) 0.00666HTD — staleness 0.6906, SPY leads +1 min (LOCF join) 0.05151HWM — staleness 0.0052, SPY leads +1 min (LOCF join) 0.02045ICUI — staleness 0.4941, SPY leads +1 min (LOCF join) 0.0769KEY.K — staleness 0.8674, SPY leads +1 min (LOCF join) 0.02132KSPI — staleness 0.471, SPY leads +1 min (LOCF join) 0.02003LENZ — staleness 0.7067, SPY leads +1 min (LOCF join) 0.0143PBYI — staleness 0.3251, SPY leads +1 min (LOCF join) 0.03636PLNT — staleness 0.0305, SPY leads +1 min (LOCF join) 0.03961RITM.B — staleness 0.8984, SPY leads +1 min (LOCF join) 0.01628RPM — staleness 0.2196, SPY leads +1 min (LOCF join) 0.09142RUM — staleness 0.0291, SPY leads +1 min (LOCF join) 0.05423SLF — staleness 0.1826, SPY leads +1 min (LOCF join) 0.11852SPB — staleness 0.3332, SPY leads +1 min (LOCF join) 0.07764SLF
expB — artifact null levels, one dot per ticker (Q1 2024, RTH 1min). Bounce pushes AC1 negative and LOCF joins make SPY spuriously lead, both in proportion to staleness. Run 20260812T055602Z, regenerated from results.json.

Hypothesis

documentexpB_artifact_baselines/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 — expB_artifact_baselines#

Pre-specified 2026-08-12, before any real-data measurement. Detectors passed the §8.1 synthetic gate first (11 tests, benchmarks/synthetic/).

Hypothesis
  The three mechanical artifacts identified in expA are MEASURABLE and
  MATERIAL in this dataset at 1-minute resolution:
  (i)   bid-ask bounce produces negative AC1 in 1min returns, larger for
        less liquid names (Roll-implied relative spread as the null level);
  (ii)  illiquid names are stale on a large fraction of RTH minutes;
  (iii) LOCF-gridding makes SPY spuriously "lead" stale tickers at +1 min,
        with the artifact magnitude increasing in staleness.

Falsification criterion
  The experiment fails if the nulls are unusable as baselines: bounce AC1
  indistinguishable from 0 across the liquidity spectrum (|median AC1| CI
  covering 0 for the bottom-liquidity tercile), or no monotone relation
  between staleness and the +1min SPY cross-correlation (Spearman rho <= 0
  across tickers).

Artifact null(s)
  This experiment BUILDS the artifact nulls; its own null is the synthetic
  ground truth (§8.1 gate) — detectors verified to read 0 on random walks.

Method
  Universe (pre-specified): LIQUID = {AAPL MSFT NVDA AMZN GOOGL META TSLA
  JPM XOM UNH} + {SPY QQQ}; RANDOM = 30 tickers drawn from the full 1min
  stock ticker list with numpy seed 42 (deterministic given the cached
  list). Window: 2024-01-02 → 2024-04-01, RTH only (09:30 ≤ t < 16:00),
  adjustment adj_split, all data via hf_client (cached).
  Per ticker: staleness ratio on the 390-min RTH grid; trade-to-trade 1min
  log-return AC1 with moving-block bootstrap CI (block = 1 day, n=300,
  seed=42); Roll implied relative spread; VR(5), VR(30).
  Cross: lagged xcorr (±3 min, NaN-aware, day-boundary safe) of LOCF-grid
  returns vs SPY; SPX-vs-SPY as the index-staleness case.
  This is a DESCRIPTIVE measurement of artifact levels, not an anomaly
  claim: no OOS split; every number is Level 0 by construction.

Result
  Run 20260812T055602Z (47 requests, 795 185 rows, 0 retries). 31/42
  tickers had enough data (>=30 days, >=2000 returns); 11 dropped, listed
  in results.json. Median by staleness tercile (staleness | AC1 | Roll rel
  spread | VR30 | SPY-leads-+1min):
    fresh  0.000 | -0.009 | 1.4 bp  | 0.972 | +0.005
    mid    0.107 | -0.051 | 3.8 bp  | 0.901 | +0.047
    stale  0.691 | -0.232 | 17.0 bp | 0.547 | +0.021
  Spearman(staleness, SPY-leads-+1) = +0.43 (> 0: monotone). Extreme case
  RITM.B: staleness 0.90, AC1 -0.253, VR30 0.35. Mega-caps: AC1 CI covers
  0 and the Roll estimator is undefined (positive autocov) — no measurable
  bounce at the top. SPX-vs-SPY: corr 0.965 at lag 0 and +0.065 with SPY
  leading by 1 min (index prints lag the tradable ETF).

Interpretation
  Both falsification criteria FAILED to trigger: the nulls are usable.
  Headline: an uncorrected VR/AC1 scan on mid/low-liquidity names is
  DOMINATED by artifacts — VR30 of 0.55 and AC1 of -0.23 arise with no
  economic mean reversion whatsoever. All numbers Level 0 (descriptive
  null levels), as pre-specified. Magnitudes recorded in
  research/artifact_taxonomy.md.

Next experiment
  expC (reversion scan) consumes these nulls: any reversion claim must
  exceed the bounce null for its liquidity bucket. Phase 1 literature
  sweep proceeds in parallel.

Analysis

documentexpB_artifact_baselines/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 — expB_artifact_baselines#

Run: results/expB_artifact_baselines/20260812T055602Z/results.json (hardware manifest embedded; 47 network requests, 795 185 rows, protocol pre-specified in hypothesis.md; detectors passed the §8.1 synthetic gate — 11 tests — before touching this data).

The measured artifact nulls (Q1 2024, RTH 1min, 31 tickers)#

Staleness tercile median staleness median AC1 Roll rel. spread VR(30) SPY leads +1min
fresh 0.000 −0.009 1.4 bp 0.972 +0.005
mid 0.107 −0.051 3.8 bp 0.901 +0.047
stale 0.691 −0.232 17.0 bp 0.547 +0.021
  • Bounce/staleness dominate naive reversion metrics. With zero planted economics, illiquid names show VR(30) = 0.55 and AC1 = −0.23 (extreme: RITM.B, 90 % stale minutes, VR30 = 0.35). Any reversion scan that does not clear these levels for its liquidity bucket is measuring market plumbing.
  • Mega-caps show no measurable bounce at 1min: AAPL/SPY/NVDA AC1 CIs cover 0 and the Roll estimator is undefined (positive lag-1 autocov) — the bounce null is liquidity-dependent, not universal.
  • The stale-price lead-lag artifact is real and monotone: SPY spuriously "leads" tickers by +1 min in proportion to their staleness (Spearman = +0.43). It peaks in the mid tercile (+0.047): the stalest names trade so rarely that even LOCF correlation collapses — the artifact is worst where it is least obvious.
  • SPX-vs-SPY: contemporaneous corr 0.965, and a +0.065 cross-correlation with SPY leading by 1 minute. An "ETF price discovery leads the index" finding is manufactured by index print staleness — measured here so Q2 hypotheses must beat it.

Limitations#

Level 0 by construction (descriptive nulls; single quarter; one venue's bar convention). 11/42 tickers dropped for insufficient data — the null for ultra-illiquid names is therefore understated. Q1-2024-specific levels; expC should re-measure per period rather than reuse these constants blindly.

Verdict#

Complete — nulls established and usable. Both pre-specified falsification criteria failed to trigger. Numbers are recorded in research/artifact_taxonomy.md; expC (reversion scan) must report every effect net of the bucket-matched bounce null, and expD must run the synchronized-vs-raw timestamp comparison this experiment quantified.

README

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

expB_artifact_baselines#

Artifact baselines: null distributions of bounce, staleness, non-synchronous lead-lag

Status: completed 2026-08-12 — see analysis.md; null magnitudes recorded in research/artifact_taxonomy.md.

Result runs