Skip to content

Strategy Patterns Playbook

Approved Patterns

These patterns have been validated and are approved for use. Follow the implementation guidelines exactly.


Pattern 1: ICT Quasimodo (QM) Reversal

Edge Source

Institutional order flow creates liquidity sweeps before major reversals.

Setup Sequence

1. Trend established (BoS)
2. Liquidity sweep (Sweep)
3. Structure shift confirmation (MSS)
4. Entry at Order Block retest

Implementation

// State machine
var int state = 0  // 0=looking, 1=BoS, 2=sweep, 3=MSS

// State transitions
if state == 0 and detectBoS()
    state := 1
else if state == 1 and detectSweep()
    state := 2
else if state == 2 and detectMSS()
    state := 3
    // Setup complete, wait for retest

// Entry on retest
if state == 3 and priceRetestsOB()
    enterLong()
    state := 0

Risk Parameters

Parameter Default Range
Pivot Length 5 3-8
SL Buffer (ticks) 5 3-10
TP1 R:R 1.0 1.0
TP2 R:R 2.0 1.5-3.0

Known Weaknesses

  • Fails in strong trends without pullbacks
  • Requires clear structure (choppy markets fail)
  • Session-dependent (best in NY AM)

Pattern 2: Session Breakout with Confirmation

Edge Source

Asian range compression releases during London/NY open.

Setup Sequence

1. Define Asian range (20:00-00:00 UTC)
2. Wait for London/NY session
3. Breakout of Asian high/low
4. Confirmation candle close beyond range
5. Entry on pullback to range edge

Implementation

def session_breakout_signal(df, session='london'):
    asian_high = df[df['session'] == 'asia']['high'].max()
    asian_low = df[df['session'] == 'asia']['low'].min()

    current = df.iloc[-1]
    if current['session'] != session:
        return None

    # Bullish breakout
    if current['close'] > asian_high:
        return {
            'direction': 'long',
            'entry': asian_high,  # Pullback entry
            'stop': asian_low,
            'target': asian_high + (asian_high - asian_low)
        }
    # Bearish breakout
    elif current['close'] < asian_low:
        return {
            'direction': 'short',
            'entry': asian_low,
            'stop': asian_high,
            'target': asian_low - (asian_high - asian_low)
        }
    return None

Risk Parameters

Parameter Default Range
Min range (pips) 30 20-50
Max range (pips) 80 60-100
Confirmation bars 1 1-2

Known Weaknesses

  • False breakouts common on NFP/FOMC days
  • Range too wide = poor R:R
  • Range too narrow = noise

Pattern 3: Mean Reversion with Vol Filter

Edge Source

Overextended moves revert when volatility is contracting.

Setup Sequence

1. Price extends beyond 2 ATR from mean
2. Volatility is below average (contracting)
3. RSI/Stochastic shows divergence
4. Entry toward mean with tight stop

Implementation

def mean_reversion_signal(df, atr_mult=2.0, vol_percentile=50):
    current = df.iloc[-1]
    sma = df['close'].rolling(20).mean().iloc[-1]
    atr = df['atr'].iloc[-1]
    vol_pct = (df['atr'].iloc[-1] / df['atr'].rolling(90).mean().iloc[-1]) * 100

    # Only trade in low vol
    if vol_pct > vol_percentile:
        return None

    distance = (current['close'] - sma) / atr

    if distance > atr_mult:  # Overbought
        return {
            'direction': 'short',
            'entry': current['close'],
            'stop': current['close'] + atr,
            'target': sma
        }
    elif distance < -atr_mult:  # Oversold
        return {
            'direction': 'long',
            'entry': current['close'],
            'stop': current['close'] - atr,
            'target': sma
        }
    return None

Risk Parameters

Parameter Default Range
ATR multiplier 2.0 1.5-3.0
Vol percentile 50 30-70
Mean period 20 10-50

Known Weaknesses

  • Fails spectacularly in trending markets
  • Requires strict vol filter
  • Max 1 position at a time

Pattern 4: Momentum Continuation

Edge Source

Strong moves often continue after brief consolidation.

Setup Sequence

1. Strong move (>1.5 ATR candle)
2. 2-5 bars of consolidation (<0.5 ATR range)
3. Break of consolidation in original direction
4. Entry on break, stop below consolidation

Implementation

// Detect impulse
impulse = math.abs(close - open) > ta.atr(14) * 1.5
impulseDir = close > open ? 1 : -1

// Detect consolidation (2-5 bars, range < 0.5 ATR)
consol = ta.highest(high, 5) - ta.lowest(low, 5) < ta.atr(14) * 0.5

// Entry on break
longEntry = impulseDir == 1 and consol[1] and close > ta.highest(high[1], 5)
shortEntry = impulseDir == -1 and consol[1] and close < ta.lowest(low[1], 5)

Risk Parameters

Parameter Default Range
Impulse threshold 1.5 ATR 1.2-2.0
Max consol bars 5 3-8
Consol range max 0.5 ATR 0.3-0.7

Known Weaknesses

  • Whipsaws in choppy markets
  • Requires clear impulse
  • Time-sensitive (stale setups fail)

Anti-Patterns (DO NOT USE)

Anti-Pattern 1: Indicator Stacking

Description: Combining 5+ indicators hoping for confluence.

Why It Fails: - Overfitting to historical data - Conflicting signals cause indecision - Each indicator adds lag

Instead: Use max 2-3 complementary indicators.

Anti-Pattern 2: Optimization to Perfection

Description: Parameter optimization until backtest Sharpe > 3.

Why It Fails: - Curve fitting to noise - OOS performance collapses - Parameters break on new data

Instead: Accept Sharpe 1.0-2.0 with robust parameters.

Anti-Pattern 3: Ignoring Costs

Description: Backtesting without spreads, commissions, slippage.

Why It Fails: - False profitability - High-frequency strategies destroyed by costs - Reality check at deployment

Instead: Include 1.5x expected costs in backtest.

Anti-Pattern 4: Single Regime Specialist

Description: Strategy only works in trending markets.

Why It Fails: - Markets change regimes - No warning when regime shifts - Catastrophic losses possible

Instead: Either filter for regime OR be robust across regimes.


Pattern Selection Guide

Market Condition Recommended Pattern Avoid
Low vol, ranging Mean Reversion Momentum
High vol, trending Momentum Mean Reversion
Session open Session Breakout Mean Reversion
Clear structure ICT QM Momentum
Choppy/unclear NONE - sit out All patterns

Pattern Combination Rules

  1. Never run opposing patterns simultaneously on same instrument
  2. Correlation check: Patterns on same instrument should have correlation < 0.5
  3. Risk aggregation: Combined exposure across patterns ≤ 2x single pattern risk
  4. Regime filter: If using regime-specific pattern, must have regime detector active