# Futures Playbook research bundle Staging copy, assembled 2026-10-08. This bundle backs the two research items on futuresplaybook.com: the prop-firm strategy-claims study and the ten-row research ledger. For each study it holds the pre-registration (where one exists), the written results and the code needed to rerun the study. It does not contain market data. `manifest.json` has the same facts in machine-readable form, one object per study. `SHA256SUMS` lists a hash for every file in this bundle. ## How to read this bundle **Pre-registration status** (the `preregistered` field) uses three values: - **yes**: a pre-registration file exists and the file system shows it was created before the first result artifact. Nothing material was added after results, apart from clearly marked banners or dated corrections. - **partial**: a pre-registration exists, but part of it falls short. Either sections were added after some output existed, or arms ran beyond the frozen list, or the hypothesis that passed was already known when it was written down. The notes say which. - **post-hoc**: there is no pre-registration. The test was designed and run in one pass. **Timestamps.** Every date and time in this README and the manifest is US Eastern (EDT, -04:00). Each one comes from file-system creation and modification times on the source drives. Hashes are used where they exist. **Freeze times written inside documents are not reliable.** In seven of the bundled pre-registrations, the "frozen at HH:MM" stamp disagrees with the file system. In most cases the stamp is *later* than the study's own results. The file system shows the pre-registration file was still written first in every one of those cases, so the order holds. But a reader comparing the in-document times alone would conclude the opposite. Each case is listed in the per-study notes. Only one pre-registration, the prop-firm study, has a recorded hash. Future studies should hash or commit the pre-registration before running. **Arms.** `arms` counts the distinct tested cells or hypotheses a study ran: each strategy, condition and market cell that got a test statistic or a verdict. Where a study declared its own pre-counted family, that count is used (rvol-orb 320; macro-events-fundamentals about 176). Controls, placebos and robustness tables are not counted. Post-hoc studies count the variants they screened, as a lower bound. **Placeholders.** Paths were made neutral. `` is the directory holding `fp-data/` and `fp-context/`; set it before running, for example with `grep -rl '' . | xargs sed -i '' 's||/path/to/your/data|g'`. `` is the directory the scripts ran from, `` is any scratch directory and `` is a user home directory. One file was left exactly as it was: the hash-attested `prop-firm-strategy-claims/PREREG-2026-09-16.md` and its `.sha256` file still name the original research drive. Editing it would break the hash, and that path is not a home directory. **Redactions.** Under the desk's 2026-09-10 disclosure rule, the desk's own running record (W/L tallies, R totals and live-ledger expectancy) is never published. Five sentences quoting it were replaced with `` in three files. No API keys, tokens, passwords, emails, phone numbers or account numbers were found in any bundled file. The Unusual Whales pull scripts read a key from an env file at run time and contain no key. **Not included:** raw or vendor market data, API responses, trade-level outputs, parquet caches and forward-track files. Each study lists the data you need to rerun it. Python scripts need pandas, numpy, scipy, scikit-learn and pyarrow. The `.mjs` scripts need Node 18 or later. ## Claim to study map | Ledger claim (site wording) | Study slug(s) | Verdict as the source states it | Pre-registered? | Arms | |---|---|---|---|---| | (site item) 13 prop-trader setups, NQ and ES micros, 0 of 26 | `prop-firm-strategy-claims` | "Tape: 0 of 26 cells VALIDATED." | yes, sha256-verified | 28 | | Level breakouts | `level-breakouts-tape-diagnosis`; multi-year support from `orb-vxn-and-gex-regime` (pn-001) | "The published pick family has no edge — replicated three ways" | **post-hoc** (the pn-001 support is pre-registered) | 53 | | Opening-range breaks | `rvol-orb`, `orb-vxn-and-gex-regime`; also the P6 control in `crown-play-policies` | "VERDICT: REFUTED"; "pn-001 ORB by VXN tercile — REFUTED as a system" | yes | 320 + 32 | | Gamma walls, cages and flow direction | `gamma-wall-backfill`, `gamma-cage-classifier`, `options-flow-direction`, `gamma-wall-migration` (rules defined in `crown-play-policies`) | P8, P9, D, D2 "REFUTED"; cage classifier "REFUTED"; flow "All three policies refuted"; migration "REFUTED as mechanical 10:10 entries; suggestive as a context factor" | backfill partial; the other three yes (timestamp defects) | 4 + 3 + 3 + 3 | | Being long during the day session | `product-strategy-suite` (family D1) | "No root pays to be long 09:30→16:00 after costs." | yes for this family (study overall: partial) | part of 29 | | Gap continuation in the first 30 minutes | `product-strategy-suite` (family E) | "Refuted in both event classes." | yes for this family (study overall: partial) | part of 29 | | Turn-of-month strength | `product-strategy-suite` (family C1) | "The turn-of-month effect is inverted in this tape." Refuted; flips sign between halves | yes for this family (study overall: partial) | part of 29 | | Crowd attention as a signal | `overnight-three-layer` (B1, plus the attention-arm pre-registration) | "B1 attention-induced buying … refuted" | yes for B1 (study overall: partial) | part of 57 | | Release days are wilder | `product-strategy-suite` (descriptive section); related H2 in `macro-events-fundamentals` | "The folk claim that CPI and payrolls days are dramatically wilder than normal days is not supported." | **post-hoc** ("Computed after the fact and labelled descriptive — no test attached") | 0 (descriptive) | | The pre-FOMC night on NQ | `macro-events-fundamentals` (origin), `pre-fomc-forward-shadow`, `overnight-event-nights`, `overnight-three-layer` (N1) | "N1 · pre-FOMC night · NQ — VALIDATED" | **partial**: validated on the in-sample nights where it was found; forward test has 1 of 8 required observations | 176 + 1 + 20 + part of 57 | | The last half hour, 15:30→16:00 | `close-read-last-half-hour` | "VALIDATED, conditional — ship as a shadow-mode Close Read, not a sized trade." | **post-hoc** (about 25 variants screened) | 25 | ## Total tests - **950** tested cells or arms across the 15 studies in this bundle. - **265** if you leave out the three large grids: rvol-orb's 320 pre-counted cells, the fundamentals study's roughly 176 cells and the crown-policy geometry grid's 189 cells. - The two "validated" ledger items come from that pool: - The pre-FOMC night was first found as one secondary cell in a family the source study counted at about 544 cells across that day's three studies. - The Close Read was the survivor of a post-hoc screen of about 25 variants. - These counts are a **lower bound** for the research program. Other studies on the desk's drives are not in this bundle because they do not back a ledger claim. They include the cross-instrument, jobless-claims, FOMC-day gate, open-factor, symbol-select, state-scalp, book-imbalance and X-flow studies. ## Studies ### 1. prop-firm-strategy-claims - **Backs:** the site's prop-trader strategy-claims page (not a ledger row). - **Verdict, as stated:** "Tape: 0 of 26 cells VALIDATED. … Prop overlays (frozen H-P1): not supported. … Prop business test (frozen H-P2): holds." - **Pre-registered: yes.** - `PREREG-2026-09-16.md` here is byte-identical to the source, and its sha256 `4e921928ecd174744cb1d2970fce62d1c0305015e9308a8c4d2f3aa3242cfe32` matches `PREREG-2026-09-16.sha256` ("frozen 2026-09-16 17:48:13 EDT"). - File order: the prereg was created 17:48:11, `engine.mjs` 17:50:33 and the first output 17:50:48. - The size-sensitivity section is a labelled post-hoc addendum. The site page labels it as a sensitivity. - **Sample:** - In-sample 2019-01-01 to 2023-12-31; out-of-sample 2024-01-01 to 2026-09-11. - MNQ and MES micros, traded off NQ and ES GLBX 1-minute bars. - **Costs:** $1.50 per micro round turn, plus 1 tick of slippage each way on market and stop orders. News stop entries get +4 ticks. - **Arms:** 28, which is 26 tape cells (13 setups × 2 roots) plus prop hypotheses H-P1 and H-P2. - Not counted: 26 coin-flip control streams, and the 520-cell post-hoc size grid. Of those 520 cells, 4 are positive in both halves at list fees, and 3 of the 4 are coin-flip controls. - **Data to rerun:** - NQ and ES 1-minute CSVs for 2018-2026 at `/fp-data/glbx/{NQ,ES}/1m/.csv`, in Databento OHLCV-1m column layout. - CPI, NFP and FOMC timestamps from the fp-context archive (`events/macro-release`, `events/central-bank`). - **Run:** - `node --max-old-space-size=12288 engine.mjs` - `node sim.mjs` - `SIZES=1,3,5,10,20 node sim.mjs` - **Files:** `PREREG-2026-09-16.md`, `PREREG-2026-09-16.sha256`, `RESULTS-2026-09-16.md`, `CATALOG.md` and `SOURCES.md` (the public claims under test), `engine.mjs`, `sim.mjs`, and in `out/`: `tape-summary.json`, `prop-summary.json`, `prop-size-sensitivity.json` and `engine.log`. The `out/*.json` files hold aggregate statistics only. - **Check:** every figure in the site's `strategyClaims.ts` matches these summaries exactly. ### 2. level-breakouts-tape-diagnosis - **Backs:** "Level breakouts". - **Verdict, as stated:** "The published pick family has no edge — replicated three ways." - Net of $4 per round turn plus 1 tick each way, the five variants run from -0.217R to -0.091R per trade. - Gross results are about zero, and hit rates track the breakeven line. - **Pre-registered: post-hoc.** This is a diagnosis written in one pass. - **Sample:** - The breakout replication covers **2026 year-to-date only**: 3,971 sessions across 8 roots and about 5,500 trades per variant. - Its multi-year support is the separate pre-registered pn-001 study (2010-2026) and an outside paper. - The late-session momentum check covers 702 days (2023-2026); the overnight drift check covers 2020-2026. - **Markets:** CL, NQ, ES, GC, ZN, RTY, YM and 6E. - **Arms:** at least 53. That is 26 cells reported in the write-up plus about 27 conditioner splits printed by `study2.mjs`. - **Data to rerun:** GLBX 1-minute CSVs, and the QQQ gamma history at `/fp-data/gex/history` (from Unusual Whales; see `gamma-wall-backfill`). - **Run:** `node scripts-2026-09-15/study.mjs`, and so on through `study6.mjs`. - **Files:** `2026-09-15-why-the-tape-loses.md` (three live-record passages redacted) and `scripts-2026-09-15/study{,2,3,4,5,6}.mjs`. ### 3. orb-vxn-and-gex-regime - **Backs:** "Opening-range breaks", plus the multi-year leg of "Level breakouts". - **Verdict, as stated:** "pn-001 ORB by VXN tercile — REFUTED as a system … pn-070/071 GEX regime — H1 PROMISING, accruing; H2 unreadable." - **Pre-registered: yes.** Both preregs were created at 11:53, before the scripts (11:54) and the results (11:57:45) on 2026-08-22. - **Sample:** - pn-001: NQ and ES, 1-minute, 2010-2026, about 10,500 trades, with quad-witching Fridays excluded. - pn-070: about 20 days of the 2026 forward gamma archive. - **Costs:** NQ 0.5 pt and ES 0.25 pt per side. - **Arms:** 32. pn-001 has 24 cells (2 symbols × 2 opening-range windows × 3 VXN terciles × 2 exits); pn-070 has 8. - **Open item:** pn-070 H1 (breakouts on negative-gamma days) was never closed. It was due for a rerun at about 60 classified days. - **Data to rerun:** NQ and ES 1-minute CSVs; FRED `VXNCLS.csv` (public); QQQ and SPY gamma snapshots for pn-070. - **Run:** `python study_orb_vxn.py` and `python study_gex_regime.py`. - **Files:** `2026-08-22-pn001-orb-vxn.md`, `2026-08-22-pn070-gex-regime.md`, `RESULTS-2026-08-22.md`, `study_orb_vxn.py` and `study_gex_regime.py`. ### 4. rvol-orb - **Backs:** "Opening-range breaks" (both with and without the relative-volume filter). - **Verdict, as stated:** "VERDICT: REFUTED." - Primary cell: n = 577, mean -1.11 pt, t = -0.33. - 0 of 7 instruments replicate. - The unconditional rule nets -0.256 pt (t -0.21). - **Pre-registered: yes.** The prereg, including its amendment, was last written at 21:27:37. That is before `rvol_orb.py` (21:28:24) and the first raw output (21:31:33). - *Timestamp defect:* the document says "Frozen 19:30 MDT" and "AMENDMENT 19:45 MDT". Those are 21:30 and 21:45 EDT, both later than the file itself. - **Sample:** 2010-06-07 to 2026-08-25, 8 instruments. - **Costs:** NQ 1.0 pt per round turn, with sensitivity at 0, 0.5 and 2.0 pt. - **Arms:** 320 pre-counted cells (8 instruments × 5 RVOL buckets × 2 entries × 4 frictions). One was confirmatory. - **Data to rerun:** GLBX 1-minute CSVs for all 8 roots. - **Run:** `python rvol_orb.py`, then `python rvol_orb_battery.py`. - **Files:** prereg, `results.md`, `results.txt` (raw console output), `rvol_orb.py` and `rvol_orb_battery.py`. ### 5. crown-play-policies - **Why it is here:** - It is the parent pre-registration of the gamma-wall rules: Parts C and D define P8, P9 and the first-touch fade. - Its P6 is a 15-minute opening-range-break control. - `crown_policies.py` and `open_factors.py` are code dependencies of every gamma study. - **Verdict, as stated:** all seven Part A policies "refuted". The Part B geometry grid shows "Survivors: none; Suggestive: none". - **Pre-registered: partial.** - Part A was written at 11:57:36, before its code (11:58:29) and results (11:58:53). - Parts B to D were appended to the same file later: its last write was 12:34:38. - The Part B results were written at 12:14:16, so the file system cannot show that Part B's text came before its results. - **Sample:** NQ, 2012-01-03 to 2026-09-04, 3,569 sessions. - **Costs:** 0.25 pt slippage per fill and no commission (the source estimates about 0.006R). - **Arms:** 196, which is 7 (Part A) plus 189 (Part B: 7 policies × 27 geometries). - **Data to rerun:** NQ 1-minute CSVs and FRED VXN. - **Run:** `python open_factors.py` first. It builds the `data/` parquet cache, and it also runs the 2026-09-08 open-factor study, which is not part of this bundle. Then run `python crown_policies.py` and `python crown_geometry.py`. - **Files:** prereg (one live-record sentence redacted), results, geometry results, `crown_policies.py`, `crown_geometry.py` and `open_factors.py`. ### 6. gamma-wall-backfill - **Backs:** "Gamma walls, cages and flow direction". - **Verdict, as stated:** "P8 long-γ fade … REFUTED; P9 short-γ break … REFUTED; Part D … REFUTED; Part D2 … REFUTED; P10 cage held 68 % — descriptive only. The wall-fade line is closed on this sample." - **Pre-registered: partial.** - The original file (12:55:44) predates the data pull, which ran from 12:56:04 to 12:57:38. - Three disclosed changes came after some output existed: - Amendment 2, the proxy spot fix, written after descriptive policy figures had printed. - A walk correction that removed a look-ahead, which had shown 62-64% hit rates. - Part D2, added after Part D was refuted. - *Timestamp defect:* those sections are stamped 13:05, 13:12 and 13:20. But the prereg's last write was 13:03:53, and the results file, including D2, was created at 12:57:48 and last written at 13:06:46. - **Sample:** 730 history days (2023-10-10 to 2026-09-08); 693 sessions evaluated. - **Markets:** NQ, with QQQ strike-level gamma exposure. - **Costs:** 1 pt slippage for Part C; worst-of fill for Part D. The verdict does not depend on costs, because gross results were already negative. - **Arms:** 4 (P8, P9, D and D2). - **Data to rerun:** - Unusual Whales end-of-day strike gamma for QQQ and NDX, plus QQQ daily OHLC per date. Pull with `UW_KEY_FILE= node backfill_history.mjs 2023-10-10 2026-09-08`, then `node backfill_ndx_close.mjs`. This needs your own subscription. - The live 09:10 QQQ snapshots used for proxy validation. These are not included. - NQ 1-minute CSVs. - **Run:** `python open_factors.py`, then `python gamma_backfill.py`. - **Files:** prereg, results (one live shadow-ledger tally redacted), `gamma_backfill.py`, helpers (`crown_policies.py`, `gamma_policy.py`, `open_factors.py`) and the two pull scripts. ### 7. gamma-cage-classifier - **Backs:** "Gamma walls, cages and flow direction". - **Verdict, as stated:** "REFUTED (rule: AUC ≥ 0.65, top ≥ 80%, bottom ≤ 55%)." It was a near miss: AUC 0.658, top tercile 82.0%, bottom tercile 56.4%. - **Pre-registered: yes.** The prereg was created at 13:28:11, the same second as the code; the results followed 18 s later. - *Timestamp defect:* the document says "frozen 2026-09-09 14:20". The results header says 13:28. - **Sample:** 688 sessions, with walk-forward out-of-sample testing on 2025-2026 (398 sessions). - **Costs:** 0.25 pt slippage. - **Arms:** 3 (the classifier, plus conditional rules C1 and C2). C1 and C2 were to be evaluated only if the classifier validated. - **Data to rerun:** the `gex/history` gamma files, NQ 1-minute CSVs and FRED VXN. - **Run:** `python open_factors.py`, then `python cage_classifier.py`. - **Files:** prereg, results, `cage_classifier.py` and helpers. ### 8. options-flow-direction - **Backs:** "Gamma walls, cages and flow direction". - **Verdict, as stated:** "All three policies refuted." - **Pre-registered: yes.** The prereg was created at 13:33:24, before the first flow data file (13:33:31). - *Timestamp defect:* the document says "frozen 2026-09-09 14:45". The results header says 13:35. - **Sample:** 712 sessions, 2023-10-10 to 2026-09-04. - **Costs:** 0.25 pt slippage. - **Arms:** 3 (FL1 to FL3). - **Data to rerun:** Unusual Whales QQQ net-premium ticks and market tide. Pull with `UW_KEY_FILE= node backfill_flow.mjs`, which needs `gex/history` to exist first. Also NQ 1-minute CSVs. - **Run:** `python open_factors.py`, then `python flow_study.py`. - **Files:** prereg, results, `flow_study.py`, helpers and `backfill_flow.mjs`. ### 9. gamma-wall-migration - **Backs:** "Gamma walls, cages and flow direction". - **Verdict, as stated:** "REFUTED as mechanical 10:10 entries; suggestive as a context factor." - All three policies were positive in both halves, but none cleared one-sided p < 0.0167. - **Pre-registered: yes.** The prereg was created at 13:10:11, the same second as the code; the results followed at 13:10:19. - *Timestamp defect:* the document says "frozen 2026-09-09 13:55". - **Sample:** 693 sessions. - **Arms:** 3 (M1 to M3). - **Data to rerun:** the `gex/history` gamma files and NQ 1-minute CSVs. - **Run:** `python open_factors.py`, then `python wall_migration.py`. - **Files:** prereg, results, `wall_migration.py` and helpers. ### 10. product-strategy-suite - **Backs:** - "Being long during the day session" (family D1) - "Gap continuation in the first 30 minutes" (family E) - "Turn-of-month strength" (family C1) - "Release days are wilder" (descriptive section) - **Verdict, as stated:** "Twenty-nine arms run against a 27-test pre-registration, zero validated." - **Pre-registered: partial.** - The prereg was created at 09:58:43, before the runner (10:01:59) and the results JSON (10:02:33). - It falls short in three ways: - Two arms ran beyond the frozen 27. This was declared, and the threshold was corrected. - The prereg file was edited after the results to add an "ANSWERED" banner, and no hash of the original exists. - **The release-day range figures are post hoc.** The source says "Computed after the fact and labelled descriptive — no test attached." That covers $2,880 vs $2,776 on 2020+ and the weekday table. The NQ hour profile, by contrast, was pre-declared as descriptive. - *Timestamp defect:* the document says "Frozen 2026-09-16 10:15 ET", which is after the results JSON. - **Sample:** - 2010-2026 for each root; RTY starts in 2017 and 6E coverage is partial. - Event-conditioned arms run from 2020 onward only. - **Costs:** round-turn costs of NQ $14, ES $29, YM $14, RTY $14, GC $24, CL $24, ZN $35.25 and 6E $16.50. - **Arms:** 29. - **Data to rerun:** GLBX 1-minute CSVs for 8 roots, and the fp-context archive (`features/context_daily.jsonl` and events). - **Run:** `python run_product_strategies.py --json out.json`. It imports `run_overnight_event_nights.py` from the same folder. - **Files:** prereg, `results.md`, `results.json` (aggregates), `run_product_strategies.py` and `run_overnight_event_nights.py`. ### 11. overnight-three-layer - **Backs:** "Crowd attention as a signal" (B1) and "The pre-FOMC night on NQ" (N1). - **Verdict, as stated:** "Of 19 arms across three layers, exactly one passes every frozen test: the pre-FOMC night on NQ." B1 attention is "refuted". - **Pre-registered: partial.** - The design was created at 06:37:45, before the runner (06:38:42) and the results (06:38:58). - The attention-arm prereg was written at 05:53:05. - **Attention (B1)** was cleanly pre-registered: - +$281.58 per night, t 1.57, p 0.117, against a Bonferroni threshold of p < 0.0033. Refuted. - *Placebo caution:* with the attention dates shuffled, the same arm returns +$100.11 (t 0.70). That is about the $98.00 all-nights baseline. Shuffling removes the effect rather than reproducing it, and both write-ups describe this backwards. - The refutation stands on the p-value and on the random-night placebo (p 0.188). - **Pre-FOMC (N1)** is the weak link: - The prereg itself quotes the answer (+$973 net, n=53, t=3.12) from the event-nights run a few hours earlier. - N1 re-measures those same 53 nights, which fall inside the 2016-2026 window where the effect was first found. This is a re-measurement, not an independent confirmation. - Because the event archive's FOMC rows start in 2020, the "2016-21" train half holds only the 16 nights from 2020-21. - *Timestamp defect:* the document says "Frozen 2026-09-16 09:45 ET". - **Sample:** 2,581 NQ nights, 2016-01-05 to 2026-09-11. ES and GC are secondary. - **Costs:** NQ $14, ES $29, GC $24. - **Arms:** 57, which is 19 per root × 3 roots. Fifteen of them were Bonferroni-counted on NQ. - **Data to rerun:** GLBX 1-minute CSVs; FMP `vix-daily.json`; the fp-context archive, including the Wikipedia pageview attention series. - **Run:** `python run_three_layer_overnight.py --json out.json`. - **Files:** both preregs, `results.md`, `results.json` (aggregates), `run_three_layer_overnight.py` and `run_overnight_event_nights.py`. ### 12. overnight-event-nights - **Backs:** "The pre-FOMC night on NQ". This is the first re-measurement. - **Verdict, as stated:** the pre-FOMC arm is "supported" on NQ (n=53, net $972.70, t=3.12) and on ES. Every other arm is inconclusive or suggestive. "The overnight drift does not live only in identifiable event nights." - **Pre-registered: yes.** The prereg was created at 22:42:14, before the runner (22:54:20) and the results (23:26:19). - Pre-FOMC was pre-registered as a pipeline **positive control** for an effect already known, not as a new hypothesis. - **Sample:** 1,642 NQ nights, 2020-2026. - **Costs:** NQ $14, ES $29, GC $24. - **Arms:** 20, which is 7 + 7 + 6 primary cells. - **Data to rerun:** GLBX 1-minute CSVs and the fp-context archive. - **Run:** `python run_overnight_event_nights.py`. It writes its results file into `/fp-context/studies/`. - **Files:** prereg, results and `run_overnight_event_nights.py`. ### 13. macro-events-fundamentals - **Backs:** "The pre-FOMC night on NQ" (this is where the finding originated). Its event-day premium test (H2) is also related to "Release days are wilder". - **Verdict, as stated:** "H1 CONTESTED; H2 REFUTED; H3 Confounded, as predicted; (bonus) pre-FOMC overnight drift: Robust and survives every check". The source also calls it "a forward-shadow candidate, not something to size tomorrow." - **Pre-registered: yes.** The prereg was created at 00:36:30 on 2026-08-26, before the code (00:37:36) and the first output (00:37:41). - Its in-document time, "Frozen 20:25 MDT", is two hours earlier than the file and cannot be verified. - The pre-FOMC drift was a pre-specified **secondary** test ("reported, never confirmatory"). - That test measured **18:00 ET (prior day) to 09:30 ET**: +25.38 bps gross, t +3.61, n=85 after a dated calendar correction. - **Sample:** NQ, 2010-06-07 to 2026-08-25; FMP economic calendar 2016-2026. - **Arms:** about 176, as pre-counted by the study. The study counts about 544 across that day's three studies. - **Data to rerun:** NQ 1-minute CSVs and the FMP economic calendar JSON. The calendar needs an FMP subscription. - **Run:** `python fundamentals_nq.py`. It imports `rvol_orb.py`. - **Files:** prereg, `results.md` (with two dated corrections), `results.txt`, `fundamentals_nq.py` and `rvol_orb.py`. ### 14. pre-fomc-forward-shadow - **Backs:** "The pre-FOMC night on NQ". This is the only out-of-sample test. - **Verdict:** none yet. The rule is "Shadow only". - Promotion needs forward n ≥ 8 (about 2027-08 at the earliest), forward mean net > 0, a forward hit rate of at least 55%, pooled t > 3.0 and positive excess over the non-FOMC baseline. - As of this bundle there is **one** forward observation (2026-09-16). - **Pre-registered: yes.** The spec froze the promotion bar on 2026-08-26 (07:20:57), before any forward observation existed. - **Rule:** long 1 NQ from 18:00 ET on the prior day to the 09:30 ET open on FOMC day, with a cost of 1.0 pt. - **Arms:** 1. - **Data to rerun:** NQ 1-minute CSVs and the FMP economic calendar. - **Run:** `python prefomc_shadow.py [--json]`. It rewrites `/fp-data/studies/prefomc-shadow-track.jsonl`, the forward-track file, which is not included. - **Files:** spec, `prefomc_shadow.py`, `fundamentals_nq.py` and `rvol_orb.py`. ### 15. close-read-last-half-hour - **Backs:** "The last half hour, 15:30→16:00". - **Verdict, as stated:** "VALIDATED, conditional — ship as a shadow-mode Close Read, not a sized trade." - **Pre-registered: post-hoc.** About 25 variants were screened (18 of them are in `close_study.py`), and the survivor then went through robustness checks. - **The survivor:** when the 15:00 to 15:30 move is larger than 0.30%, follow it to the close. - n=540, +5.79 bps per trade, t 2.17, bootstrap p 0.016. - Hit rate 51.5%, which is not significant. - From 2023 to 2026 the base rule is negative on NQ, ES, YM and RTY alike. NQ longs are +2.5 pt and shorts are -8.9 pt. - **Sample:** NQ, 3,948 sessions, 2010-06-07 to 2026-07-24. - **Costs:** NQ 1.0 pt per round turn. - **Arms:** about 25. - **Data to rerun:** 1-minute CSVs for NQ, ES, YM and RTY. - **Run:** `python close_dataset.py`, then the other `close_*.py` scripts. - `close_deep_dive.py` needs `pm_paths.parquet`, but no script on the source drive generates it. - The calendar-study code (OPEX, month-end and quarter-end) was not found. - **Files:** `close-read-study.md`, `close_dataset.py`, `close_study.py`, `close_deep_dive.py`, `close_regime.py`, `close_robustness.py` and `close_cross_symbol.py`. ## Files modified from their source Every bundled file matches its source byte for byte, except the 52 listed in `manifest.json` under `modifiedFromSource`. Those were changed in two ways: - Path neutralization: the research-drive mount became `` in 47 files, and home-directory paths became ``, `` or `` in 5 files. - The five disclosure-rule redactions, in three files. No numbers, verdicts or code logic were changed.