
Compression precedes expansion — wait for the Bollinger bands to squeeze tight, then ride the breakout. John Bollinger's classic volatility-cycle play.
Bollinger Bands wrap around a moving average (default SMA-20) at a fixed standard-deviation distance (default 2×). When the market is volatile, the bands are wide. When the market is quiet, they squeeze tight together.
John Bollinger himself observed: periods of low volatility tend to be followed by periods of high volatility — and vice versa. The squeeze is therefore a setup, not a signal: it tells you a volatility expansion is coming, but not in which direction.
This strategy catches the long side of that expansion:
(upper − lower) / middle — a relative measure of how tight the bands areThe squeeze-threshold is the most sensitive parameter. Lower threshold (e.g. 0.05) = only the tightest squeezes count — fewer, higher-quality setups. Higher threshold (e.g. 0.2) = more setups, also more false breakouts. Default 0.1 is a sensible starting point on daily crypto charts; weekly charts may want tighter.
The breakoutDirection parameter has both long_only (default) and both options reserved — but the platform engine currently only supports long-side trades, so both behave identically. The parameter is kept for future short-strategy support.
| Name | Default | Range | Description |
|---|---|---|---|
| BB Period | 20 | 5–100 | Number of candles for the moving average + standard-deviation window. Default 20 — Bollinger's canonical value. |
| Standard Deviation | 2 | 0.5–5 | Multiplier for the standard deviation. Default 2.0 means upper/lower bands sit 2σ from the mean — captures ~95% of price action. |
| Squeeze Threshold | 0.1 | 0.01–0.5 | Normalized band width below which the market is considered 'in squeeze'. 0.1 = bands are within 10% of the middle. Lower = stricter (fewer trades). |
The pre-baked mini-backtest is refreshed daily — check back soon or start a live run in the Arena.
Run in Arena →// Indicators
middle = SMA(close, period)
std = stddev(close, period)
upper = middle + std_dev * std
lower = middle - std_dev * std
bb_width = (upper - lower) / middle
// State tracking
was_squeezing[i] = bb_width[i-1] < squeeze_threshold
// Entry
if was_squeezing and close > upper and position.is_flat:
BUY
// Exit
if close < middle and position.is_long:
SELLBoth are breakout strategies that use bands around a moving average. Keltner uses ATR (Average True Range) for band width — wider when volatility is high. Bollinger Bands use standard deviation — also volatility-sensitive but with a different math basis (StdDev considers all close moves vs ATR which considers full bar ranges incl. gaps). The key strategic difference: **Keltner is a direct breakout** (BUY when close > upper band, anytime). **BB Squeeze adds a setup condition** (close > upper band AND we were just in a squeeze) — it's a filter on top of the breakout. BB Squeeze trades less but tries to be more selective about which breakouts to take.
At threshold 0.5 (50% band width), almost every period qualifies as 'squeeze' — the setup condition becomes meaningless. The strategy degenerates into a pure 'close > upper band' breakout, similar to a momentum-band cross. Useful as a control experiment to see how much value the squeeze filter actually adds vs the raw breakout signal.
Three classic failure modes: 1. **False breakout** — bands squeeze, price pops above upper band, but it's a fake-out and immediately reverses. The strategy buys at the top of the wick, gets stopped at middle band a few candles later. 2. **Downside squeeze** — bands squeeze, then the breakout fires *downward*. Long-only strategy misses the move entirely. With a 'both' (long+short) parameter this would be catchable, but the platform engine doesn't support short trades yet. 3. **Squeeze-but-no-breakout** — bands stay tight for weeks. The strategy just doesn't trade. Not a loss, but no opportunity captured either. All three are inherent to the volatility-cycle approach. Combining with the ATR or Bullmarket-Ampel filters in our platform helps avoid #1 (false breakouts in noise) and #2 (downside breakouts in bear markets).
EMA mid-line plus ATR-scaled bands — breakout above the upper band signals real momentum, mid-line exit catches reversals early. ATR-adaptive trend following.
The configurable trend-switcher — two exponential moving averages cross, and the trade direction flips. Faster than Golden Cross, simpler than EMA Trend Bias.
The momentum classic — Moving Average Convergence Divergence in its purest form. Two modes: signal-line cross or histogram flip.
Check out our Strategy Insights Reports — pre-baked deep-dives with historical results, comparisons, and market context.