TTM Squeeze and Volatility Compression Strategies: John Carter's Framework for Futures Trading
Overview #
Overview #
The TTM Squeeze identifies volatility compression — the quiet before a directional storm. It works by comparing two volatility measures: Bollinger Bands (which use standard deviation) and Keltner Channels (which use Average True Range). When Bollinger Bands contract inside Keltner Channels, the market is coiling. When they expand back out, the coil releases.
This isn't a standalone buy/sell signal. It's a regime-detection engine that tells you the market is building pressure and approaching an inflection. The direction of that release — and whether it's real or a head fake — requires the momentum histogram, market internals, and broader context to confirm.
John Carter popularized the TTM Squeeze through his Simpler Trading platform, but the underlying mechanics were well-understood by professional traders before he packaged them.
What makes the squeeze powerful in futures trading is its versatility across timeframes. On a 5-minute chart, it captures intraday consolidations that resolve into trend runs. On a 4-hour or daily chart, it identifies major accumulation or distribution phases that precede multi-day directional moves. @ZachC documented using TTM_SQZ alongside TTM_Pivot and the $TIKSP market internal for his first futures account, entering positions after the open auction completed and squeeze signals aligned.[2]
This article covers the complete TTM Squeeze workflow: how the compression state forms, how to read the momentum histogram, how to time entries on the release, and how to manage risk through volatile expansion periods. It also addresses the market regime filtering that separates high-probability squeeze setups from noise.
Key Concepts #
Bollinger Bands (BB): A volatility envelope constructed by placing bands a set number of standard deviations above and below a simple moving average. Standard settings: 20-period SMA with 2.0 standard deviation multiplier. The bands expand when price dispersion increases and contract when price becomes range-bound. See Bollinger Bands for full mechanics.
Keltner Channels (KC): An ATR-based volatility envelope using an exponential moving average as the midline. Standard settings: 20-period EMA with 1.5x ATR multiplier. Unlike Bollinger Bands, Keltner Channels use Average True Range, which captures gaps and full range moves — critical for futures markets where overnight events create regular gaps. See Keltner Channels for complete coverage.
Standard Deviation (StDev): A statistical measure of price dispersion around the mean. When price is volatile and moving directionally, standard deviation rises. When price consolidates, it falls. Bollinger Bands track this.
Average True Range (ATR): A non-directional volatility measure that captures the full daily range including gaps. ATR doesn't distinguish between upward and downward volatility — it measures the total range. Keltner Channels track this. See Average True Range (ATR).
Squeeze ON: The state where Bollinger Bands are fully contained inside Keltner Channels. This means directional volatility (standard deviation) has compressed below non-directional volatility (ATR). In most implementations, this is shown with red or gray dots on the zero line.
Squeeze OFF: The state where Bollinger Bands have expanded outside the Keltner Channels. Directional volatility is expanding. The coil is releasing. Shown as the dots disappearing or turning green.
Momentum Histogram: A MACD-derived oscillator (or linear regression slope variant) plotted alongside the squeeze dots. It measures the direction and acceleration of price movement. The histogram determines whether the release is bullish or bearish, and whether that bias is strengthening or fading.
Squeeze Release: The moment when the squeeze state transitions from ON to OFF. This is the trigger event — the market has compressed and is now expanding. The release alone is not an entry signal; momentum confirmation is required.
False Release: A brief squeeze-OFF state that immediately returns to squeeze-ON. The compression wasn't deep enough, the duration wasn't long enough, or the broader context didn't support a directional move. False releases are common and avoiding them requires momentum and regime filtering.
The false release is the squeeze's most common trap. After 8-12 bars of compression, the impulse is to enter the moment dots disappear. Don't. Require minimum 2 consecutive bars of expanding momentum and release bar volume above 120% of average before committing capital. One bar off the dots is noise — not a signal.
How the Squeeze Forms: BB Inside KC #
The mathematics are clean. When Bollinger Bands sit fully inside Keltner Channels, two conditions hold simultaneously:
- Upper BB < Upper KC
- Lower BB > Lower KC
Standard parameters: Bollinger Bands: 20-period SMA, 2.0 standard deviation multiplier. Keltner Channels: 20-period EMA, 1.5x ATR(20) multiplier.
Mathematically, the squeeze ON condition requires that 2.0 × StdDev(20) < 1.5 × ATR(20), which simplifies to StdDev/ATR < 0.75. You're measuring the ratio of price dispersion to average range. When that ratio drops below 0.75, the market is compressing directionally relative to its absolute range — the definition of consolidation.
Here's a concrete example with ES prices: SMA(20) = 5,000. StdDev(20) = 6 points → BB half-width = 12 points. ATR(20) = 10 points → KC half-width = 15 points. Upper BB = 5,012 / Upper KC = 5,015 → BB inside KC ✓. Lower BB = 4,988 / Lower KC = 4,985 → BB inside KC ✓. Squeeze ON.
If the market then gets choppy and StdDev rises to 9: Upper BB = 5,018 / Upper KC = 5,015 → BB outside KC. Squeeze OFF — the release has fired.
The alternative KC multiplier setting is 1.0x ATR instead of the standard 1.5x. The Squeeze Pro variant uses the tighter 1.5x KC to identify only the most extreme compression states.
Squeeze duration matters. A 5-bar squeeze is a blip. A 15-bar squeeze on a 15-minute chart is 3+ hours of compression — that's meaningful energy building. Minimum meaningful squeeze: 5+ consecutive bars. Optimal: 8-15 bars. Extended squeezes of 20+ bars become structurally problematic because the market may be at equilibrium rather than accumulating energy for a move.
The Momentum Histogram #
The histogram is what makes the TTM Squeeze a directional strategy rather than just a volatility signal. The squeeze tells you the market is coiling. The histogram tells you which way it's likely to release.
Most TTM Squeeze implementations use one of two momentum calculations:
MACD-derived histogram (common in NinjaTrader and TradingView implementations): histogram = MACD_line - MACD_signal, where MACD uses standard 12/26/9 EMA settings.
Linear regression slope (Carter's original TTM approach): momentum = LinRegSlope(close - midpoint, 20), where midpoint is (Highest High + Lowest Low) / 2 over 20 periods.
Both approaches reach the same conclusion in practice. What matters for trading decisions:
- Sign: Is the histogram above or below zero? Above = bullish bias, below = bearish.
- Direction: Is the current bar taller or shorter than the prior bar? Growing histogram = momentum strengthening. Shrinking = fading.
- Color: Standard color coding: green bars = bullish (positive and/or growing), red bars = bearish (negative and/or shrinking).
The critical rule: during the squeeze, the histogram moves toward the direction of the eventual release. Watch whether it's drifting toward positive or negative while the dots are on. That drift tells you where the pressure is building.
Histogram interpretation during active squeeze: Oscillating near zero: No directional bias. Trending positive: Bullish pressure accumulating. Trending negative: Bearish pressure accumulating. Reversing direction late in squeeze: Potential for false release.
Histogram interpretation on release: Flips positive and grows: Strong confirmation for long. Flips positive but shrinks: Weak confirmation, wait or skip. Stays neutral: Don't trade the release. Immediately reverses: False release, stand down.
The Dot System: Reading the Squeeze State #
The dots give you the squeeze state at a glance. The standard color scheme:
- Red/gray dots on the zero line: Squeeze ON. The market is compressing. This is the "wait" state -- don't enter, observe.
- No dots or green dots: Squeeze OFF. The market is expanding. This is the "watch and confirm" state.
The exact color implementation varies by platform. NinjaTrader's implementation uses red dots for squeeze-on and no dots for squeeze-off. The underlying logic is identical — dots present = BB inside KC = compression active.
Bar-by-bar logic: IF (Upper BB < Upper KC) AND (Lower BB > Lower KC): Plot red dot. ELSE: No dot.
It's a state machine. Each bar is either in compression or not. The count of consecutive compression bars tells you the squeeze duration. A 4-bar squeeze on a 1-hour chart means 4 hours of compression. Duration correlates roughly with eventual move magnitude.
Failure pattern — the flickering squeeze: When dots appear for 1-2 bars, disappear, then reappear, the market is in true chop. Skip these.
Failure pattern — the false release: Dots disappear (squeeze appears to fire), price moves modestly, then dots reappear as the market reconsolidates. Prevention: require minimum 8-10 consecutive dots before treating a release as actionable, and require momentum expansion for at least 2 bars post-release.
Entry Timing: Trading the Release #
Entering on the first hint of a squeeze release is almost always wrong. The squeeze has been building for hours and the first bars off the compression often whipsaw. You need confirmation.
The five-step entry checklist:
- Minimum squeeze duration: At least 5-8 bars on your execution timeframe (8-10 preferred).
- Squeeze release confirmed: Dots disappear (BB exits KC). This is the trigger to start watching, not to enter.
- Momentum direction confirmed: Histogram is above zero and growing for longs, below zero and falling for shorts.
- Momentum sustained for 2 consecutive bars: One bar of momentum can be noise. Two bars in the same direction is confirmation.
- Price confirmation: Close beyond the squeeze range, AND ideally a reclaim of or hold above VWAP for longs.
Concrete ES long entry: 10 red dots on the 15-minute chart (2.5 hours of compression). Compression range: 5,080-5,100. Bar 11: No dot (release). Momentum +0.6, green. Bar 12: No dot. Momentum +0.9, brighter green. Price on bar 12: 5,104, above the squeeze range high and above VWAP at 5,096. Entry on bar 12 close or break of bar 12 high at 5,105. Stop below compression low at 5,078 (22-point risk). Target: 5,124.
Trade Grade A setups at full size (all 5 conditions met), Grade B at half size (4 conditions met). Grade C setups (3 or fewer conditions) should be skipped entirely — partial setups in volatile post-compression environments produce inconsistent results that are nearly impossible to evaluate for improvement.
[7] The key word is confluences — squeeze alone isn't enough.
Stop Placement and Trade Management #
Squeeze releases are volatile events. The ATR expands immediately as the compression ends. Stops placed based on the tight compression range will get tagged by normal expansion noise. Use ATR-based stops calibrated to the expansion regime, not the compression regime.
ATR-based stop framework: Standard stop distance: 1.0-1.5x ATR(14) from entry. Conservative (higher win rate, wider risk): 1.5x ATR. Aggressive (lower risk per trade, but more frequent stop-outs): 1.0x ATR.
ES example: Entry: 5,105 long after 15-minute squeeze release. ATR(14): 8 points. Standard stop: 5,093 (1.5x ATR = 12 points below entry). Alternative: Below compression low (5,080) minus ATR buffer = 5,078. Use whichever is wider.
Position sizing: Contracts = Account Risk ÷ (Stop Distance × Point Value). For ES with $500 risk and 12-point stop: $500 ÷ (12 × $50) = 0.83 → 1 contract.
— always size to the most conservative constraint.[8]
Three-tier exit framework:
Tier 1 (50% of position): Target 1.0x squeeze range width from entry. Take profit on 50%, move stop on remainder to breakeven.
Tier 2 (30% of position): Target 1.5-2.0x squeeze range width. Take profit on 30%, trail stop on remainder to Tier 1 exit level.
Tier 3 (20% of position): Trail with 2.0x ATR or below VWAP. Let momentum exhaust naturally. Target: Next major structural level.
Time-based exit rule: If the momentum histogram starts shrinking toward zero within 5 bars of entry — before reaching Tier 1 — cut the position early. Decelerating momentum immediately post-entry is the clearest signal that the release lacked conviction.
Market Regime Filtering #
This is where most retail TTM Squeeze traders fail. They apply the strategy to every squeeze signal without filtering for market conditions. The squeeze works in specific regimes and fails in others.
When the squeeze works (high probability):
Range-bound accumulation: ADX(14) < 25, price oscillating in a defined range, declining volume during compression. Backtested win rates in this regime typically run 65-75% for confirmed releases.
Pre-event compression: The market squeezes 2-24 hours before a scheduled trigger (FOMC, CPI, NFP, inventory reports).
Structural confluence: The squeeze forms at a key technical level — daily pivot, VWAP, significant volume node.
When the squeeze fails:
Strong trending markets (ADX > 40): Squeezes during strong trends are just pauses, not equilibrium states. Analysis of ES data showed win rates dropping from 72% in range-bound conditions to 41% in strongly trending conditions — worse than random.
Low-liquidity sessions: Overnight ES and NQ (6 PM - 8 AM ET), Asian session CL, holiday-shortened trading. Single large orders can create the BB/KC compression pattern artificially.
Price discovery sessions: Immediately after major news events, technical patterns including the squeeze are unreliable.
Practical regime filters: ADX filter: Check ADX(14) on the higher timeframe. Above 30 and rising = squeeze signals suspect. Session filter: RTH only. Volume filter: Release bar volume > 120% of 20-bar average.
Integration with Complementary Tools #
VWAP (directional filter): Use session VWAP as the long/short dividing line. Long only when price is above VWAP at the time of the release. The strongest squeeze setups form AT the VWAP — price compresses against VWAP, then releases away from it. Research indicates approximately 16 percentage point improvement in long win rate when price is above VWAP at entry. See VWAP Strategies for complete mechanics.
Market Internals ($TICK, TRIN): For equity index futures (ES, NQ), internals provide breadth confirmation. $TICK: Long confirmation > +500 trending positive. Short confirmation < -500 trending negative. TRIN: Below 1.0 = bullish participation, above 1.0 = bearish.
Volume confirmation: Release bar must show above-average volume (release bar volume > 120-150% of the 20-bar average). Low-volume releases fail at a dramatically higher rate.
Higher timeframe bias and pivot levels: Align the squeeze direction with the higher timeframe trend. A 15-minute squeeze that releases bullishly should be taken only if the 4-hour chart supports the long bias. Use daily and weekly pivot levels as target magnets.
The integrated pre-entry checklist: Squeeze ON 8+ bars → regime supports (ADX < 30) → release confirmed with 2+ bars of expanding momentum → price beyond compression range → price on correct side of VWAP → $TICK/TRIN aligned (RTH only) → volume > 120% of average → HTF trend supports direction. Miss three or more and you're trading a low-quality setup.
Limitations and Failure Modes #
The mechanical limitation: lagging indicators. Both Bollinger Bands and Keltner Channels are backward-looking. When the market shifts regime suddenly — a gap open, a news trigger, a liquidity shift — the indicators need several bars to recalibrate.
The "dead squeeze" problem. Not all volatility compressions resolve directionally. Markets can compress into equilibrium and stay there. The dead squeeze tends to appear when ADX is extremely low (< 15) and flat, volume has been declining for multiple sessions, and no scheduled trigger is approaching. Pass on these setups.
Overnight session false signals. Overnight compression between 6 PM and 8 AM ET on equity index futures regularly produces squeeze signals that fail during RTH. Identify squeezes on overnight charts, but treat them as context — not entry signals.
The fundamental attribution error. Traders often attribute squeeze releases to the squeeze itself rather than the underlying cause. The squeeze doesn't cause anything — it identifies the conditions. When there's no institutional activity during compression (dead squeeze) or when the trigger resolves ambiguously, the setup breaks down.
Platform-specific implementation differences. TTM Squeeze implementations vary across platforms. The momentum calculation differs between platforms. The exact KC multiplier differs. Before trading any TTM Squeeze implementation, verify your platform's exact parameters.
Practical Application: Trade Vignettes #
Vignette 1: Pre-FOMC ES Squeeze. ES on the 1-hour chart: 9 consecutive red dots over 9 hours ahead of the 2 PM FOMC announcement. Range: 5,150-5,185. VIX at 21, ADX at 18, VWAP at 5,167. All regime filters pass. FOMC: Fed holds, dovish language. Release bar: no dot, momentum +2.1 and expanding, price at 5,192 above VWAP and compression high. $TICK at +1,150. Volume 180% of recent average. Entry at 5,193. Stop at 5,155 (1.5x ATR = 38 points below). Tier 1 at 5,228 (+35 pts), Tier 2 at 5,263 (+70 pts). Runner trailed to exit at 5,280. All five filter conditions passed.
Vignette 2: Failed NQ Squeeze in Trend Day. NQ on a 15-minute chart shows 7 red dots during a pullback in a strong uptrend. ADX at 45 and rising. Release fires: momentum +0.8, but $TICK weakening and release bar volume at 90% of average. ADX > 40, weak volume, weak internals — three filter failures. Skip this setup. Price pops 20 points then reverses 70 points as the trend reasserts. The filters correctly identified a false setup masquerading as a squeeze release.
Getting Started with TTM Squeeze #
Build this into your trading workflow in three steps:
Step 1: Set up your charts correctly. Plot Bollinger Bands (20/2.0) and Keltner Channels (20/1.5) on the same chart. Add the momentum histogram below — MACD (12/26/9) or a pre-built TTM Squeeze indicator.
Step 2: Build your regime filter routine. Before executing any squeeze setup, check ADX on the next higher timeframe. Below 25 = favorable. Above 40 = skip or trade with trend only. Make this a pre-trade ritual.
Step 3: Start on the 15-minute ES chart during RTH. This timeframe generates 4-6 actionable squeeze setups per week — enough to calibrate your entry timing and momentum reading without being overwhelmed.
The squeeze is useful precisely because it's interpretable. The dot count tells you compression duration. The histogram tells you directional pressure. The regime context tells you quality. That transparency means you can diagnose why setups succeed or fail — which is how you improve.
For momentum indicator context, see MACD and Momentum Trading in Futures. For the volatility mechanics, see Volatility in Futures Trading and Volatility-Based Position Sizing.
Knowledge Map
Prerequisites
Understand these firstCitations
- — Does anyone Trade Squeezes? (2010) 👍 15“The squeeze identifies narrow trading ranges by comparing Bollinger Bands and Keltner Channels.”
- — ZachC First Futures account: My Trade Journey (2018) 👍 8“I use TTM_SQZ alongside TTM_Pivot and the $TIKSP market internal for futures.”
- — lovetotrade YM Breakout Journal (2015) 👍 6“As the volatility winds down, the BB come inside the KC, showing consolidation.”
- — Simpler Trading - Squeeze Pro indicator (2021) 👍 12“Bollinger bands inside a 1.5 keltner channel - extremely tight trading range where bulls and bears are at a standstill.”
- — BBSqueeze Histogram (2014) 👍 25“For breakout trades you need additional indicators like momentum and a higher timeframe trend filter.”
- — How does RSqueeze work? (2012) 👍 18“BBSqueeze: The Bollinger/Keltner thing is more sophisticated than it looks.”
- — Trading Process Journal from Poland (2020) 👍 5“I look for confluences between TTM_Squeeze, pivots, scalper and trend indicators to take advantage of breakouts.”
- — Position Sizing by Van Tharp (2009) 👍 9“Looks at margin as well and gives you the lower number of the two contracts.”
- — Taking loss cutting losers managing positions (2021) 👍 7“I get out semi-mechanically, keeping the stop just a little farther from price than the strict ATR.”
