Volatility · 200-800/mo

TTM Squeeze Buy Sell Signals - Complete TradingView Guide

TTM Squeeze buy sell signals for TradingView. Squeeze detection, momentum release, and histogram signals with Pine Script code and NQ and SPY examples.

TTM Squeeze Signal Interpretation

Quick-reference guide to 6 signal types you will see on the chart.

Signal TypeIndicator ConditionMarket MeaningReliability
Squeeze Firing Bullish -> BuyThe histogram crosses above the zero line after the squeeze dots have turned green, indicating the squeeze has fired to the upside.Volatility contraction has ended and the market is releasing energy upward. This is the primary bullish entry signal for trend continuation.4/5
Squeeze Firing Bearish -> SellThe histogram crosses below the zero line after the squeeze dots have turned green, indicating the squeeze has fired to the downside.Bearish momentum release after a period of compression. Price is expected to move lower with increasing volatility. Best in downtrends.4/5
Squeeze On - Momentum BuildingBollinger Bands are inside Keltner Channels. The dots on the subplot turn red (squeeze active) and the histogram flattens near zero.Volatility has contracted significantly. A sharp expansion is coming but direction is unknown. Wait for the histogram to confirm direction before entering.3/5
Histogram Peak Reversal -> Buy/SellThe histogram reaches an extreme value (above +2 or below -2) and then reverses direction, printing a lower peak or higher trough.Momentum exhaustion. The current move has likely climaxed and a reversal or significant pullback is probable. Pair with support or resistance.3/5
Double Squeeze -> Strong BreakoutThe squeeze fires and fails (price returns inside), then squeezes again and fires in the same direction as the first fire.A failed initial breakout traps traders on the wrong side. The second fire carries much more force. This is the highest-probability setup in the TTM Squeeze system.5/5
Histogram Divergence -> Trend ExhaustionPrice makes a higher high but the histogram makes a lower high (bearish divergence), or price makes a lower low but the histogram makes a higher low (bullish divergence).Momentum is weakening despite price continuing in the same direction. A trend reversal is likely. This works especially well on 1h and 4h timeframes for swing trading.4/5

TTM Squeeze Pine Script Signal Code

Ready-to-use Pine Script code for generating buy/sell signals. Copy and paste into your TradingView Pine Editor.

Pine Script v5
//@version=5
indicator("TTM Squeeze Buy Sell Signals", overlay=false)

// Input parameters
squeezeLength = input.int(20, "Squeeze Length")
bbMult = input.float(2.0, "Bollinger Bands Multiplier")
kcMult = input.float(1.5, "Keltner Channel Multiplier")
useTrueRange = input.bool(true, "Use True Range")
histLength = input.int(5, "Histogram Smoothing")
showSqueezeDots = input.bool(true, "Show Squeeze Dots")
showHistogram = input.bool(true, "Show Momentum Histogram")
alertOnFire = input.bool(true, "Alert on Squeeze Fire")

// Bollinger Bands
basis = ta.sma(close, squeezeLength)
dev = ta.stdev(close, squeezeLength)
bbUpper = basis + bbMult * dev
bbLower = basis - bbMult * dev

// Keltner Channel
range_ = useTrueRange ? ta.tr : ta.atr(squeezeLength)
kcUpper = basis + kcMult * range_
kcLower = basis - kcMult * range_

// Squeeze detection: BB inside KC
squeezeOn = (bbUpper < kcUpper) and (bbLower > kcLower)
squeezeOff = not squeezeOn

// Momentum histogram (linear regression slope approximation)
highestHigh = ta.highest(close, squeezeLength)
lowestLow = ta.lowest(close, squeezeLength)
linDev = (close - lowestLow) - (highestHigh - close)
momentum = ta.sma(linDev, histLength)
momColor = momentum > 0 ? color.new(#00C853, 80) : color.new(#FF1744, 80)
histColor = momentum > 0 ? color.new(#00C853, 60) : color.new(#FF1744, 60)

// Squeeze fire detection
squeezeFiredUp = squeezeOff and momentum > 0 and momentum[1] <= 0
squeezeFiredDn = squeezeOff and momentum < 0 and momentum[1] >= 0

// Histogram peak reversal
histPeakUp = momentum > 2 and momentum < momentum[1]
histPeakDn = momentum < -2 and momentum > momentum[1]

// Double squeeze detection
var doubleSqueeze = false
var firstFireUp = false
var firstFireDn = false
if squeezeFiredUp
    firstFireUp := true
    firstFireDn := false
if squeezeFiredDn
    firstFireDn := true
    firstFireUp := false
if squeezeOn and firstFireUp
    doubleSqueeze := false
if squeezeFiredUp and firstFireUp[1]
    doubleSqueeze := true
if squeezeFiredDn and firstFireDn[1]
    doubleSqueeze := true

// Plot squeeze dots
plotshape(showSqueezeDots and squeezeOn, "Squeeze On", shape.circle, location.top, color=color.new(#E040FB, 70), size=size.tiny)

// Plot histogram
plot(showHistogram ? momentum : na, "Momentum Histogram", style=plot.style_histogram, color=histColor)

// Plot zero line
hline(0, "Zero Line", color=color.new(#787B86, 50))

// Plot momentum line
plot(showHistogram ? momentum : na, "Momentum Line", color=momColor, linewidth=2)

// Plot squeeze fire signals
plotshape(squeezeFiredUp, "Bullish Fire", shape.triangleup, location.bottom, color=#00C853, size=size.small)
plotshape(squeezeFiredDn, "Bearish Fire", shape.triangledown, location.top, color=#FF1744, size=size.small)

// Double squeeze labels
plotshape(doubleSqueeze and squeezeFiredUp, "Double Bullish", shape.labelup, location.bottom, color=#006B2E, size=size.small)
plotshape(doubleSqueeze and squeezeFiredDn, "Double Bearish", shape.labeldown, location.top, color=#B71C1C, size=size.small)

// Histogram peak reversal
plotshape(histPeakUp, "Peak Reversal", shape.xcross, location.top, color=#FF9100, size=size.tiny)
plotshape(histPeakDn, "Trough Reversal", shape.xcross, location.bottom, color=#2979FF, size=size.tiny)

// Alert conditions
alertcondition(squeezeFiredUp, "TTM Squeeze Bullish Fire", "TTM Squeeze fired bullish - momentum turning up")
alertcondition(squeezeFiredDn, "TTM Squeeze Bearish Fire", "TTM Squeeze fired bearish - momentum turning down")
alertcondition(squeezeOn, "TTM Squeeze Active", "TTM Squeeze is active - volatility contraction detected")
alertcondition(doubleSqueeze and squeezeFiredUp, "TTM Double Squeeze Bullish", "Double squeeze fired bullish - high probability breakout")
alertcondition(doubleSqueeze and squeezeFiredDn, "TTM Double Squeeze Bearish", "Double squeeze fired bearish - high probability breakdown")

Recommended Parameters for TTM Squeeze

Parameter settings tested across different market conditions and timeframes.

Feature comparison table: Default vs Description
ParameterDefaultDescription
Squeeze Length20Lookback period for both Bollinger Bands (SMA + standard deviation) and Keltner Channel calculations. The standard 20 works across all timeframes. I tested 14 on NQ 5m and got faster signals but more false fires. For SPY daily swing trades, 30 filters out noise better. Stick with 20 until you understand how the indicator behaves on your pair.
Bollinger Bands Multiplier2.0Standard deviation multiplier for Bollinger Bands. Lower values (1.8) make the BB narrower, which means the squeeze condition (BB inside KC) triggers more often. Higher values (2.2) delay the squeeze signal. I keep it at 2.0 for ES futures and change to 1.8 for crypto pairs that need more frequent squeeze detection.
Keltner Channel Multiplier1.5ATR multiplier for the Keltner Channel upper and lower bands. A value of 1.5 is standard for the TTM Squeeze. Raising it to 2.0 makes the KC wider, causing fewer false squeeze activations but potentially missing early moves. I use 1.5 on NQ and 1.8 on BTC because crypto has higher noise levels.
Histogram Smoothing5Smoothing applied to the momentum histogram (linear regression slope approximation). Lower values (2-3) make the histogram more sensitive and give earlier signals but increase whipsaws. Higher values (8-12) smooth the oscillator for cleaner cross signals. I use 5 as default and 8 on 1m charts to reduce noise.
Use True RangeTrueWhen enabled, uses True Range for Keltner Channel calculation. When disabled, uses ATR instead. True Range accounts for overnight gaps which matters for ES and NQ futures. For crypto trading 24/7, ATR works fine and gives slightly more stable channel width. I keep it on for stock index futures.

TTM Squeeze + Pineify Invite-Only: Better Together

TTM Squeeze alone gives you one signal type. Pineify invite-only indicator combines TTM Squeeze with RSI divergences, MACD confirmation, and Supertrend filters in one overlay. Fewer charts, clearer signals.

Instead of switching between 6 different signals on separate charts, you get a single multi-confirmation setup.

See the Invite-Only Indicator

FAQ

TTM Squeeze Signals FAQ

Stop juggling TTM Squeeze with 4 other charts

Pineify combines TTM Squeeze, RSI, MACD, and Supertrend into one invite-only indicator. One click setup.

Try Pineify Free