docs: lock execution-recovery decisions and ops constraints

Record monotone fill-timing gradient, live [1.57,1.77] bracket, recover-flag
interpretation, gap-cap as third tail-trim, and pre-scheduler ops checklist.
This commit is contained in:
2026-07-18 17:07:22 +02:00
parent 99860dbd13
commit 5a61b164f6
3 changed files with 190 additions and 13 deletions
+16 -6
View File
@@ -74,9 +74,15 @@ Overnight gap on validation entries: mean **0.52%**, median 0.18%, p05
This is not “slippage noise.” It is largely the **overnight momentum drift** that close-fill earns and a 07:00-Berlin scanner (signal yesterdays close → fill tomorrows open) **structurally cannot**. Honest deployable number under that schedule is ~Sharpe 1.2 / CAGR 30%, not 1.77 / 48%.
**Decision baseline going forward:** grade **promotion** under `fill_mode=next_open`; keep close-fill as the historical control for comparability with prior reports.
**Decision baseline going forward (until near-close ships):** grade **promotion** under
`fill_mode=next_open`; keep close-fill as the historical control for comparability
with prior reports.
**Highest-leverage follow-up (not a strategy change):** near-close / MOC-style execution (~15:45 ET) so live fills sit near the close the signal is built on. Simulator proof arm: `stale_close` (signal t1 close, fill t close). Secondary: next-open **gap-cap** (skip open > +2% vs signal close) — measure, dont assume.
**Follow-up (done):** execution recovery matrix — see
**[execution-recovery.md](execution-recovery.md)**. Short version: monotone fill-timing
gradient + DD recovery prove this is *when you fill*; live bracket **[1.57, 1.77]**;
gap-cap dead; no more fill-timing sim on this snapshot; ops move R:R scan to NY
near-close (one scan/day).
### `fip_id` re-derivation — **validated**
@@ -101,10 +107,14 @@ No arm cleared ΔSharpe > 1 SE.
- Regime-conditional max-hold as a “small” experiment
- Treat validation-only max-hold glitter as a free CAGR lift
- Ship vol targeting as edge without a vol-regime sample
- More fill-timing simulation on this snapshot (settled — see execution-recovery.md)
- Dual daily qualifying scans (would break gate-reset validation)
- Gap-up entry filters (third tail-trim failure)
## What to do next
1. **Execution recovery matrix**`stale_close` vs close vs next_open; optional gap-cap under next_open (`scripts/run_execution_recovery_matrix.py`).
2. If `stale_close` ≈ close control: schedule scan near the US close (not a signal rewrite).
3. Until near-close execution ships live: **decision baseline = next_open**.
4. Phase B data work only when wanted: `nasdaq_all` + `fip_id`, earnings calendar, sector residual/caps.
1. **Ship near-close execution** — ops checklist in [execution-recovery.md](execution-recovery.md)
(one R:R scan/day in `America/New_York`, MOC window, partial-bar honesty).
2. Until that ships: **decision baseline = next_open**.
3. Strategy work (nasdaq_all, fip_id, sector) only **after** execution path is decided,
graded under the fill mode you will trade.