Rejected thesis
Stage-2 trend gate (Weinstein / Minervini) as conditioning filter
Thesis (CONFIRMED for two cohorts): Stage 2 — 50DMA > 150DMA >
200DMA with all three sloping up over the prior 20 days — should
raise the per-event edge of a survivor pattern by selecting
confirmed uptrends, the way relative_drawdown and vix_regime_overlay
are used elsewhere in the repo.
Code: research/stage2_gate.py
Report: research/stage2_gate_report.json (n=137,531)
Edges reported are unconditional (no controls subtracted) since the
script re-uses each source event's own fwd_rets field.
| Cohort × bucket | n | 10d | 20d | hit@20d |
|---|---|---|---|---|
| coil_breakout / all | 937 | +1.73 % | +3.11 % | 0.53 |
| coil_breakout / Stage-2 | 408 | +3.24% | +4.72% | 0.58 |
| coil_breakout / NOT Stage-2 | 529 | +0.57 % | +1.86 % | 0.50 |
| vcp / all | 1213 | +0.16 % | +0.59 % | 0.55 |
| vcp / Stage-2 | 652 | +0.38% | +1.25% | 0.58 |
| vcp / NOT Stage-2 | 561 | -0.08 % | -0.18 % | 0.52 |
| bull_flag / all | 1332 | +0.69 % | +2.40 % | 0.54 |
| bull_flag / Stage-2 | 424 | +1.17 % | +2.24 % | 0.54 |
| bull_flag / NOT Stage-2 | 908 | +0.47 % | +2.48 % | 0.53 |
| pocket_pivot / all | 134049 | +0.32 % | +0.67 % | 0.54 |
| pocket_pivot / Stage-2 | 86051 | +0.30 % | +0.64 % | 0.54 |
Two clean wins, one neutral, one no-op:
coil_breakoutgains a clean lift from Stage-2 (+4.7 % vs +1.9 %/20d, hit 0.58 vs 0.50). The non-Stage-2 portion is what drags the unconditional average down.vcpis rescued from null by Stage-2 (+1.25 % vs -0.18 %/20d). Restores the Minervini context — VCP geometry only matters when the trend backdrop already says "uptrend".bull_flagis unchanged by Stage-2 — the pole-and-channel geometry already implies a local uptrend, so adding an MA-stack requirement is redundant.pocket_pivotstill null inside Stage-2 — confirms the rejection above.
Verdict: Adopt Stage-2 as a stacking gate on coil_breakout
and vcp. Skip for bull_flag (no lift) and pocket_pivot (null
in both buckets).
| Sample | 137,531 |
|---|---|
| Validator | research/stage2_gate.py |
| Verdict | Rejected |
Every result here is reproducible from the script named above. Reports are in the repository.
- Volatility squeeze
- Pre-FOMC drift
- Uptrend pullback
- Momentum continuation
- Industry-relative momentum (at 4-week lookback)
- Earnings-reaction reversal (anti-PEAD)
- Beat-persistence pre-earnings drift
- Sector ETF mean-reversion
- 52-week-high breakout
- Volume accumulation (above-200DMA +...
- Cross-sector momentum
- Analyst-upgrade cluster