Donchian vs Keltner vs Bollinger Bands (2026)
You open a chart in TradingView and see three channels hugging price: Donchian, Keltner, and Bollinger. All three draw as "two lines squeezing a price series," so they get treated as the same thing — sell when price touches the upper band, buy when it touches the lower. This is the most common way people use these three channels, and it's also the most common way people blow up with them.
These three channels use completely different math and each one shines in different market conditions. This guide won't tell you which one is "best" — there is no such answer. It takes the mechanics apart side by side: how each channel's width is computed, how each reacts to sudden volatility, and where each one silently fails. At the end there's a Pine Script snippet (Pine is TradingView's built-in strategy scripting language) you can paste straight into TradingView to stack all three on one chart.
Three Channels That Look Alike but Squeeze Price Differently
The formulas make this obvious. Using 20 periods as a common parameter, the three definitions are:
| Aspect | Donchian | Keltner (modern ATR version) | Bollinger |
|---|---|---|---|
| Centerline | (20-period high + 20-period low) / 2 | EMA(close, 20) | SMA(close, 20) |
| Upper / lower band | 20-period highest / 20-period lowest | centerline ± 2 × ATR(10) | centerline ± 2 × stdev(20) |
| What band width reflects | Recent price extremes | Recent true volatility (gaps included) | Recent dispersion of closes |
| How often the centerline moves | Only when a new high or low prints | Every single bar | Every single bar |
| Behavior in a range | Bands stay flat | Bands slowly contract | Bands contract fast (Squeeze appears) |
Source: Pine Script v6 built-ins ta.highest / ta.lowest / ta.ema / ta.atr / ta.sma / ta.stdev; verified August 2026.
Donchian asks "is the current price higher than anything anyone has seen recently?", Keltner asks "is the current move larger than usual volatility?", and Bollinger asks "is the current move statistically unusual?" The words "upper band" mean three entirely different things depending on which channel you're looking at.
Donchian: Tracking the Price Extremes
Richard Donchian invented this channel in the 1950s, and the formula is the simplest of the three:
upper = highest(high, 20)
lower = lowest(low, 20)
mid = (upper + lower) / 2No averages, no standard deviation, no volatility measure. It answers exactly one question: what were the highest high and lowest low in the last N bars? That "extremes-first" design gives it three clear characteristics.
First, the band edges go flat.As long as no new 20-period high prints, the upper band stays horizontal until the old high scrolls out of the window. The centerline is the same — it only jumps on bars that print a new high or low. In a range, this looks broken; it's actually deliberate.
Second, the breakout signal is clean.Price touches the upper band → price just printed an N-period high. Not "close to the mean plus a couple of standard deviations," not "more than X times ATR" — literally a new high. You don't have to make a second judgment about whether it counts as a breakout. This is exactly why the 1983 Turtle system used it: Donchian 20 entry (System 1), Donchian 55 entry (System 2), Donchian 10 or 20 exit — the whole rulebook has zero fuzzy words.
Third, it's useless in a range.Price oscillates inside a channel and never touches the bands — because the bands are just the highs and lows of that same range. If you're hunting mean-reversion signals, Donchian gives you almost nothing. That's outside its job description.
For the full breakout playbook, including how to filter fake breakouts, see the complete breakout strategy guide; the whole Turtle system built on Donchian is walked through end-to-end in CTA trend following and the Turtles.
Keltner: Letting the Channel Follow Real Volatility
The original Keltner channel came from Chester Keltner's 1960 book "How to Make Money in Commodities", which used a moving average plus and minus the range of the typical price. The version you see by default on TradingView isn't that original — it's the ATR-based rewrite popularized by Linda Bradford Raschke in the 1990s. They look similar, but only the ATR version is widely used, and everything below refers to this modern version.
mid = EMA(close, 20)
ATR = ta.atr(10) // true range, includes gaps
upper = mid + 2 × ATR
lower = mid - 2 × ATRit's "the true range of this bar," equal to max(high − low, high − prev_close, low − prev_close) averaged over N periods. Compared with plain high−low, ATR includes gaps. The full mechanics and its role in position sizing are covered in the ATR complete guide; here we only use the conclusion.
Compared with Donchian, Keltner's biggest difference is that the centerline moves on every bar. EMA weights recent data more heavily — a 20-period EMA is most sensitive to roughly the last 5–7 bars, and older data decays out quickly. So the centerline behaves like a "slightly lagged" price, and the bands sit 2 × ATR above and below that line.
Compared with Bollinger, Keltner's biggest difference is that ATR reacts to sudden volatility more calmly. Given the same long red bar, Bollinger's standard deviation gets pulled wide once and slowly comes back over the next few bars; ATR is an N-period average, so the same bar contributes just 1/N — the bands neither blow open nor snap shut. This produces a useful property: Keltner bands have a smoothly changing width, which makes them good as a trailing stop in trend-following strategies.
If you want to understand why EMA and SMA give different signals in trend-following, the complete EMA guide walks through the weighting formula and the difference in lag.
Bollinger: Using Standard Deviation to Catch "Unusual Distance"
Bollinger Bands were invented by John Bollinger in the 1980s, and the formula only differs from Keltner by one word:
mid = SMA(close, 20)
stdev = standard deviation of the last 20 closes
upper = mid + 2 × stdev
lower = mid - 2 × stdevThe difference is in where the band width comes from: Bollinger uses statistical dispersion (standard deviation); Keltner uses the range the price itself walked (ATR). Small in implementation, big in behavior.
Standard deviation amplifies extremes.ATR is the arithmetic mean of absolute values, so one long bar contributes 1/N. Standard deviation squares the deviation and takes a root, so the same long bar contributes far more to the width. The practical result: when the market transitions from range to volatility, Bollinger bands open earlier and close earlier than Keltner. That "open then close" rhythm is exactly what John Bollinger named the Squeeze — extreme contraction followed by an expansion, whose direction often kicks off a real move.
But the bands are not an absolute range.Price touching the upper band repeatedly does not mean it's about to reverse — Bollinger himself calls this Walking the Bands, and it's normal behavior in a strong trend. The rule works in a range and fails in a trend, and Bollinger is the one most often misused as a "touch the band, take the other side" tool — because its centerline is a smoothed SMA and its bands look like clean support and resistance lines.
The full Bollinger playbook — Squeeze, %B, Walking the Bands, and combinations with trend filters — is covered in a separate Bollinger Bands complete guide. This article only places it in comparison with the other two.
All Three at a Glance: Which One for Which Situation
| Donchian | Keltner | Bollinger | ||
|---|---|---|---|---|
| Breakout signal cleanliness | Cleanest (literally a new high) | Medium (needs ATR comparison) | Muddied by Walking the Bands | |
| Good as a trailing stop? | OK (using an N-period exit) | Best (smooth width) | Either too tight or too loose | |
| Ability to catch Squeeze / low vol | Almost invisible | Slowly contracts | Shows up fastest | |
| Behavior in ranges | Barely moves | Slowly narrows | Frequent touches; easy to get faked out | |
| Behavior on gaps | Reflected immediately in the extremes | Enters ATR, bands widen | Enters stdev, bands widen more | |
| First parameters to tune | Length N (20 / 55) | EMA length, ATR length, multiplier | Length, standard deviation multiplier |
if you're writing a trend-following or breakout strategy, Donchian is the most direct starting point and Keltner is the smoothest stop. If what you want is "the direction that pops after the market coils up," Bollinger's Squeeze is the most sensitive of the three. Don't treat them as "Bollinger is advanced and Donchian is primitive" — they're three tools, not three generations.
Pine: Stack All Three and See the Differences Directly
Stacking all three channels on the same chart, bar by bar, is faster than any comparison article. This split into three parts — common inputs plus Donchian, Keltner and Bollinger calculations, plotting them together — pastes straight into TradingView's Pine Editor.
Common inputs and Donchian
//@version=5
indicator("Donchian vs Keltner vs Bollinger", overlay=true)
length = input.int(20, "Shared length")
atrLen = input.int(10, "Keltner ATR length")
kMult = input.float(2.0, "Keltner multiplier")
bMult = input.float(2.0, "Bollinger stdev multiplier")
// Donchian
donUp = ta.highest(high, length)
donLow = ta.lowest(low, length)
donMid = (donUp + donLow) / 2Keltner and Bollinger
// Keltner (modern ATR version)
kMid = ta.ema(close, length)
kBand = kMult * ta.atr(atrLen)
kUp = kMid + kBand
kLow = kMid - kBand
// Bollinger
bMid = ta.sma(close, length)
bDev = bMult * ta.stdev(close, length)
bUp = bMid + bDev
bLow = bMid - bDevPlotting them together
plot(donUp, "Donchian upper", color=color.new(color.red, 0))
plot(donLow, "Donchian lower", color=color.new(color.red, 0))
plot(kUp, "Keltner upper", color=color.new(color.orange, 0))
plot(kLow, "Keltner lower", color=color.new(color.orange, 0))
plot(bUp, "Bollinger upper", color=color.new(color.aqua, 0))
plot(bLow, "Bollinger lower", color=color.new(color.aqua, 0))Once you paste this in, flip the chart to BTC daily or 4-hour. You'll see three consistent behaviors: in ranges, red (Donchian) barely moves, orange (Keltner) slowly contracts, and aqua (Bollinger) contracts fastest; after a long bar, aqua opens up the most, orange less, and red only moves if that bar prints a new high or low; in uptrends, price walks along the aqua upper band (Walking the Bands), and touches don't signal a reversal.
Three Common Misuses, All From Assuming "Channels Are All the Same"
Misuse 1: treating Bollinger like Donchian.Price touches the Bollinger upper band and you enter thinking "new high" — but the Bollinger upper band only means "more than 2 standard deviations from the mean," which has nothing to do with the highest high of any N-period window. If you actually want breakouts, use highest/lowest directly and save yourself the headache.
Misuse 2: treating Donchian like Keltner.Using Donchian as a trailing stop and then complaining that "the stop distance jumps around" — that's not Donchian's problem, that's a feature it doesn't have. Trailing stops need smooth band width, which is the job of ATR-based tools (Keltner) or percentage stops.
Misuse 3: cross-copying parameters between the three.Someone recommends "use 20 for Donchian," so you change Keltner's EMA to 20 too — but the two 20s mean completely different things. Donchian's 20 is "look back 20 bars for the extreme"; Keltner's 20 is "the decay constant of a 20-period exponential moving average." The first is a hard window, the second is continuous weighting. Before changing parameters, know which mechanism you're changing.
FAQ
Usage and parameters
Why did the Turtles use Donchian instead of Keltner or Bollinger?
Should Keltner use EMA or SMA?
Can Bollinger's 20 / 2.0 be changed?
Combinations and market differences
Can all three be used at the same time?
Do these three behave differently in crypto versus stocks?
Get started
TVSBot pipes the channel strategies you write in Pine straight to your exchange — using your own API key, with dry-run first, across 7 exchanges.
Start free