What It Detects
Stocks with:
- Bollinger Bands contracting (low volatility)
- ATR% below average (confirmation)
- Coiling up for potential breakout or breakdown
- "Squeeze" setup before explosive move
The Formula
atrp(14) < 2 and (bb_upper(20, 2) - bb_lower(20, 2)) / sma(20) * 100 < 10
How It Works
atrp(14) < 2- Average True Range as percentage < 2% (low volatility)(bb_upper - bb_lower) / sma * 100 < 10- Band width < 10% of price (tight squeeze)
This finds stocks where volatility has contracted significantly.
When to Use
Best for:
- Anticipating big moves (direction unknown)
- Swing trading with defined risk
- Stocks that have been range-bound
- Building a watchlist to monitor
Avoid when:
- You need immediate action (squeeze can last weeks)
- Stock in strong directional trend (no squeeze)
- Low liquidity stocks (may not break out cleanly)
Parameters You Can Tweak
Very Tight Squeeze
atrp(14) < 1.5 and (bb_upper(20, 2) - bb_lower(20, 2)) / sma(20) * 100 < 8
- Even tighter criteria (ATR < 1.5%, width < 8%)
- Fewer results but higher quality
With Trend Filter
atrp(14) < 2 and (bb_upper(20, 2) - bb_lower(20, 2)) / sma(20) * 100 < 10 and c > sma(200)
- Only find squeezes in uptrend stocks
- More likely to break higher
With Volume Confirmation
atrp(14) < 2 and (bb_upper(20, 2) - bb_lower(20, 2)) / sma(20) * 100 < 10 and v < sma(v, 20)
- Volume drying up (accumulation)
- Often precedes breakout
Example Columns to Add
Price: c
ATR%: atrp(14)
BB Upper: bb_upper(20, 2)
BB Lower: bb_lower(20, 2)
BB Width: (bb_upper(20, 2) - bb_lower(20, 2)) / sma(20) * 100
20MA: sma(20)
Volume: v / sma(v, 20)
Trading the Squeeze
Wait for Breakout
DON'T enter during squeeze. DO wait for expansion:
- Scan finds squeeze
- Add to watchlist
- Wait for ATR to spike (> 3%)
- Enter on direction confirmation
- Set stop on opposite side of range
Directional Bias
Look at these clues:
- Price location: Near upper band = bullish, near lower = bearish
- 200-day MA: Above = bullish bias, below = bearish
- Volume: Expanding on up days = bullish
- RSI: > 50 = bullish momentum
Entry Strategies
Conservative (Confirmed Breakout):
- Squeeze detected on scan
- Price breaks above/below Bollinger Bands
- Volume 1.5x average on breakout
- Enter on first pullback to bands
- Stop below/above bands
Aggressive (Early Entry):
- Squeeze detected
- Price touching upper band (bullish) or lower band (bearish)
- RSI showing momentum in that direction
- Enter small position
- Add on confirmed breakout
What to Watch For
Strong signals:
- Squeeze lasting 2-3+ weeks (longer = bigger move)
- Price holding above key support
- Multiple tests of support/resistance (consolidation)
- Decreasing volume (coiling energy)
Warning signs:
- Squeeze forming at major resistance (likely fails)
- Very low liquidity (hard to exit)
- Earnings coming soon (unpredictable catalyst)
- Wider market in turmoil (may not follow technicals)
The Breakout
When squeeze releases:
- ATR spikes 2-3x normal
- Volume surges 2-5x average
- Price moves 5-15% quickly
- Direction can be either way
Measuring Target:
- Take band width at squeeze
- Project that distance from breakout point
- Example: $50 stock, $2 band width → Target $52 or $48
Common Mistakes
- Entering during squeeze - No edge, just waiting
- Assuming direction - Squeeze can break either way
- No stop loss - Can break against you fast
- Chasing breakout - Wait for pullback or skip it
- Overtrading - Quality squeezes are rare (5-10 per week)
Combining with Other Indicators
Squeeze + RSI
atrp(14) < 2 and (bb_upper(20, 2) - bb_lower(20, 2)) / sma(20) * 100 < 10 and rsi(14) > 50
RSI > 50 suggests bullish breakout more likely
Squeeze + MACD
atrp(14) < 2 and (bb_upper(20, 2) - bb_lower(20, 2)) / sma(20) * 100 < 10 and macd_hist() > 0
Positive histogram shows underlying bullish momentum
Squeeze + Price Location
atrp(14) < 2 and (bb_upper(20, 2) - bb_lower(20, 2)) / sma(20) * 100 < 10 and c > sma(20)
Price above middle band = bullish setup
Monitoring Squeezes
Build a Squeeze Watchlist
- Run scan daily
- Add new squeezes to watchlist
- Set price alerts at band edges
- Check watchlist 2x per day
- Act when breakout occurs
Alert Levels
For a stock in squeeze at $50 with bands at $48/$52:
- Upper break alert: $52.50 (bullish breakout)
- Lower break alert: $47.50 (bearish breakdown)
- ATR alert: When ATR% > 3 (expansion starting)
Related Strategies
- Volume Spike - Confirms breakout direction
- Momentum Breakout - Enter after squeeze breaks
- Trend Strength - Filter for uptrend squeezes
Pro Tips
- Best squeezes: 20-30 trading days of low volatility
- Historical context: Check if stock has broken out before (pattern repeater)
- Sector watch: Multiple stocks in sector squeezing? Sector move coming
- False breakouts: First break often fails, second attempt often works
- Position sizing: Start small (half position), add on confirmation
- Time of day: Breakouts in first 30 minutes often fake; wait for mid-day confirmation
- Patience: Most important! Average squeeze lasts 3-4 weeks
Advanced: TTM Squeeze Indicator
The TTM Squeeze (John Carter) uses:
- Bollinger Bands (20, 2)
- Keltner Channels (20, 1.5 ATR)
- Squeeze = BBs inside Keltner Channels
Our simplified version focuses on ATR% and band width, which captures the same concept.