Cost note (added 2026-09-02). Every record here dated before 2026-09-01 prices fills at the flat 5bp slippage floor. the per-product restatement measured that no asset in keel's universe reaches that floor — 1.1× to 36.8× — so those profit factors are optimistic by roughly 0.09 at the median. No verdict in this directory changes: the correction only ever moves a number down, and they were already null. Records are appended to, never revised.
This directory is keel's experiment log: pre-registered, reproducible records of
measurements, feasibility studies, and engine-defect findings. Every document states its own
scope and status up front (in-sample vs out-of-sample, "not a promotion decision", "amends
…"), and no document here changes a shipped parameter by itself — decisions land in
trials-ledger.jsonl, the append-only ledger the promotion gates
count; the docs narrate what was measured and why.
Why the .py files are committed. A script in this directory is a claim: the numbers in
the doc beside it reproduce. The driver is committed next to the document that cites it, so
a reader can re-run the measurement rather than trust the prose. Committed .jsonl beside a
driver (e.g. 2026-08-21-rule-family-significance.jsonl) is that run's recorded output.
Bulk sweep output is not committed — it is derived data, regenerated from keel.db
(/docs/experiments/_out/ is gitignored).
Index is newest first, by the date each document carries in its filename.
2026-08-30-slippage-cap-options.md— All three of #523's options for the 50 bp slippage cap, measured on one cohort by one method: raising the cap costs 0.3%–24.0% of net PF, participation scaling makes results 0.9%–38.6% BETTER at this deployment's real $50 clip (a flattery, not a correction), and a $5M admission floor changes no number it keeps while deleting 15 products and live PAXG. Decides nothing · driver2026-08-30-slippage-cap-options.py2026-08-27-external-strategy-evaluation-hazard.md— No new measurement: the fill-model hazard in externally-sourced strategies (#529) — the four questions to answer before porting one (fill model, cost regime, sample size, capability) and the checklist form · cites the 08-13 restatement and the 08-12 fee curve2026-08-22-trailing-vs-static-exits.md— Does the #442 ratchet-only exit policy (ATR trail / break-even roll) helppullback_continuationorrsi_meanrevat the 120 bp fee? No — and the trailing arm is clearly worse; the knobs ship default-OFF · driver2026-08-22-trailing-vs-static-exits.py2026-08-22-optuna-parameter-study.md— Optuna TPE parameter study (60 seeded trials per cell, 3 families × 3 products) producing tuning candidates for the gauntlet, never auto-tuned lives (#476) · driver2026-08-22-optuna-parameter-study.py2026-08-21-rule-family-significance.md— Is a rule family's edge distinguishable from zero at the fee actually paid? 180 pre-registered cells (3 families × 30 products × 2 fee regimes) plus pooled rows (#475) · driver2026-08-21-rule-family-significance.py2026-08-17-honest-cost-restatement-and-dca-ablation.md— Two measurements enabled by Phase 9: the firstkeel simulatere-run under per-product slippage, and the first DCA-family measurement in a fee-explicit harness2026-08-13-restated-under-a-production-faithful-engine.md— Two engine defects invisible to 2,712 passing tests, and what the 08-12 conclusions become without them · drivers2026-08-13-restated-intersection.py,2026-08-13-restated-rsi-scale.py2026-08-12-shipped-defaults-intersection.md— Three rules, 24 assets, zero free parameters: the viable intersection is empty, and one rule fails for the opposite reason first recorded⚠️ amended by the 08-13 restatement · driver2026-08-12-shipped-defaults-intersection.py2026-08-12-rsi-meanrev-scale-vs-selectivity.md—rsi_meanrev's edge is selectivity, not alpha — and the search for it found a simulator defect⚠️ amended by the 08-13 restatement · driver2026-08-12-rsi-meanrev-scale-vs-selectivity.py2026-08-12-fee-curve-and-rsi-meanrev.md— At zero feeturtle_breakoutmakes money andrsi_meanrevdoes not: two failure modes that were one inference away from being pooled · drivers2026-08-12-fee-curve-and-rsi-meanrev-diag.py,2026-08-12-fee-curve-and-rsi-meanrev-sweep.py2026-08-11-round-number-scale.md—is_round_numberhad no sense of scale: the correctness fix, and what it costs live scoring · driver2026-08-11-round-number-scale.py2026-08-11-hourly-param-sweep-turtle-breakout.md— Re-tuningturtle_breakoutto the hourly clock buys 51% and still loses on everything: 0 of 144 parameter sets · driver2026-08-11-hourly-param-sweep-turtle-breakout.py2026-08-11-hourly-backtest-turtle-breakout.md—turtle_breakoutclearsmin_trades=100on hourly bars — and loses on all 19 products tested2026-08-09-tradenation-feasibility.md— Can keel trade through Trade Nation? §28.1 excludes CFDs at the root, which is what Trade Nation is2026-08-09-quantcrawler-teardown.md— What transfers to keel from QuantCrawler's product, strategy and GTM pages — near-term, and later if keel becomes a SaaS2026-08-09-equities-feasibility.md— Can keel trade US stocks, from Coinbase or from anyone else? §71.6's screening axis: what an instrument legally represents2026-08-09-cts-factor-collinearity.md— The suspected momentum cluster in the CTS factors is not there — and the real defect found on the way is a different one · driver2026-08-09-cts-factor-collinearity.py2026-08-09-ctrader-open-api-feasibility.md— Can keel trade through cTrader's Open API? Retail "spot" FX that perpetually rolls is not spot settlement (§56.1 as corrected by §66.3)2026-08-08-between-family-independence.md— The §80.16 between-family independence harness exists, and it is calibrated · driver2026-08-08-between-family-independence.py2026-08-07-unvalidated-skip-set-reassessment.md— Re-assessing the "SOL/LTC/LINK are the unvalidated skip set" claim carried in a live-money config: a documentation correction plus one measurement2026-08-05-coinbase-asset-class-feasibility.md— Coinbase's new asset classes (futures, equities): what keel can actually trade, verified by execution against the live config · driver2026-08-05-coinbase-asset-class-probe.py
2026-07-20-yang-zhang-efficiency.md— Yang–Zhang volatility on 24/7 crypto: the 8× efficiency gain does not replicate — keep close-to-close and ATR (§79.9)2026-07-20-trials-backfill.md— Reconstructing the first 39 rows oftrials-ledger.jsonl, every backfilled row markedseries_missing: true2026-07-20-paper-trading-wiring.md— Paper trading: it never existed, and after wiring it still cannot start — the honest bootstrap finding2026-07-20-multi-slot-sim-and-ensemble-retest.md— Concurrent rule slots in the simulator: the harness limitation was real and fixed, and the ensemble rejection was NOT an artifact2026-07-20-minbtl-sizing.md— MinBTL: how much evidence the Turtle actually needs before its track record means anything (§78.1–§78.3, §73.2)2026-07-20-income-purification.md— The §65.9 purification obligation, run against the real imported history: report-only, what it found2026-07-20-horizon-independence.md— The horizon ladder does NOT add independent evidence: measured cross-horizon P&L correlation 0.508 vs the 0.22 benchmark2026-07-20-guards-and-strategy-review.md— Guards and strategy review against KB sources 58–74, checked against the code (not the KB's description of it), with a ranked change list2026-07-20-first-pbo-run.md— First PBO/CSCV run over the entry-lookback grid: in-sample diagnostic, all columnsdiagnostic_only2026-07-20-exit-lookback-ratio.md— §79.6's monotone prediction forexit_lookbackdoes NOT replicate: no change, stays at 202026-07-20-candidate-universe.md— 936 products screened, 7 viable: the expansion thesis holds, discovery only, nothing admitted2026-07-20-allowlist-screen-first-run.md— The halal admission screen's first run rejects our own allowlist: gate built and run, nothing attested2026-07-20-adx-ablation-and-random-entry-control.md— ADX ablation plus a random-entry control arm, motivated by Katz & McCormick's own out-of-sample finding against ADX gates (§58.2)