Experiments / expE_calendar_scan
expE_calendar_scan
Calendar scan: intraday, day-of-week, turn-of-month with pre-counted hypothesis budget
View benchmark implementation (benchmark.py) →
Figures
Generated server-side from the latest committed results.json — never hand-typed.
Hypothesis
Hypothesis — expE_calendar_scan#
Pre-specified 2026-08-12 before the scan ran. The calendar space is where p-hacking is easiest (STW 2001), so the hypothesis budget below is a hard cap: any test not listed here is not run.
Hypothesis
Tests H13/H14/H18 (scan half) + measures H20. Priors from the verified
literature: the Monday effect is dead (French 1980 -> decayed); holiday
effects are dead; turn-of-month was the last survivor as of 2006
(Marquering et al.) and its TRAIN-period status is the open question.
H20 (intraday U-shape of vol and spread) is expected to be strongly
present — it is a POSITIVE CONTROL and a cost-model input, not an anomaly.
Falsification criterion
H14 (negative control): the pipeline is BROKEN if any weekday passes the
family-wise permutation test — investigate the pipeline, not the market.
H13: "turn-of-month survived in train" is falsified if the ToM window
mean fails the family-wise permutation test. H20: the U-shape control
FAILS the pipeline if flat (spread/vol profile must peak at open/close).
Artifact null(s)
Permuted-calendar null (MANDATORY per charter §8.5): within-YEAR
permutation of daily returns (preserves annual regimes, destroys calendar
alignment), n = 2000, seed = 42. Family-wise: the max-|statistic| across
all 8 tests is recomputed on every permutation (mini reality check) —
each observed statistic gets both a marginal and a family-wise p.
T4 guard: daily bars only (one close convention throughout).
Method (budget pre-counted: 8 tests)
Instrument: SPY 1day, adj_splitdiv, TRAIN 2000-2016 (single pre-declared
instrument — no cross-sectional expansion). Statistics, each = mean
daily return in the class minus overall mean:
T1..T5 day-of-week (Mon..Fri) [H14, 5 tests]
T6 turn-of-month window: last trading day through
+3 first trading days of the next month [H13, 1 test]
T7 pre-holiday day (day before a non-weekend gap) [H18]
T8 post-holiday day [H18]
Corrections: BH-FDR over the 8 marginal permutation p-values AND the
family-wise max-stat p. Sub-period stability (2000-2007 / 2008-2015)
reported descriptively for anything that passes.
H20 measurement (no hypothesis test): per half-hour bucket on the liquid
12, 1min, 2014-2015 (cached): median |1min return|, EDGE spread per
bucket, staleness per bucket -> taxonomy T1/T2 intraday profile.
Result
Run 20260812T065222Z (1 new request — everything else cache-served;
4 024 trading days). NOTHING SURVIVES: all 8 observed effects sit inside
their permuted-calendar 95% bands (family-wise p >= 0.93 everywhere;
best marginal p = 0.24, turn-of-month). Monday: -1.4 bp, p_marg 0.73 —
the negative control held. Turn-of-month: +4.7 bp overall, and DECAYING
inside train (+7.9 bp 2000-2007 -> +1.6 bp 2008-2015). Holiday effects:
wide bands (n=144), nothing. H20 control: PASSED — volatility U-shape
(6.6 bp open / 2.4 midday / 2.9 close); spread declines monotonically
(2.8 -> 1.2 bp), i.e. an L-shape, not a U — recorded as measured.
Interpretation
(Level 0.) The cleanest possible calendar answer on this data: the
pre-declared 8-test budget produces zero candidates. The 2006-era "last
survivor" (turn-of-month) does not clear the permuted-calendar bar in
train and decays within it — candidate 02 (H13) now carries a strong
dead-on-arrival prior into its validation-split protocol. Both pipeline
controls behaved (Monday stayed dead; U-shape present), so this negative
is a *finding*, not a power failure — though holiday-class power is low
(wide bands) and is reported as such. H20 numbers feed taxonomy T1/T2:
first-30-minutes claims face 2-3x the midday artifact level.
Next experiment
expF: correction battery (White RC/SPA + DSR with the 22-hypothesis
budget) over everything C/D/E surfaced.Analysis
Analysis — expE_calendar_scan#
Run: results/expE_calendar_scan/20260812T065222Z/results.json (protocol and
8-test budget pre-specified; single declared instrument SPY; permuted-calendar
null n=2000; manifest embedded). Level 0 throughout.
1. The calendar is empty (and that is the finding)#
| class | observed (bp) | perm 95% band | p family-wise |
|---|---|---|---|
| mon | −1.4 | [−7.9, +7.9] | 1.00 |
| tue | +4.0 | [−7.9, +8.0] | 0.99 |
| fri | −3.8 | [−8.0, +8.2] | 0.99 |
| turn_of_month | +4.7 | [−8.2, +8.3] | 0.97 |
| pre_holiday | +5.7 | [−20.8, +21.0] | 0.93 |
| post_holiday | +2.9 | [−21.2, +20.7] | 1.00 |
Every dot inside its band; zero FDR rejections; the family-wise max-stat (mini reality check) never gets close. Turn-of-month — the last calendar survivor as of Marquering et al. (2006) — fails the permuted-calendar bar in train (2000–2016) and decays inside it (+7.9 bp in 2000–2007 → +1.6 bp in 2008–2015). This is exactly the Sullivan–Timmermann–White prediction, reproduced on open data with an honest budget.
2. Controls behaved — the negative is trustworthy#
- Monday (negative control): −1.4 bp, p 0.73. Had the pipeline "found" the canonical corpse, the pipeline would have been declared broken (the pre-registered criterion). It did not.
- H20 U-shape (positive control): strongly present. Volatility 6.6 bp (09:30) → 2.4 (midday) → 2.9 (15:30); EDGE spread declines monotonically 2.8 → 1.2 bp — the spread profile is an L, not a U (the close's liquidity is cheap; the open's is expensive). Both numbers now live in the taxonomy: any first-30-minutes return claim fights 2–3× the midday artifact level, and open-heavy strategies pay double spread.
3. Honest caveats#
Holiday classes have n=144 → bands of ±21 bp: low power, reported as such (absence of evidence here is weak evidence of absence). Single instrument by design — cross-sectional calendar claims were deliberately out of budget.
4. Hand-off#
Nothing from expE enters the expF candidate pool. Candidate 02 (H13 turn-of-month) keeps its pre-registered validation protocol but now carries a strong dead-on-arrival prior — the honest expectation is a Level-1-fails negative finding for the atlas. expF (correction battery) is next.
README
expE_calendar_scan#
Calendar scan: intraday, day-of-week, turn-of-month with pre-counted hypothesis budget
Status: completed 2026-08-12 — zero of 8 pre-declared calendar tests survive the permuted-calendar null; turn-of-month decayed inside train; controls held. H20 intraday artifact profile measured.
Result runs
- 20260812T065222Z / results.json 5.8 KiB