← Back to Insights

The Squeeze Hunter: A Volatility Breakout Strategy for Prop Firms

2025-12-18

Most traders lose money because they chase the bus after it has already left the station. They buy when Green Candles are huge (FOMO). They sell when Red Candles are scary (Panic).

An Architect does the opposite. We do not chase volatility. We stalk it. We enter when the market is quiet, boring, and "dead." Why? Because physics dictates that energy cannot be destroyed, only stored. Low volatility is simply stored energy.

This is the logic behind our flagship algorithm: The Squeeze Hunter.

The Anatomy of a Squeeze

The strategy is based on a concept popularized by John Carter (TTM Squeeze), but adapted for crypto and futures automation. It utilizes two indicators to detect "Compression":

  1. Bollinger Bands (BB): Measure standard deviation (Volatility).
  2. Keltner Channels (KC): Measure average true range (Trend).

The Logic is binary:

  • The Squeeze (Setup): When the Bollinger Bands trade inside the Keltner Channels, the market is in a state of extreme compression. Energy is building.
  • The Fire (Trigger): When the Bollinger Bands expand and price closes outside the Keltner Channels, the energy is released. The move has begun.

The Algorithm

We don't stare at charts waiting for this. We code it in Pine Script.

Here is the simplified logic structure we use to pass Elite Trader Funding evaluations:

//@version=6
strategy("Codon: Squeeze Hunter", overlay=true)

// --- Settings ---
length = input.int(20, "Length")
multBB = input.float(2.0, "BB Mult")
multKC = input.float(1.5, "KC Mult")

// --- Calculations ---
[middle, upperBB, lowerBB] = ta.bb(close, length, multBB)
[middleKC, upperKC, lowerKC] = ta.kc(close, length, multKC)

// --- Logic ---
// 1. Detect the Squeeze (BB inside KC)
bool isSqueeze = lowerBB > lowerKC and upperBB < upperKC

// 2. Detect the Explosion (Price breaks out)
bool longCond = ta.crossover(close, upperBB) and not isSqueeze
bool shortCond = ta.crossunder(close, lowerBB) and not isSqueeze

// --- Execution ---
if (longCond)
    strategy.entry("Long Squeeze", strategy.long)

if (shortCond)
    strategy.entry("Short Squeeze", strategy.short)

// --- Risk Management ---
// Hard-coded Stop Loss at 1.5x ATR
float atr = ta.atr(14)
strategy.exit("Exit Long", "Long Squeeze", loss=atr*1.5, profit=atr*3.0)

Why It Works for Prop Firms

This strategy is specifically tuned for EOD (End-of-Day) accounts like those at Elite Trader Funding.

  1. High R:R: Squeezes usually lead to trending moves that last for days. We risk $1 to make $3.
  2. Low Win Rate, High Payoff: You might only win 40% of the time. But when you win, you cover 3 losses and still profit.
  3. No Chop: The "Squeeze Filter" prevents the bot from trading in loose, choppy markets where no energy is built up.

Deployment

We deploy this strategy on the 4-Hour Timeframe (H4) for Bitcoin and Gold.

  • The Brain: Pine Script calculates the breakout.
  • The Guard: The Kill-Switch ensures a bad fake-out doesn't drain the account.
  • The Hands: 3Commas executes the trade on the futures exchange.

Conclusion

Stop trying to predict where the market will go. Focus on when the market is ready to move.

Volatility is cyclical. If it is quiet today, it will be violent tomorrow. The Squeeze Hunter ensures you are positioned before the violence starts.

(Want to learn how to automate this? Start with our guide on The Pine Script Manifesto.)