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:
+28
-7
@@ -115,10 +115,24 @@ Full write-up: **[phase-a-matrix.md](phase-a-matrix.md)** ·
|
||||
| Max-hold {45,60,90} | **Note and move on** — validation glitter, train collapse (regime interaction) |
|
||||
| Equity-curve vol targeting | **Reject as edge** on this sample; park vt25 as optional DD insurance only |
|
||||
| Correlation caps | **Reject**; sector caps stay Phase B with reduced expectations |
|
||||
| Next-open fill | **Discovery, not reject** — honest deployable ~Sharpe 1.2 / CAGR 30%. Decision baseline for future promotion = `next_open` |
|
||||
| Next-open fill | **Discovery, not reject** — honest deployable ~Sharpe 1.2 / CAGR 30% under overnight scanner. Decision baseline until near-close ships = `next_open` |
|
||||
| `fip_id` re-derive | **Validated** (IC −0.045, t = −2.92) |
|
||||
|
||||
**Highest-leverage open work:** near-close execution recovery (scheduling, not a new signal). Simulator: `scripts/run_execution_recovery_matrix.py` (`stale_close` + gap-cap).
|
||||
### Execution recovery (same day) — closed as evidence
|
||||
|
||||
Full write-up: **[execution-recovery.md](execution-recovery.md)** ·
|
||||
`reports/execution_recovery_matrix.json`.
|
||||
|
||||
| Finding | Decision |
|
||||
|---|---|
|
||||
| Monotone fill timing (next_open → stale → close) + DD recovery | **When you fill**, not decaying alpha |
|
||||
| Live bracket **[1.57, 1.77]** full Sharpe | Near-close expected near top of bracket; no more fill-timing sim |
|
||||
| Gap-cap | **Dead** — third tail-trim instance |
|
||||
| Auto-`recover: false` | Not a null — bar hit the lower-bound arm by 0.03 train SE |
|
||||
|
||||
**Highest-leverage open work:** **ops** — move the single daily R:R scan to
|
||||
`America/New_York` near-close (checklist in execution-recovery.md). Not more research
|
||||
knobs.
|
||||
|
||||
---
|
||||
|
||||
@@ -126,10 +140,10 @@ Full write-up: **[phase-a-matrix.md](phase-a-matrix.md)** ·
|
||||
|
||||
| Lead | Why it's interesting | Blocker |
|
||||
|---|---|---|
|
||||
| **Near-close / MOC execution** | Recovers the overnight momentum drift a 07:00-Berlin scanner leaves on the table (~0.5 Sharpe / ~18pp CAGR vs close-fill) | Prove with `stale_close` arm; then schedule change |
|
||||
| **`fip_id`** (information discreteness over the 12-1 window) | **Strongest cross-sectional signal measured on this universe** — IC −0.045, t = −2.91, correct sign; re-derived fingerprint matched Phase A | Doesn't improve *this* book. Revisit when the universe broadens |
|
||||
| **Broader universe** (`nasdaq_all`) | Strengthens every week's cross-section and the IC t-stat | Also where `fip_id` could become tradeable |
|
||||
| **Forward paper-trade record** | The only true out-of-sample evidence the snapshot cannot give | Time |
|
||||
| **Near-close / MOC execution (ops)** | Recovers overnight momentum drift left on the table by a morning EU scan; evidence closed | Implement schedule + partial-bar scan path; one qualifying scan/day only |
|
||||
| **`fip_id`** (information discreteness over the 12-1 window) | **Strongest cross-sectional signal measured on this universe** — IC −0.045, t = −2.91, correct sign; re-derived fingerprint matched Phase A | Doesn't improve *this* book. Revisit when the universe broadens — **after** execution path is decided |
|
||||
| **Broader universe** (`nasdaq_all`) | Strengthens every week's cross-section and the IC t-stat | Grade under the fill mode you will trade |
|
||||
| **Forward paper-trade record** | The only true out-of-sample evidence the snapshot cannot give | Time; mark entries at actual near-close fill once ops ships |
|
||||
| **Better target model for clear-air names** | The return is demonstrably there (#2 wins on raw CAGR in *both* train and test); it's the *flat* 3× ATR target that makes it too expensive in risk | Needs a per-name model, not a constant k×ATR |
|
||||
|
||||
---
|
||||
@@ -138,7 +152,8 @@ Full write-up: **[phase-a-matrix.md](phase-a-matrix.md)** ·
|
||||
|
||||
1. **Nested lookback windows are NOT out-of-sample.** The clear-air result (#2) was
|
||||
clean, large, and consistent across five nested windows — and still died on a
|
||||
proper train/test split by entry date. Use `BACKTEST_HOLDOUT_SPLIT`.
|
||||
proper train/test split by entry date. Use `BACKTEST_HOLDOUT_SPLIT` / a named
|
||||
validation window — and do not pretend a repeatedly opened window is pristine.
|
||||
2. **Check what population an ablation actually admits.** The blanket fallback (#3)
|
||||
looked like it tested the "resistance famine" hypothesis. It didn't — 65% of the
|
||||
setups it let in were a different population entirely, and they drove the result.
|
||||
@@ -148,6 +163,12 @@ Full write-up: **[phase-a-matrix.md](phase-a-matrix.md)** ·
|
||||
4. **The iron rule:** a signal earns its way into selection *only* through the
|
||||
factor harness — |mean IC| ≳ 0.03, consistent sign, `reliable: true` (≥ 12
|
||||
non-overlapping windows). Never let an unvalidated score gate setups.
|
||||
5. **Momentum filters are guilty of tail-trimming until proven otherwise.**
|
||||
Independent failures: take-profit exits, FIP as an in-book filter, gap-up entry
|
||||
caps. Cosmetic quality up, P&L down — the right tail *is* the edge.
|
||||
6. **Fill timing is part of the strategy.** Close-fill reports are not deployable
|
||||
numbers for an overnight scanner. Grade promotion under the fill mode you will
|
||||
actually trade.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user