IMPULSE vs Composite gate - empirical tier analysis
Context. 2026-05-14 ~12:15 CT, IMPULSE engine flagged BEARISH conv=0.55→0.60 (strike_stack trigger). Composite scoring engine returned BEARISH score=26-33 the whole time. Engine telegram threshold is 58. No alert fired. SPY proceeded to drop through the Bollinger lower band over the next ~15 min. User flagged the miss as an “early and right” mandate violation.
The proposed fix: tier the score threshold by IMPULSE conviction (e.g. IMPULSE 0.60+ drops threshold from 58 to ~42). Before staging a Codex handoff, I ran the empirical TP-hit rate analysis against the full corpus (2026-04-07 → 2026-05-14, ~5 weeks, 293 paper trades).
The data inverted the recommendation.
Method
- Source:
~/cortanaroi-data/decisions.db.scoring_eventsJOIN~/cortanaroi-data/paper_trades.db.outcomesviapaper_trade_id → trades.id → outcomes.trade_id. - Universe: scoring_events with
trigger LIKE 'impulse%',decision = 'ENTERED',bias != 'NEUTRAL'. n=138. - Outcome metric: TP-hit =
outcomes.pnl_pct >= 0.10(the +10% mandate target within hold). - Baseline cohort: all entered trades regardless of trigger, same bucketing, n=293.
IMPULSE-entered TP-hit rate by trigger × bias
| trigger | bias | n | avg score | TP-hit | TP-hit % |
|---|---|---|---|---|---|
| hiro+strike_stack | BULL | 10 | 72.5 | 4 | 44.4% |
| strike_stack | BULL | 38 | 69.6 | 10 | 27.8% |
| hiro | BEAR | 33 | 37.1 | 7 | 21.9% |
| hiro+strike_stack | BEAR | 6 | 34.5 | 1 | 16.7% |
| strike_stack | BEAR | 33 | 34.4 | 4 | 12.1% |
| hiro | BULL | 18 | 70.4 | 2 | 11.1% |
IMPULSE vs baseline by composite score bucket (TP-hit %)
| bias | bucket | IMPULSE only (TP-hit %, n) | Baseline all (TP-hit %, n) |
|---|---|---|---|
| BEAR | 42-49 | 28.6% (n=7) | 26.3% (n=19) |
| BEAR | 35-41 | 21.1% (n=38) | 21.4% (n=70) |
| BEAR | <35 | 7.7% (n=27) | 15.5% (n=62) |
| BULL | 58+ | 25.4% (n=66) | 22.9% (n=191) |
Findings
1. IMPULSE provides almost no edge over baseline. At every score bucket except one, IMPULSE-tagged trades hit TP at within ±1 percentage point of non-IMPULSE trades in the same bucket. strike_stack alone is barely a signal. hiro alone has the same problem.
2. Today’s BEAR setup was statistically the correct skip. Composite=33 + IMPULSE strike_stack falls in the worst bucket (BEAR <35), TP-hit rate 7.7%. Lowering the threshold to fire that bucket would be 1-in-13 trades hitting TP, well below baseline. The composite gate is not “missing winners” - it’s filtering signals where the option mid only hits +10% one time in thirteen.
3. The hiro+strike_stack compound is the only IMPULSE variant with measurable edge. BULL combo: 44.4% TP-hit vs 22.9% baseline - nearly 2x lift. n=10 is too thin for a hot patch but is the strongest single finding in the corpus. Hold for MK3 lock-in.
4. The 80% TP-hit mandate is structurally unreachable with the current engine + 10% TP target on 0DTE. Across 293 trades: 64 WIN_TP / 109 WIN_partial / 120 LOSS = 22% TP-hit. No bucket - IMPULSE, baseline, BULL, BEAR - exceeds 45%. The mandate as written needs reframing. Two paths:
- Different KPI: target ”% of closes with positive P&L” (~55% achievable, but the 80% mandate language has to change too)
- Smaller TP target: test 5% TP - likely doubles hit rate. Different exit ladder required.
Decision
- Do NOT lower the composite score threshold based on IMPULSE conviction. Data contradicts the original hypothesis.
- Promote
hiro+strike_stackas a separate alert sleeve in MK3 once n hits 30+ entered. Currently n=16 combined BULL+BEAR. Watch over next 2-3 weeks of paper. - Fix the broken counterfactual capture as P0.
scoring_events_hypothetical_outcomeshas 6,048 recommendation rows since corpus start but 100% ofoption_mid_5m/15m/30mcolumns are NULL. Root cause:backfill_skip_hypothetical_outcomes.pylooks forUWClient.get_option_contract_historical_midwhich isNotImplementedError. Without this fix, we can only evaluate the 138 trades we took, not the 5,910 IMPULSE events we skipped - biggest data gap blocking the MK3 strategy revision.
Memory links
- project_early_and_right_mandate
- project_v1_latency_april16
- project_impulse_latency_analysis
- project_win_rate_mandate
- Task #101 (MK3: hiro+strike_stack promotion)
- Task #102 (mandate clarification: TP-hit vs positive-P&L)
- Task #103 (P0: fix hypothetical-outcome backfill)