Occams — a falsification lab for retail trading hypotheses
Three programmes, six questions, five verdicts — four null, one supported whose entry added nothing — and one refusal at measurement. Every page here is rendered from a hash-chained Register; none carries a script, a network reference or a money figure. The lab's product is its refusals.
Pages
The research console
every record, the controls recomputed
The programme page
what was searched, what it cost, what was found
Conclusions
Surveys
- Survey grid-001-seed20260912
- Survey grid-002-seed20260920
- Readiness under the fifth check — grid-001 seed 20260912
- Readiness under the fifth check — grid-002 seed 20260920
Documents
- A strategy that passed four checks and turned out to be the market
- Extending the lab — a new entry kind, a new grid, your own bars
- How this lab prevents p-hacking
- M0 answers
- PUBLICATION
- The re-score of October 2026
- Occams — runbook
- Setup — clone, configure, run, and burst
- The inference review of 2026-10-03, verified by rerun
- occams-test-lab — FIXES-AND-TESTS
Decisions (ADRs)
- Hypothesis and Strategy are separate aggregates
- The spec that measured is the spec that trades
- Every Strategy declares a stop, and R is planned risk
- Unadjusted prices, with corporate actions as a separate series
- The regime classifier is frozen before any strategy question
- History is partitioned, and the reserve permits one look per spec hash
- The spec hash is identity, not measurement context
- Two event stores, split on publishability
- Approval is a signature, and the proposer never runs on the execution host
- The retirement rule is declared at approval, not decided during drawdown
- Alpha exhaustion is terminal until new data, and replenishment is mechanical
- A declared instrument universe is pooled and costs one search
- Second looks are detected by observation overlap, not prevented
- Forward testing falsifies; it does not confirm
- Approval requires clearing a conservative cost bound
- The proposer emits drafts and cannot spend alpha
- No alpha is allocated to an axis that cannot run
- Required capabilities are identity; the venue is context
- The portfolio envelope binds, and correlation is measured at approval
- Time is an instant, never a date
- The archive stores the bars, not a reference to them
- Signed approvals are the only thing that crosses to execution
- The forward window is declared in trades and in time
- Halts are durable, and clear on their own terms
- The universe is a point-in-time rule, not a list
- FX drift is an exposure, not an edge
- Hypotheses come in two tiers: mechanism and implementation
- The data budget chooses the instrument class
- The apparatus must prove it can accept, not only that it can refuse
- The execution host is a durable process, and it is priced before M1
- The forward period runs before approval, not after
- The forward window executes for real, at minimum size
- The lab has its own falsifier
- Assumptions are discharged in configuration, not in a proof assistant
- Autoresearch: the shape is adopted, the keep rule is refused
- The Verdict freezes the winner cell's hash; the template names the family
- The entry enum is extended by decision, one mechanism at a time
- The calendar is frozen: partitions are cut from a recorded span, never the archive's live one
- The second programme runs beside the first, in the same repository, on its own Register
- A resting limit that the bar opens through fills at the open
- The fill audit is exhaustive, and an unobtainable fill is a missed trade
- Flat bars are named in the record, not cut out of the calendar
- Beating always-long at the same geometry and gate is the fifth check
- No alerting subscription and no execution host inside the cap: FORWARD is a record
- The surface the sweep optimises is the margin over always-long
- The third programme asks whether a margin the screen finds transfers
- Fixes bind forward, and a re-score is a diagnostic, never a verdict
- The null is drawn at the winner's count, by calendar date, with p counted plus one
- The fifth check is side-matched and dependence-aware
- The floor is cleared by a lower confidence bound, and power is planned against a declared alternative
- A plateau is judged in standard errors, without the winner in its own median
- The Register's heads are pinned, and attested outside the repository
- The engine is identified by content, and a dirty tree cannot measure
Drafts — no standing
- DRAFT-001 — Forced selling at index deletion
- DRAFT-002 — High-conviction disclosure drift
- DRAFT-003 — Within-regime continuation on the confirmed class
- DRAFT-004 — Short-term reversal on daily bars
- DRAFT-005 — Reversal after a streak
- Survey candidate 3fff965a58639eae — down_run on dow_30
- Survey candidate 4d1eee50721ff72a — pullback_in_trend on sector_etfs
- Survey candidate 4f0326e3644df864 — down_run on dow_30
- Survey candidate 5193d48bac341ff2 — down_run on index_etfs
- Survey candidate 64d656ca7e638722 — pullback_in_trend on sector_etfs
- Survey candidate 6fe5444b518075b9 — down_run on dow_30
- Survey candidate 719063aad2318c00 — pullback_in_trend on sector_etfs
- Survey candidate 78e13cce5e21fb83 — down_run on index_etfs
- Survey candidate 7ac7bd72aaa1e5f4 — down_run on sp_100
- Survey candidate 7d8f04aa2066452a — down_run on dow_30
- Survey candidate 8835b76f08d63847 — return_below on index_etfs
- Survey candidate 89200ec086be73e6 — return_below on index_etfs
- Survey candidate abd742abc807e288 — return_below on index_etfs
- Survey candidate bb3394ed0820ae72 — down_run on sp_100
- Survey candidate c00c0c7e6fe3d5fb — down_run on sp_100
- Survey candidate e02384ae41677547 — pullback_in_trend on sector_etfs
- Survey candidate edcf23b4b5e9b4f6 — down_run on dow_30
- Survey candidate f2199b5b297d85bb — down_run on sp_100
- Survey candidate f8500a69db544a3c — down_run on sp_100
- Survey candidate f9d09f4299ed5aa7 — down_run on sp_100
- Survey candidate 0dc23760a36e1a1b — breakout_low on sp_100
- Survey candidate 151ea6728ab85559 — breakout_low on index_etfs
- Survey candidate 2f89cd3fc3abbd83 — breakout_low on sp_100
- Survey candidate 387611fc36db0b29 — breakout_low on dow_30
- Survey candidate 42f89ac43ea32bac — breakout_low on dow_30
- Survey candidate 4d1eee50721ff72a — pullback_in_trend on sector_etfs
- Survey candidate 5193d48bac341ff2 — down_run on index_etfs
- Survey candidate 5834abf51248fbb5 — breakout_low on index_etfs
- Survey candidate 5d78cf45a8e7aa9a — breakout_low on sp_100
- Survey candidate 5da80c610ab6da80 — breakout_low on dow_30
- Survey candidate 69ecf3439041f4eb — breakout_low on sp_100
- Survey candidate 71a0d8161a682950 — breakout_low on sp_100
- Survey candidate 8373d84db5ffd36b — breakout_low on dow_30
- Survey candidate 83acca56f082d646 — breakout_low on dow_30
- Survey candidate 8e17b913b3c624f2 — breakout_low on index_etfs
- Survey candidate 9c62b6cd8da2bbb3 — breakout_low on sp_100
- Survey candidate 9ed03d49b0d204e4 — breakout_low on sp_100
- Survey candidate e02384ae41677547 — pullback_in_trend on sector_etfs
- Survey candidate f2199b5b297d85bb — down_run on sp_100
- Survey candidate f9d09f4299ed5aa7 — down_run on sp_100