Keltner Channels define a trend channel using EMA and ATR-based bands — price riding the upper band signals a strong uptrend, price riding the lower band signals a downtrend, and when Bollinger Bands compress inside the Keltner Channels, a major breakout is imminent.
Section 1: Core Mechanics
Keltner Channels were introduced by Chester Keltner in 1960 and later refined by Linda Bradford Raschke in the 1980s to use ATR instead of the original True Range formula. The modern version produces smooth, stable channels that contract and expand with market volatility — unlike Bollinger Bands which react faster to price volatility.
Formulas
Where is the Wilder-smoothed Average True Range over 10 periods, and is the standard exponential moving average with .
Keltner-Bollinger Squeeze Detection
Where BB is Bollinger Bands (typically 20 period, 2 standard deviations) and KC is Keltner Channels (20 period EMA, 2× ATR). When Bollinger Bands are fully inside Keltner Channels, volatility has compressed to a level that historically precedes a significant directional move.
Inputs
- Close: Used for EMA calculation (middle band)
- High, Low, Close: Used for ATR calculation
- EMA Period: 20 (default)
- ATR Period: 10 (default)
- Multiplier: 2.0 (default)
Parameters
| Parameter | Default | Range | Impact |
|---|---|---|---|
| EMA Period | 20 | 10–50 | Controls center line responsiveness |
| ATR Period | 10 | 7–20 | Controls band smoothing speed |
| Multiplier | 2.0 | 1.0–3.0 | Controls band width — wider = fewer breakouts |
Output
Three lines on the price chart: Upper Keltner, EMA Middle, Lower Keltner. For the squeeze, you also need Bollinger Bands plotted on the same chart.
Visual Behavior
- Price stays near or above Upper Keltner = strong uptrend (riding the upper channel)
- Price stays near or below Lower Keltner = strong downtrend
- Price oscillates between bands = ranging, no strong trend
- Keltner channels contract = volatility dropping — squeeze building
- Keltner channels expand rapidly = volatility expansion — trend underway
Section 2: Interpretation & Signals
Use 1 — Trend Direction (Channel Riding)
When price closes above the upper Keltner Channel and stays there across multiple bars, it signals a strong, sustained uptrend. This is not a standard oscillator "overbought" signal — price riding outside the channel is CONFIRMING strength, not warning of reversal.
| Price Position | Interpretation | Action |
|---|---|---|
| Above Upper KC | Strong uptrend — trend riding | Hold long, trail stop at Middle EMA |
| Between Middle and Upper KC | Moderate uptrend | Long bias with caution |
| Near Middle EMA | No clear trend | Neutral — wait for direction |
| Between Middle and Lower KC | Moderate downtrend | Short bias with caution |
| Below Lower KC | Strong downtrend — trend riding | Hold short, trail stop at Middle EMA |
Use 2 — Keltner-Bollinger Squeeze
The squeeze is the most powerful Keltner signal. It identifies periods of extreme low volatility — market compression before an explosive move.
Setup: Plot both Keltner Channels and Bollinger Bands (20 period, 2 std dev) on the same chart. When Bollinger Bands narrow inside the Keltner Channel boundaries, the squeeze is active.
Why it works: ATR (used in Keltner) is a smoother volatility measure than standard deviation (used in Bollinger). When price compresses enough that even the faster-reacting Bollinger Bands are smaller than the slower Keltner bands, volatility is at an extreme low. This state cannot persist — the next significant price move will be sharp.
Keltner-Bollinger Squeeze — Compression Then Breakout
Squeeze Direction Determination
The squeeze itself does not tell you which direction the breakout will go. Use these filters:
- MACD histogram: Positive and rising before breakout → expect upside breakout
- Price vs EMA: Price above EMA(20) inside squeeze → bullish bias
- Volume analysis: Volume spike on the breakout bar confirms direction
- Prior trend: Squeeze after an uptrend → higher probability of upside continuation
Keltner vs. Bollinger Bands
| Feature | Keltner Channels | Bollinger Bands |
|---|---|---|
| Band calculation | EMA plus/minus ATR | SMA plus/minus standard deviation |
| Smoothness | Smoother — ATR changes gradually | More reactive — std dev responds to price jumps |
| False breakouts | Fewer — ATR dampens spikes | More — std dev expands on single volatile bar |
| Best use | Trend riding + squeeze identification | Mean reversion + squeeze reference |
Section 3: Pass vs. Live — Real-Time Reliability
EMA and ATR both update in real time within the bar but lock on close. No historical repaint. The ATR component means Keltner bands respond more slowly to sudden volatility spikes than Bollinger Bands — this is a feature, giving more stable channel boundaries.
Section 4: Practical Use Cases
Setup: Keltner(20,10,2) on 15m for channel; BB(20,2) overlay for squeeze detection Signal: Squeeze releases on 15m close above Upper KC with positive MACD histogram Entry: Next bar open after breakout bar close above Upper KC Exit: Price closes back below EMA(20) middle band Key rule: Squeeze must be at least 5 bars old before trading the release — brief squeezes are noise
Setup: Keltner(20,10,2) on daily; BB(20,2) overlay; ADX(14) for trend confirmation Signal: Squeeze on daily (3+ days BB inside KC) releases with price closing above Upper KC and ADX rising Entry: Next daily open after confirmed break above Upper KC Stop: Below the EMA(20) middle band Target: 2× the pre-breakout squeeze width added to the breakout price
Setup: Keltner(20,10,2) on weekly — use channel for trend direction only Signal: Weekly close above Upper KC for 2+ consecutive weeks = strong uptrend confirmed Entry: First weekly close above Upper KC Stop: Weekly close below EMA(20) Target: Trail stop at EMA(20) weekly; hold while price rides the upper channel
Real example: NVDA — throughout 2023, NVDA price repeatedly rode above the upper Keltner Channel on the daily chart. This was not overbought — it was a channel-riding uptrend signal. Each pullback to the EMA(20) middle band was a re-entry opportunity. The squeeze formed in October 2023 (Bollinger Bands compressed inside KC) and released to the upside, launching the next leg from 400 to 500 by year-end.
Section 5: Pseudo Code
INPUT: high[], low[], close[], ema_period=20, atr_period=10, multiplier=2.0
PROCESS:
Step 1: Compute EMA(ema_period) on close prices:
k = 2 / (ema_period + 1)
ema[0:ema_period] = NaN
ema[ema_period] = average(close[0:ema_period]) # seed
for i > ema_period: ema[i] = close[i] * k + ema[i-1] * (1 - k)
Step 2: Compute ATR using Wilder smoothing:
tr[i] = max(high[i]-low[i], abs(high[i]-close[i-1]), abs(low[i]-close[i-1]))
atr[atr_period] = average(tr[1:atr_period+1]) # seed
for i > atr_period: atr[i] = (atr[i-1] * (atr_period-1) + tr[i]) / atr_period
Step 3: Compute Keltner Channels:
kc_upper[i] = ema[i] + multiplier * atr[i]
kc_lower[i] = ema[i] - multiplier * atr[i]
Step 4: Compute Bollinger Bands for squeeze detection:
bb_sma[i] = average(close[i-19:i+1]) # 20-period SMA
bb_std[i] = std_dev(close[i-19:i+1])
bb_upper[i] = bb_sma[i] + 2 * bb_std[i]
bb_lower[i] = bb_sma[i] - 2 * bb_std[i]
Step 5: Detect squeeze:
squeeze[i] = (bb_upper[i] < kc_upper[i]) and (bb_lower[i] > kc_lower[i])
OUTPUT: kc_upper[], ema[], kc_lower[], squeeze[] (True/False per bar)
EDGE CASES:
- Need max(ema_period, atr_period) bars for valid KC: 20 bars minimum
- Need 20 bars for BB calculation — squeeze detection valid from bar 20 onward
- ATR[i] = 0 is theoretically possible (no price movement) — KC bands equal EMA in that case
Section 6: Parameters & Optimization
Standard Conventions
| Setting | Common Use | Notes |
|---|---|---|
| EMA(20) / ATR(10) / ×2.0 | Standard equities — most common | Raschke's refined version |
| EMA(20) / ATR(20) / ×1.5 | Slower, for swing trading | Less band volatility |
| EMA(10) / ATR(10) / ×2.0 | Faster, for intraday | More responsive middle line |
| EMA(50) / ATR(10) / ×2.0 | Position trading | Wider view of trend channel |
Parameter Impact
| Change | Effect | When to Apply |
|---|---|---|
| Increase EMA period | Slower middle line, wider trend tolerance | Position trading, weekly charts |
| Decrease ATR period | Bands react faster to recent volatility | High-volatility markets, earnings plays |
| Increase multiplier | Wider bands, price stays inside more often | Low-volatility assets, commodities |
| Decrease multiplier | Tighter bands, more channel-riding signals | Trending equities and crypto |
How wide should the Keltner Channels be for the squeeze to be meaningful?
A meaningful squeeze occurs when the Keltner Channel is noticeably wider than the Bollinger Bands — typically the BB bandwidth should be less than 70-80% of the KC bandwidth. A brief, shallow compression (BB barely inside KC for 1-2 bars) is not a tradeable squeeze. Look for squeezes where BB sits clearly inside KC for at least 5 bars. The longer the squeeze duration, the more explosive the breakout tends to be.
What is the TTM Squeeze and how does it relate to Keltner Channels?
The TTM Squeeze (Trade the Markets Squeeze) by John Carter is a formalized Keltner-Bollinger squeeze indicator. It plots red dots when the squeeze is active (BB inside KC) and green dots when the squeeze fires (BB expands outside KC). It also plots a momentum histogram (based on a modified MACD) that shows whether momentum is building positively or negatively during the squeeze. The direction of the momentum histogram at squeeze release determines whether to go long or short.
Market-Specific Adjustments
- Crypto: Standard (20, 10, 2.0) — crypto squeezes on 4H produce high-quality breakout signals
- Equities: Standard — works well across sectors; tech stocks tend to have more dramatic squeezes
- Forex: Use (20, 10, 1.5) — forex pairs have lower ATR relative to price, need tighter multiplier
- Commodities: Increase multiplier to 2.5–3.0 — commodities have larger ATR relative to price
Section 7: Synergies & Conflicts
| Works Well With | Avoid Combining With | |
|---|---|---|
| Bollinger Bands | Essential for squeeze detection — Keltner and Bollinger are designed to work together | — |
| MACD histogram | Direction filter during squeeze — histogram trend at release determines trade direction | — |
| ADX | ADX rising at breakout confirms squeeze release is a genuine trend, not a false break | — |
| Volume | Volume expansion on squeeze breakout bar = institutional participation confirming move | — |
| RSI for channel exits | — | RSI "overbought" at 70 conflicts with price riding the upper channel — wrong signal |
| Stochastic | — | Same overbought/oversold conflict — price above upper KC stays there in strong trends |
| Second Keltner setting | — | Running two KC widths simultaneously creates confusing nested channels |
Section 8: Common Mistakes
| Mistake | Root Cause | Solution |
|---|---|---|
| Selling when price is above upper Keltner | Treating KC like Bollinger — "overbought" means sell | Price above upper KC means strong trend — hold long, do not fade |
| Trading squeeze without direction filter | Squeeze shows compression, not direction | Wait for the breakout bar to determine direction; use MACD histogram to anticipate |
| Using too short a squeeze | 1-2 bar compressions generate false breakouts | Require at least 5 bars of squeeze before trading the release |
| Using wrong BB settings for squeeze | Squeeze requires BB(20,2) — different BB settings give different squeeze readings | Always use BB(20,2) with KC(20,10,2) for standard squeeze detection |
| Ignoring squeeze on higher timeframes | Daily squeeze more powerful than 15m squeeze | Check for squeeze on daily/4H first; lower timeframe entry only after higher timeframe squeeze confirmed |
Section 9: Cheat Sheet
USE WHEN: Identifying strong trends (channel riding), detecting squeeze setups, breakout preparation
AVOID WHEN: Mean-reversion trading — Keltner does not signal reversals reliably
ENTRY SIGNAL — Trend: Price closes and stays above Upper KC for 2+ bars = uptrend riding signal
ENTRY SIGNAL — Squeeze: BB inside KC for 5+ bars, then breakout bar above Upper KC with volume
EXIT SIGNAL: Price closes below EMA(20) middle band (trend use) / Squeeze momentum reverses (squeeze use)
PARAMETERS: Standard: EMA(20) / ATR(10) / ×2.0 | Swing: EMA(20) / ATR(20) / ×1.5
CONFLUENCE: Bollinger Bands (squeeze) + MACD histogram (direction) + ADX (strength) + Volume (confirm)
RISK: No overbought signal in strong trends — do not short price above upper band without extreme confirmation
BEST TIMEFRAME: Daily for swing trades, 4H for crypto squeezes — most reliable at these timeframes