Concept

TTM Squeeze

TTM Squeeze, also known as BB-inside-KC + momentum, is a Volatility concept. The Library holds 1 implementation, a working definition you can pull into Quant.

Top TTM Squeeze indicator

The top custom implementation, built on the original standard TTM Squeeze formula.

1 total

Want to trade TTM Squeeze? The implementation below is one prompt away from a backtested strategy in Quant.

What is the TTM Squeeze?

The TTM Squeeze is a volatility-compression setup popularized by John Carter that combines two band systems into one condition: when Bollinger Bands contract until they trade entirely inside Keltner Channels, the market is "in a squeeze." Because Bollinger width is driven by standard deviation while Keltner width is driven by ATR, the bands only fit inside the channels when recent movement is unusually quiet relative to its own average range. The state is marked with dots on a zero line: squeeze on while the bands are inside, squeeze off (the "fire") when they expand back out.

Compression alone says nothing about direction, so the setup pairs the squeeze dots with a momentum histogram, commonly built by fitting a linear regression to price's displacement from an anchor midway between the recent range midpoint and a simple moving average. The working logic is a volatility cycle: contraction tends to precede expansion, so the squeeze identifies the coil, and the histogram's side and slope at the fire suggest which way the release is leaning. None of it is guaranteed; squeezes can fire into failed moves or cycle on and off through chop, which is why most treatments require the release itself, not the compression, to trigger anything.

How to read the TTM Squeeze

The read has two parts: a binary state (in a squeeze or not) and a directional lean taken from the momentum histogram.

  1. 1Check the squeeze state: the dots show "on" when the Bollinger Bands (commonly 20-period, 2 standard deviations) sit fully inside the Keltner Channels (commonly 20-period, 1.5 × ATR), and "off" otherwise.
  2. 2Count the compression: several consecutive squeeze-on bars mean volatility has stayed contracted; longer squeezes are watched for larger releases, though duration promises nothing about the size of the move.
  3. 3Wait for the fire: the first bar where the Bollinger Bands re-emerge outside the Keltner Channels ends the squeeze and is the traditional trigger bar.
  4. 4Take direction from the histogram: positive and rising favors the upside case, negative and falling the downside; a histogram fading back toward zero after the fire is the common exit or stand-aside cue.

How it's calculated

Flags volatility compression by testing whether Bollinger Bands sit inside Keltner Channels, with a regression-based momentum histogram for direction.

Basis=SMAn(C)\operatorname{Basis} = \operatorname{SMA}_n(C)
BBup=Basis+mbb×SDn(C)\operatorname{BB}_{\text{up}} = \operatorname{Basis} + m_{\text{bb}} \times \operatorname{SD}_n(C)
BBdn=Basismbb×SDn(C)\operatorname{BB}_{\text{dn}} = \operatorname{Basis} - m_{\text{bb}} \times \operatorname{SD}_n(C)
KCup=Basis+mkc×ATRn\operatorname{KC}_{\text{up}} = \operatorname{Basis} + m_{\text{kc}} \times \operatorname{ATR}_n
KCdn=Basismkc×ATRn\operatorname{KC}_{\text{dn}} = \operatorname{Basis} - m_{\text{kc}} \times \operatorname{ATR}_n
Squeeze is ON while BBup<KCup and BBdn>KCdn, OFF otherwise\text{Squeeze is ON while } \operatorname{BB}_{\text{up}} < \operatorname{KC}_{\text{up}} \text{ and } \operatorname{BB}_{\text{dn}} > \operatorname{KC}_{\text{dn}}\text{, OFF otherwise}
The squeeze fires on the first bar it flips from ON to OFF\text{The squeeze fires on the first bar it flips from ON to OFF}
Midt=(HHn+LLn)/2+SMAn(C)2\operatorname{Mid}_t = \frac{(\operatorname{HH}_n + \operatorname{LL}_n)/2 + \operatorname{SMA}_n(C)}{2}
Momentumt=LinRegn(CMidt)\operatorname{Momentum}_t = \operatorname{LinReg}_n(C - \operatorname{Mid}_t)
C: close price
H: high price
L: low price
t: current bar index
n: shared lookback for bands, channels, and momentum (default 20)
SMA_n(x): simple moving average of x over n bars
SD_n(x): standard deviation of x over n bars
ATR_n: average true range over n bars
m_bb: Bollinger Band multiplier (default 2)
m_kc: Keltner Channel multiplier in ATR units (default 1.5)
HH_n: highest H of the last n bars
LL_n: lowest L of the last n bars
LinReg_n(x): value at the current bar of a least-squares regression line fit to x over the last n bars

John Carter's original settings are n = 20, m_bb = 2, m_kc = 1.5.

The Squeeze Pro variant grades compression with three Keltner multipliers (2.0 low, 1.5 mid, 1.0 high).

Some platforms build the Keltner Channel from an EMA basis or SMA-smoothed true range, or use an EMA of close in the momentum midline, which shifts timing slightly.

How traders use it

  • As breakout preparation: a squeeze flags compression before a possible range expansion, so traders build watchlists from symbols in multi-bar squeezes instead of chasing moves already underway.
  • As a trigger: the classic entry acts on the first squeeze-off bar in the direction of the momentum histogram, then uses the histogram's fade toward zero to scale out or exit.
  • Stacked across timeframes: squeezes forming simultaneously on, say, the hourly and daily charts are read as deeper compression, on the logic that nested coils release harder; that is a working assumption, not a guarantee.
  • As a regime filter for other systems: squeeze-on periods mark quiet conditions where trend signals tend to whipsaw, so some strategies simply stand down until the squeeze releases.

TTM Squeeze vs related concepts

Bollinger Squeeze: Also a compression signal, but defined from Bollinger Bands alone (band width reaching multi-bar lows) rather than from the bands fitting inside Keltner Channels; the TTM version also adds a momentum histogram as its directional component.

BandWidth: A continuous measure of how wide the Bollinger Bands are. The TTM Squeeze turns a related idea into a binary state by benchmarking band width against an ATR-based channel instead of against BandWidth's own history.

Squeeze Release Direction: The general problem of judging which way any compression resolves. The TTM Squeeze answers it with its momentum histogram; other approaches lean on structure, volume, or higher-timeframe bias instead.

Concept family

Volatility

57 concepts mapped · 57 in the Library

TTM Squeeze FAQ

Turn TTM Squeeze into a trading strategy.

Take the implementation from this page into Quant, then build on it, backtest it on real data, and keep refining it in conversation.