JUDAS REVERSAL
Pre-NY 08:00–09:30 sweep of overnight accumulation grabs liquidity, then reclaims back inside the range. Fade on the reclaim, time-exit at 09:30. Strongest universal cohort in the system: 7/7 symbols, 6/6 years, 67–77% WR at +1.04 to +1.26 ExpR.
updated 2026-04-30The setup
Between 18:00 the prior evening and 08:00 ET today, price chops in a tight overnight accumulation range. Stops sit beyond both extremes — late-bird breakout traders above the high, fade-the-rally shorts below the low. From 08:00 to 09:30, the pre-NY session executes a textbook ICT Power-of-3 manipulation leg: it sweeps one extreme to grab those resting orders, then reverses.
The trade is the reverse leg. When price closes back inside the accumulation range after sweeping, that “reclaim” candle is the fade entry. Targets sit at the midpoint, the opposite extreme, and the 09:30 RTH open price (which the trade time-exits against by definition).
This is the strongest universal cohort we have ever produced in cross-symbol testing.
Entry rules
- Window: 08:00–09:30 ET. Skip Saturday and Sunday.
- Accumulation: 18:00 prior day → 07:59 today, ≥ 200 1m bars.
acc_hi/acc_loare the wick extremes. - Sweep candidate: first 1m bar after 08:00 with
high > acc_hi(SHORT cand) orlow < acc_lo(LONG cand). If both extremes get pierced before reclaim, the day is range expansion, not a Judas — skip. - Reclaim trigger: first subsequent bar that closes back inside the range (close <
acc_hifor SHORT, close >acc_lofor LONG). - Entry: reclaim bar close (MARKET fill).
- Stop:
sweep_extreme ± 0.05 × atr_proxy— extends if the sweep keeps running past its initial wick before reclaim. - Targets (bracket):
- T1 — 1R partial
- T2 —
acc_mid(the natural Judas magnet — what the prediction line targets) - T3 — opposite acc extreme (full reclaim runner)
- Time-exit: 09:30:00 ET via
ttl_ts. The strongest backtest target was the 09:30 RTH open price itself, but that price isn’t known until the trade is already closing — so the live target isacc_mid.
Cross-symbol backtest
scripts/research/backtest_judas_swing.py, ~5 years per symbol:
| Sym | n | WR @ 09:30 | ExpR @ 09:30 | yrOK |
|---|---|---|---|---|
| MNQ | 310 | 67.4% | +1.04 | 6/6 |
| MES | 292 | 67.5% | +1.26 | 6/6 |
| MYM | 314 | 65.0% | +1.14 | 6/6 |
| MGC | 347 | 71.5% | +1.14 | 6/6 |
| MCL | 361 | 67.6% | +1.01 | 6/6 |
| SI | 360 | 69.2% | +1.06 | 6/6 |
| MBT | 184 | 75.0% | +1.02 | 6/6 |
Every symbol positive. Every year positive. Both directions positive. No allowed-direction pruning required.
3-tier classifier — S1 (0809 zone bias) filter
A separate stacking audit (backtest_judas_stacks.py) tested three confluence filters against the Judas pool. One stood out — the 0809 zone bias filter is universally positive when aligned and universally negative when opposed.
S1 ALIGNED → PRIME tier
- LONG entry + bias ∈ BULL_SPRING, or
- SHORT entry + bias ∈ BEAR_SPRING
| Sym | Δer @ 1R | Δer @ MID | Δer @ 09:30 | WR lift |
|---|---|---|---|---|
| MNQ | +0.31 | +0.64 | +0.45 | +13 pp |
| MES | +0.26 | +0.72 | +0.42 | +13 pp |
| MYM | +0.36 | +0.71 | +0.40 | +14 pp |
| MGC | +0.34 | +0.80 | +0.52 | +13 pp |
| MBT | +0.28 | +0.71 | +0.44 | +12 pp |
★ UNIVERSAL 5/5 syms positive on every target. Sample sizes 156–262 per sym. Probability lifts 70 → 80.
S1 OPPOSED → KILL
- LONG entry + bias ∈ BEAR_SPRING, or
- SHORT entry + bias ∈ BULL_SPRING
| Sym | Δer @ 1R | Δer @ MID | Δer @ 09:30 |
|---|---|---|---|
| MNQ | −0.18 | −0.37 | −0.62 |
| MES | −0.16 | −0.36 | −0.44 |
| MYM | −0.18 | −0.36 | −0.43 |
| MGC | −0.25 | −0.51 | −0.73 |
| MBT | −0.21 | −0.57 | −0.55 |
★ UNIVERSAL 5/5 syms NEGATIVE. WR collapses to 10–17% on the MID target. The line is dropped entirely in this state — no emit, no chart line.
Live constraint
The 08:00–08:59 zone only fully forms at 09:00. Roughly 95% of reclaims fire before then, when the bias hasn’t locked yet — those default to base tier. So in practice S1 acts primarily as a KILL filter in live (~10% bad-tail removal), with PRIME as a rare bonus on later reclaims.
Excluded symbols
MCL and SI are excluded from S1 entirely — at their volatility, the 0809 zone forms unreliably and the alignment delta is mixed. They emit base tier on every Judas reclaim with no S1 gating.
Stacks tested but not shipped
| Stack | Verdict |
|---|---|
| S2 — PRELON SWEEP conflict (Asia-extreme run during 00:00–01:59) | Mixed, ~3/7 syms positive. Not universal. |
| S3 — MN-PDC opposite-half (reused MN HOLD overlay) | Marginal, mixed by target. Not shipped alone. |
| S1 + S3 stack | Universal but gain over S1 alone is small for added complexity. |
Probability calibration
| Tier | Base prob | Conf | Sym scope | Trigger condition |
|---|---|---|---|---|
| JUDAS REV PRIME | 80 | HIGH | NQ / ES / YM / GC / BTC | reclaim ≥ 09:00 + 0809 bias aligned |
| JUDAS REVERSAL | 70 | HIGH | all 7 | every other case (incl. MCL / SI on every fire) |
| KILL | — | — | NQ / ES / YM / GC / BTC | reclaim ≥ 09:00 + 0809 bias opposed |
The base 70 matches the pooled WR across all 7 symbols at the 09:30 target.
Replay validation
30 trading days × 7 symbols (scripts/research/replay_judas.py):
- 80 raw detections → 72 emits after S1 KILL filter
- 8 KILLs distributed: MBT 3 · MES 1 · MGC 1 · MNQ 1 · MYM 2 (zero on MCL/SI as designed)
- 1 PRIME emit (the rare aligned-late-reclaim case)
- 33 LONG / 47 SHORT — natural pre-NY Judas distribution skews toward fading sweep-up
- ~2.7 emits per trading day pooled across all 7 symbols
- Skip-reason ratio clean:
NO_SWEEP_OR_BOTHdominant (range expansion days),ACC_INCOMPLETErare (only on contract-roll boundaries)
Why Tier 1
This is the only setup in the system to satisfy both of these criteria simultaneously:
- Universal cross-asset. Same rule, same numbers, every contract — index, gold, oil, silver, BTC all positive at the same 67–77% WR band.
- Universal cross-time. Every year of the 5–6 year backtest, including the 2026 YTD slice, came in positive. No regime-specific decay.
It also has a clean structural skip-rule (range expansion → not Judas) and a hard time-exit (09:30 RTH open) that prevents trade-management drift.
What replaced AMD
The legacy AMD model is the exact same Power-of-3 thesis but with a 09:30 entry — fade the manipulation after RTH opens. Direct comparison on MBT was decisive: AMD-at-09:30 produced 58% WR / +0.20R / 5/6 yrs positive vs Judas-on-reclaim 75% WR / +1.02R / 6/6. The reclaim entry captures the move 30–60 minutes earlier, with a tighter stop and the same time-exit.
AMD is no longer in the live setup engine. Judas Reversal replaced it across all symbols.
Implementation
- Setup engine:
setup_generator.py:scan_judas. New helpers_judas_acc_extremes(),_judas_manip_bars(),_judas_detect(),_judas_zone_0809_bias(). Constants:JUDAS_PRIME_SYMS,JUDAS_BULL_BIAS,JUDAS_BEAR_BIAS,JUDAS_BIAS_LOCK_HM=(9,0). Universal context attached on every emit. One-shot per(sym, date). - Live HUD:
smc_analysis.py— new judas block before pre-open range. Emitsjudas_active,judas_tier,judas_s1,judas_prob,judas_dir,judas_entry,judas_stop,judas_target_mid,judas_target_opp,judas_acc_hi,judas_acc_lo,judas_reclaim_tsto the HUD feed. KILL state forcesjudas_active=False. - Prediction model:
track_predictions.py:model_judas_reversal— reads tier from HUD, picks prob 80 / 70 / drop-line accordingly. Promotes line name toJUDAS REV PRIME LONG/SHORTwhen aligned. - Chart line:
PredictionModel.csmirrors the same logic. 60-min expire window covers 08:00 fire through 09:30 time-exit. - Auto-stacked overlays: every Judas line inherits the universal
add_line()deltas — 1H structure GOLD (CHoCH / BOS / CISD alignment), MN HOLD confluence, regime-extreme dampening.
Research links
- Cross-sym universal backtest:
scripts/research/backtest_judas_swing.py - Stacking audit:
scripts/research/backtest_judas_stacks.py - Live replay validator:
scripts/research/replay_judas.py - Related model: AMD (legacy 09:30 entry) — same thesis, weaker fill
- Concept: Power of 3, Liquidity raid
- Filter source: 0809 SEQ — the bias used for S1 tiering
History
- 2026-04-30 — Shipped. Backtest
backtest_judas_swing.pyproduced the strongest cross-symbol result on record: ★ UNIVERSAL 7/7 syms × 6/6 yrs positive at the 09:30 target, WR 67–77%, ExpR +1.04 to +1.26R. Full pipeline wired acrosssetup_generator.py(scan_judas + helpers),smc_analysis.py(judas_* HUD block),track_predictions.py(model_judas_reversal), andPredictionModel.cs(JUDAS REV LONG/SHORT chart line). AMD model retired. - 2026-04-30 — 3-tier S1 filter added same day. Stacking audit
backtest_judas_stacks.pytested three confluence filters (0809 zone bias, PRELON SWEEP conflict, MN-PDC opposite-half). Only S1 (0809 bias) was universal — ALIGNED 5/5 syms positive Δer +0.26 to +0.80, OPPOSED 5/5 syms negative Δer −0.16 to −0.73. Wired as KILL (drop emit on opposed) + PRIME (prob 80 on aligned, reclaim ≥ 09:00) + base (everything else). MCL/SI excluded from S1 (unreliable bias at low volatility). Replay 30d × 7 syms: 80 raw → 72 emits, 8 KILLs distributed cleanly across PRIME-tier symbols, 1 PRIME emit. S1 functions primarily as a quality filter in live since most reclaims fire before 09:00.