# TTM Squeeze

Also known as: BB-inside-KC + momentum.
A Volatility concept (Band & channel systems) in the LuxAlgo Library, with 1 indicator implementation.

## 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](https://www.luxalgo.com/library/concept/bollinger-bands/) contract until they trade entirely inside [Keltner Channels](https://www.luxalgo.com/library/concept/keltner-channels/), the market is "in a squeeze." Because Bollinger width is driven by standard deviation while Keltner width is driven by [ATR](https://www.luxalgo.com/library/concept/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](https://www.luxalgo.com/library/concept/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. Check 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. Count 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. Wait 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. Take 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 = SMA_n(C)
BB_up = Basis + m_bb × SD_n(C)
BB_dn = Basis - m_bb × SD_n(C)
KC_up = Basis + m_kc × ATR_n
KC_dn = Basis - m_kc × ATR_n
Squeeze is ON while BB_up < KC_up and BB_dn > KC_dn, OFF otherwise
The squeeze fires on the first bar it flips from ON to OFF
Mid_t = ((HH_n + LL_n) / 2 + SMA_n(C)) / 2
Momentum_t = LinReg_n(C - 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](https://www.luxalgo.com/library/concept/range-expansion-contraction/), 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** (https://www.luxalgo.com/library/concept/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** (https://www.luxalgo.com/library/concept/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** (https://www.luxalgo.com/library/concept/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.

## FAQ

### What does it mean when the TTM Squeeze fires?

The fire is the first bar where the Bollinger Bands expand back outside the Keltner Channels, ending the squeeze. It marks the start of a volatility expansion, and the momentum histogram on that bar supplies the directional lean. Fires can and do fail, so most traders pair them with structure, volume, or a higher-timeframe filter rather than acting on the dot alone.

### What are the standard TTM Squeeze settings?

The common configuration uses 20-period Bollinger Bands at 2 standard deviations and 20-period Keltner Channels at 1.5 × ATR. Later variants track several Keltner multipliers at once (such as 1.0, 1.5, and 2.0) to grade compression from loose to tight. Settings vary by market and timeframe, so treat the numbers as conventions rather than requirements.

### Does the TTM Squeeze tell you which direction price will break?

Not by itself. The squeeze condition is direction-neutral; it only says volatility is compressed. The momentum histogram provides the directional read, and its side and slope at the release are the traditional guide. Even then, the first move out of a squeeze can be a false break, so direction is a hypothesis to manage, not a forecast.

## Implementations in the Library

- TTM Squeeze (LuxAlgo): https://www.luxalgo.com/library/indicator/ttm-squeeze/

## Related concepts

- Donchian Channels: https://www.luxalgo.com/library/concept/donchian-channels/
- Envelope: https://www.luxalgo.com/library/concept/envelope/
- Bollinger Bands: https://www.luxalgo.com/library/concept/bollinger-bands/
- %B: https://www.luxalgo.com/library/concept/percent-b/
- BandWidth: https://www.luxalgo.com/library/concept/bandwidth/
- Bollinger Squeeze: https://www.luxalgo.com/library/concept/bollinger-squeeze/
- Band Walk: https://www.luxalgo.com/library/concept/band-walk/
- Bollinger Band Tag Reversion: https://www.luxalgo.com/library/concept/bollinger-band-tag-reversion/
- Double Bollinger Zones: https://www.luxalgo.com/library/concept/double-bollinger-zones/
- Fibonacci Bollinger Bands: https://www.luxalgo.com/library/concept/fibonacci-bollinger-bands/

---

Source: https://www.luxalgo.com/library/concept/ttm-squeeze/ (LuxAlgo Library, the encyclopedia of trading & technical analysis). Free to use with attribution: https://www.luxalgo.com/library/license/