Technical Analysis

Donchian vs Keltner vs Bollinger Bands (2026)

2026-09-30·10 min read

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:

AspectDonchianKeltner (modern ATR version)Bollinger
Centerline(20-period high + 20-period low) / 2EMA(close, 20)SMA(close, 20)
Upper / lower band20-period highest / 20-period lowestcenterline ± 2 × ATR(10)centerline ± 2 × stdev(20)
What band width reflectsRecent price extremesRecent true volatility (gaps included)Recent dispersion of closes
How often the centerline movesOnly when a new high or low printsEvery single barEvery single bar
Behavior in a rangeBands stay flatBands slowly contractBands 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.

Each channel is answering a different question:

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:

text
upper = highest(high, 20)
        lower = lowest(low, 20)
        mid   = (upper + lower) / 2

No 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.

Where Donchian shines
Daily or 4-hour charts where volatility is clearly expanding — especially crypto, where 24-hour trading flattens out the session-open effect. It won't catch microstructure, but it gives the cleanest breakout signal of the three. If you're writing a trend-following strategy, starting with Donchian is much cheaper than starting with Bollinger.

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.

text
mid   = EMA(close, 20)
        ATR   = ta.atr(10)     // true range, includes gaps
        upper = mid + 2 × ATR
        lower = mid - 2 × ATR
What is ATR, in one sentence:

it'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.

Where Keltner shines
Markets with a clear direction but with bursts of uneven volatility — crypto perpetuals are the canonical example. EMA(20) as a directional filter with 2 × ATR as a trailing stop is a boring but effective combination. Using EMA (not SMA) as the centerline is deliberate — switching to SMA loses the sensitivity to recent trend, and at that point the centerline is no different from Bollinger's.

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:

text
mid   = SMA(close, 20)
        stdev = standard deviation of the last 20 closes
        upper = mid + 2 × stdev
        lower = mid - 2 × stdev

The 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.

Where Bollinger shines
Markets with periodic volatility cycles — e.g. US equities during the main session, or crypto perpetuals in the bars after a funding rate reset. It's great for catching "coiling → release" moments; it's a money-loser when used as "touch the band, take the other side."

All Three at a Glance: Which One for Which Situation

DonchianKeltnerBollinger
Breakout signal cleanlinessCleanest (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 volAlmost invisibleSlowly contractsShows up fastest
Behavior in rangesBarely movesSlowly narrowsFrequent touches; easy to get faked out
Behavior on gapsReflected immediately in the extremesEnters ATR, bands widenEnters stdev, bands widen more
First parameters to tuneLength N (20 / 55)EMA length, ATR length, multiplierLength, standard deviation multiplier
Picking one is really picking the market condition you're fighting:

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

pine
//@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) / 2

Keltner and Bollinger

pine
// 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 - bDev

Plotting them together

pine
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?
The 1983 Turtle system was designed to be mechanically executable with zero rule interpretation. A Donchian 20 breakout is literally "a 20-period new high" — no average, no volatility, no subjective call. Swap in Keltner or Bollinger and the signal comes with a "how far from the mean counts as a breakout?" question that needs tuning, which is exactly what the system was designed to avoid.
Should Keltner use EMA or SMA?
Most platforms default to EMA because it's more sensitive to recent price and fits trend following. SMA isn't wrong — it just makes Keltner behave more like Bollinger, whose centerline is also an SMA. Picking EMA is a deliberate choice to keep Keltner distinct from Bollinger; picking SMA means accepting the two will look similar.
Can Bollinger's 20 / 2.0 be changed?
Yes, but first ask yourself "am I making it more sensitive or wider?" Shorter length, smaller multiplier → more signals, more false ones; longer length, larger multiplier → stable bands, slower reactions. Bollinger himself has written that 20 / 2.0 is robust across most markets — changing is fine, but don't start out by falling into the "find the best parameters" trap.

Combinations and market differences

Can all three be used at the same time?
Yes, and it's a common combination. One definition of the Bollinger Squeeze is "the Bollinger bands are entirely inside the Keltner bands" — stacking both is what makes the Squeeze signal. Another common pair is Donchian as the entry trigger with Keltner as the trailing stop: one catches "is there a breakout?", the other catches "has it started reversing?"
Do these three behave differently in crypto versus stocks?
The main differences are "opening gaps" and "24-hour volatility." Stocks have overnight gaps, ATR captures them, and Keltner's bands reflect them. Crypto has no true close, so gaps only appear during extreme events. 24-hour trading means Donchian's "N-period high" isn't dominated by a single session, so breakout signals are cleaner than in stocks. Bollinger's Walking the Bands is especially common in long crypto trends — this is where beginners most often get burned trading crypto.

Get started

Ready to ship what you just learned?

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