# PRE-REGISTRATION — Does overnight drift concentrate in identifiable event nights? **Frozen: 2026-09-16, BEFORE any event-conditioned overnight result was computed.** Archive: `/fp-context` (this build). Price: `/fp-data` (read-only). Predecessor: `fp-data/studies/2026-09-15-why-the-tape-loses.md` (unconditional overnight drift) and `fp-data/studies/2026-08-25-fundamentals-results.md` (pre-FOMC overnight, robust). This file is the contract for the acceptance test in BUILD-SPEC.md §8. No re-binning after seeing results. --- ## 1. Question Does the overnight drift (16:00 ET prior close → 09:30 ET open) concentrate in identifiable event nights, **beyond the pre-FOMC night already known to work**? ## 2. Data and window (frozen) | Item | Spec | |---|---| | Sample | Every overnight that has both a prior 16:00 ET close and a 09:30 ET open, 2020-01-01 → last complete session in the 1m files, for **NQ, ES, GC**. | | Window | Identical to the 2026-09-15 tape study: buy the 16:00 ET close bar, sell the next 09:30 ET open bar. | | Friction | $4 round-turn **plus 1 tick each way**, matching `studies/scripts-2026-09-15/study6.mjs`: NQ $14, ES $29, GC $24. Primary metric is **net**. | | Tick / $ | NQ 0.25 / $5; ES 0.25 / $12.50; GC 0.10 / $10. | | Timezone | `America/New_York` via IANA (`zoneinfo` / ICU). No fixed UTC offset. | | Quad-witching | Exclude any overnight whose **open** date is a quad-expiry Friday (3rd Friday Mar/Jun/Sep/Dec, Juneteenth rule as in fp-data README). Never compute a return across 09:30 ET on those dates. | | Join | Events on `ts_published` against the overnight that contains that instant: `[prior 16:00 ET, 09:30 ET)`. An 08:30 ET print sits inside the night that opens that morning. | ## 3. Positive control (must pass before any other arm is read) **Pre-FOMC night.** NQ overnight into a US FOMC *decision* day (statement typically 14:00 ET). The 2026-08-25 study, after the 2026-08-26 calendar repair, found n = 85 (2016–2026), +25.4 bps gross, t = +3.61, 67.1% hit. **Pass rule for the pipeline, not for a new finding:** on NQ 2020–2026, the pre-FOMC cell must have **positive mean net $ and t > 1.5**. If it does not, the pipeline is wrong — stop, fix, do not read other arms. (The 2016–2026 bps figure is a *reconstruction check* if the 1m file is joined the same way as fundamentals_nq.py; the acceptance sample itself is 2020–2026.) ## 4. Arms (frozen; overlapping primary, exclusive secondary) A night may belong to more than one overlapping arm. Exclusive assignment uses the hierarchy below and is reported as a robustness table, not as a substitute. ### Overlapping arms (primary) | Arm | Definition | Roots | |---|---|---| | **A. pre-FOMC** | Overnight whose 09:30 open calendar date (ET) is a US FOMC decision day. | NQ, ES, GC | | **B. AMC top-10, heavy** | Overnight following a session on which at least one **current top-10 NDX name by QQQ weight, weight ≥ 5%**, reports after the close. | NQ, ES | | **C. AMC top-10, light** | Same, but the reporters' weights are all **< 5%** (still in the current top 10). If a night has both a heavy and a light name, it is **heavy only** for the split (one assignment inside this family). | NQ, ES | | **D. Fed speech after 16:00 ET** | A Federal Reserve Governor/Chair/Vice Chair speech or testimony with `ts_published` ≥ 16:00 ET and < next 09:30 ET. | NQ, ES, GC | | **E. CPI / PCE / NFP morning** | Overnight that contains a US CPI, core CPI, PCE, core PCE, or nonfarm-payrolls print (typically 08:30 ET). | NQ, ES, GC | | **F. EIA / WASDE morning** | Overnight whose following RTH session contains an EIA weekly petroleum or natural-gas storage release, or a USDA WASDE release. | **CL is out of sample for the primary three roots; report F on GC (and on CL as a side table, not counted in Bonferroni).** | | **G. policy / geopolitics, high impact** | Overnight that contains a Federal Register Presidential Document or Rule matching the tariff/sanction/export-control lens, **or** a GDELT-doc headline with tone/impact above the frozen threshold in §4.1. | NQ, ES, GC | | **H. quiet** | Overnight in the sample that is in **none** of A–G. | NQ, ES, GC | Top-10 names and weights are **current QQQ holdings at archive build**, flagged `confidence: approximate`. This is survivorship-contaminated; it is what the spec asked for when weight history does not exist. Names that FMP does not timestamp as `bmo`/`amc` default to **AMC** with `confidence: inferred` (NDX mega-caps overwhelmingly report after the close). ### §4.1 Geopolitics threshold (frozen) GDELT 2.0 DOC `ArtList` items whose query is `(tariff OR sanction OR "export control" OR invasion OR "missile strike" OR "oil embargo" OR "strait of hormuz" OR "south china sea")` and `sourcecountry:US` OR domain in `{reuters.com, apnews.com, bloomberg.com}`, retained if `tone` (GDELT `socialscore` / `tone`) satisfies **|tone| ≥ 5**. If the GDELT DOC API cannot serve 2020–2026 history, arm G **collapses to Federal Register only** and is labelled as such; it is not dropped. ### Exclusive hierarchy (robustness only) `A > B > C > D > E > F > G > H` (first match wins). No other grouping. ## 5. Metrics (frozen) Primary, per arm × root: - n, mean **net** $ per contract, win rate, t-statistic vs 0 (t = mean / (sd/√n), sample sd). - **Share of total drift:** (n_arm × mean_gross_arm) / (n_all × mean_gross_all). Shares of overlapping arms need not sum to 1; that is stated in the write-up. Exclusive-hierarchy shares will sum to 1. Secondary: - Random-night placebo: for each arm, 1,000 draws of n_arm nights from the same root's sample, two-sided percentile of the observed mean in that null (reported; not a veto). - Train / confirm: **2020-01-01–2023-12-31** vs **2024-01-01–end**. An arm "replicates" only if the confirm-period mean net has the same sign as train and confirm t > 1.0. - Quad-witching already excluded from the sample (control is the exclusion, not a second table). ## 6. Multiple testing Bonferroni across the **primary overlapping arms that are defined on that root**. - NQ/ES: A, B, C, D, E, G, H → 7 tests; α = 0.05/7 ≈ 0.00714; |t| ≳ 2.69. - GC: A, D, E, F, G, H → 6 tests; α = 0.05/6 ≈ 0.00833; |t| ≳ 2.64. Arm F on CL is a side table, not in the family. Placebo and train/confirm are not additional tests. **Pass language:** |t| above the Bonferroni cut **and** confirm-period sign match → **supported**. t above 2 but below Bonferroni → **suggestive**. Confirm fails or |t| < 2 → **inconclusive**. Opposite sign vs the unconditional overnight drift with |t| above Bonferroni → **concentrates *against* the drift** (still a result). ## 7. Stopping rule No re-binning, no extra filters, no new arms, no alternative windows after seeing results. An inconclusive arm is reported inconclusive, as prominently as a supported one. The quiet arm is a result even if it still carries most of the dollars. ## 8. What this is not Not a tradable rule, not a size recommendation, not a test of COT, net liquidity, ORB, or late-day gamma momentum (all previously refuted; tagged regime-context only if present in the archive).