Squeeze on event
Bollinger bands shrink inside the Keltner channel: volatility is compressed, direction not shown.
The indicator compares two volatility envelopes around the close. The Bollinger bands are a 20-bar average of closes plus or minus 2 standard deviations; the Keltner channel is a 20-bar EMA plus or minus 1.5 times a 10-bar ATR. It is on for every bar where both Bollinger bands sit strictly inside the channel, and empty otherwise. It stays on for the whole squeeze, not just its first bar, and says nothing about which way price will break.
How to read it
- Each marker is a one-minute bar inside a squeeze. A run of consecutive markers is one squeeze, and its first marker is where it began.
- On the September 2026 SPY sample about 6% of bars were in a squeeze, across 241 runs averaging about five bars each.
- Read what price does once a run ends: the indicator shows that volatility was compressed, not the direction of the release.
What it outputs
- Squeeze
- True on each one-minute bar where the Bollinger bands sit strictly inside the Keltner channel. Empty on other bars.
When it fires
Fires on every bar while both Bollinger bands are inside the Keltner channel. The first bar of a run is the squeeze start; the run ends on the first bar where either band reaches outside the channel. It flags compressed volatility, not the direction of the next move.
Settings
- bb_window
- Bars in the Bollinger average and standard deviation. Shorter windows make the bands jumpier, so squeezes switch on and off more often; longer windows steady them.
- bb_mult
- Bollinger band width in standard deviations. Lower values narrow the bands and produce more squeezes; higher values widen them and produce fewer. Below zero the bands invert and the test changes meaning.
- kc_ema
- Length of the EMA that centres the Keltner channel. The Bollinger bands centre on a plain average, so this sets how far the two centres can drift apart; the bands nest only while the centres stay close.
- kc_atr
- Length of the average true range that sets the channel width. Shorter values react within a few bars, so the channel can widen or shrink quickly; longer values smooth it over a longer range.
- kc_mult
- Keltner channel width in ATRs. Raising it widens the channel, so the Bollinger bands fit inside more often and squeezes become more frequent; lowering it narrows the channel and cuts them.
Pitfalls
- The name says event, but the output is a state: markers repeat on every bar of a squeeze, so count squeezes by their first bar.
- Runs are short at defaults, about five one-minute bars on average on the sample, so a single squeeze is often noise on its own.
- With a negative kc_mult and bb_mult at zero or above, it never fires. A negative bb_mult turns the test into an overlap check that fires whenever the bands overlap the channel instead of sitting inside it.