Skip to content

Compression Pop

A breakout strategy that trades volatility expansion after tight consolidation periods, capturing explosive moves when price breaks out of compression zones.

Visual Overview

Key Concept: Tight consolidation → Volume dries up → Explosive breakout with volume confirmation.

Strategy Logic

Overview

Identifies tight consolidation ranges (compression boxes) characterized by low ATR and flat Bollinger Bands, then trades the breakout when price moves beyond the box with volume confirmation. Adds to positions on retests of the breakout level.

Entry Conditions

  • Tight consolidation: ATR declining, Bollinger Bands flat
  • Volume dry-up during compression phase
  • Price closes beyond box boundary + buffer (0.15x ATR)
  • Volume surge on breakout (or liquidity sweep pattern)
  • No imminent event risk
  • Confirmation: Price stays outside box for at least 1 bar

Entry Logic:

  • Long: Close > box_high + buffer with volume surge
  • Short: Close < box_low - buffer with volume surge

Position Sizing

  • Initial position: 2-3% of portfolio
  • Add on retest of breakout level (maker orders)
  • Maximum 40% allocation per position
  • Maximum leverage: 4x

Exit Conditions

  • Price closes back inside compression box after 3 bars (fakeout)
  • Volume surge fades: Volume drops below 50% of breakout bar within 5 bars
  • Time stop reached: 90 minutes elapsed without follow-through
  • Fakeout pattern: Price whipsaws through both box boundaries within 30 minutes
  • Trailing stop hit: 2x ATR from highest/lowest point

Risk Management

Stop Loss

  • Initial stop: Inside the compression box (opposite boundary)
  • Trailing stop: 2x ATR after position moves 1R in favor

Take Profit

  • Primary target: 2-3x the box height
  • Scale out: 1/3 at 1R, 1/3 at 2R, trail remaining 1/3

Position Management

  • Add on retest: Use maker limit orders at breakout level
  • Scale in: Up to 3 entries if momentum continues
  • Quick exit: If price closes back inside box

Execution Strategy

  • Entry: IOC/taker orders on initial breakout trigger
  • Adds: Maker limit orders on retest of breakout level
  • Exit: Taker orders on invalidation signals

Performance Expectations

  • Win Rate: 50-60%
  • Average Hold Time: 1-3 hours (minimum 60 minutes)
  • Profit Factor: 1.8-2.5
  • Max Drawdown: 10-15%
  • Expected Switching Cost: 18 bps per trade
  • Best Regimes: Range-bound (pre-breakout), Trending (post-breakout)

Configuration

Strategy parameters:

toml
[strategy.compression-pop]
enabled = true
max_allocation = 0.40
max_leverage = 4.0
risk_per_trade = 0.02  # 2% risk

# Compression parameters
box_length = 30  # bars for box definition
buffer_atr_multiple = 0.15
min_compression_bars = 20

# Breakout parameters
volume_surge_threshold = 1.5  # 1.5x average volume
trail_stop_atr = 2.0
time_stop_minutes = 90

# Invalidation
max_bars_inside_box = 3
whipsaw_window_minutes = 30

Technical Parameters

Compression Detection

  • Box Length: 20-50 bars
  • Buffer: 0.15x ATR above/below box boundaries
  • Minimum Compression: At least 20 bars of tight range
  • ATR Decline: ATR should be declining during compression

Breakout Confirmation

  • Volume Surge: >1.5x average volume
  • Price Confirmation: Close beyond box + buffer
  • Time Confirmation: Stay outside box for at least 1 bar

Risk Metrics

  • Trailing Stop: 2.0x ATR
  • Time Stop: 90 minutes
  • Fakeout Window: 30 minutes

Regime Compatibility

Compatible Regimes

  • Range-bound: Ideal for compression formation
  • Trending: Good for breakout follow-through

Avoid Regimes

  • Event-risk: Scheduled events can cause fakeouts

Example Trade

Setup: ETH consolidating in tight range

  • Box Range: $2,400 - $2,450 (50-bar consolidation)
  • ATR: $30 (declining from $50)
  • Volume: Declining during compression
  • Breakout: Price closes at $2,455 (above $2,450 + $4.50 buffer)
  • Volume: 2.1x average (strong surge)
  • Entry: Long at $2,456 (IOC order)
  • Stop Loss: $2,395 (inside box, below $2,400)
  • Risk: $61 per contract
  • Add: Retest at $2,452, added 50% more size
  • Outcome: Price rallied to $2,520, trailed stop to $2,490 (2x ATR = $60), exited at $2,490 for +$34 average profit (+1.4%)

Monitoring

Key metrics to track:

  • Compression box boundaries
  • ATR levels and trends
  • Volume patterns (dry-up then surge)
  • Time in compression
  • Breakout follow-through
  • Retest opportunities
  • False breakout rate

Risk Warnings

  • Fakeout Risk: Many breakouts fail and reverse quickly
  • Event Risk: Scheduled events can cause whipsaw moves
  • Liquidity Risk: Low liquidity during compression can cause slippage
  • Time Decay: Capital locked during long compression periods
  • Overtrading: Not every consolidation leads to explosive breakout
  • Correlation: Multiple compression trades can correlate during market-wide breakouts

Backtest Outline

python
# Pseudocode for backtesting
def define_compression_box(lookback=30):
    box_high = max(high[-lookback:])
    box_low = min(low[-lookback:])
    return box_high, box_low

box_high, box_low = define_compression_box()
buffer = 0.15 * atr

if close > box_high + buffer and volume > 1.5 * avg_volume:
    enter_long()
    set_stop_loss(box_low)
    set_trailing_stop(2.0 * atr)
    set_time_stop(90_minutes)
    
    # Add on retest
    if price_retests(box_high) and volume_ok:
        add_to_position()

elif close < box_low - buffer and volume > 1.5 * avg_volume:
    enter_short()
    set_stop_loss(box_high)
    set_trailing_stop(2.0 * atr)
    set_time_stop(90_minutes)
    
    # Add on retest
    if price_retests(box_low) and volume_ok:
        add_to_position()

# Exit management
if close_inside_box for 3 consecutive bars:
    exit_position()  # Fakeout
elif volume_fades():
    exit_position()
elif time_stop_reached():
    exit_position()
elif trailing_stop_hit():
    exit_position()

Why This Suits Small Capital + LLM Latency

  • Discrete triggers: Breakouts are clear events, not continuous monitoring
  • No sub-second speed needed: Breakout confirmation takes multiple bars
  • Maker adds: Can use limit orders on retests for better fills
  • Low frequency: Only trades when compression resolves
  • Clear invalidation: Easy to identify failed breakouts
  • Tolerates latency: Minutes-scale response time is acceptable