ATR Channel vs Bollinger Bands vs Donchian: 50 Breakout Tests, 50 Losses After Costs, and ATR Did More as a Filter

Key takeaways
- I put the ATR channel (Keltner, 20-period EMA ± ATR) against Bollinger Bands, a 20-bar Donchian channel and a plain ATR impulse on the same 16,926 EURUSD 5-minute bars, with the same five exits, both directions and 1 pip of cost: 50 tests.
- All 50 lost after costs. Breaking out of any of the three channels was not a buy signal on M5, whatever the channel was built from.
- The ATR channel was the best one to follow and the worst one to fade. With a 1:2 ATR exit, following the Keltner 20/2 break was the only follow test positive before costs, +0.02 pips per trade. Fading Bollinger 20/2 was the best fade, +0.58 before costs and -0.42 after.
- The ATR channel is narrower: 2×ATR was a median 0.79 of the Bollinger 2-deviation width, and wider on only 27.7% of bars. 64.9% of its breaks came within 15 minutes of a Bollinger break in the same direction.
- ATR earned its keep as a filter, not a signal. An EMA 12/26 cross lost 2.60 pips per trade when ATR was below 0.8× its recent median, and 0.22 when it was above 1.3×.
Keltner Channels, Bollinger Bands and Donchian channels all draw a band around price and all get sold the same way: a close outside the band is a breakout. The difference is what sets the width. Keltner uses the Average True Range, Bollinger uses the standard deviation of closes, Donchian simply uses the highest high and lowest low. If the width matters, one of them should break out better than the others.
I tested that on the same bars as my ATR volatility breakout test, where following 309 of 310 ATR breakout setups lost after costs. The question here is narrower: does it matter which channel you use?
How were the channels compared?

- Data: 16,926 EURUSD M5 bars, June 3 to August 26, 2026, split at July 15 into two halves.
- ATR channel (Keltner): 20-period EMA ± 2×ATR 14, and a tighter ± 1.5×ATR 14 version.
- Bollinger Bands: 20-period SMA ± 2 standard deviations — the MetaTrader default.
- Donchian: a close above the highest high or below the lowest low of the previous 20 bars.
- ATR impulse: a close more than 1.5×ATR 14 away from the previous close, with no channel at all.
- Signal: the first close outside the band, in either direction.
- Exits: stop and target of 1:1, 1:2, 1.5:3 and 2:2 ATR 14 (capped at 4 hours), or after 2 hours. Same exits for every channel, so only the entry differs.
- Cost: 1 pip per trade. One trade at a time.
Which channel broke out best?

None of them. Here is the 1:2 ATR exit, the one most breakout guides recommend, in both directions:
| Channel | Signals | Follow: win rate | Follow: gross | Follow: net | Fade: win rate | Fade: gross | Fade: net |
|---|---|---|---|---|---|---|---|
| Keltner 20 / 2×ATR | 1,232 | 31.1% | +0.02 | -0.98 | 41.1% | +0.39 | -0.61 |
| Keltner 20 / 1.5×ATR | 1,680 | 30.8% | -0.04 | -1.04 | 40.8% | +0.43 | -0.57 |
| Bollinger 20 / 2 | 1,050 | 30.4% | -0.14 | -1.14 | 42.9% | +0.58 | -0.42 |
| Donchian 20 | 1,226 | 30.1% | -0.14 | -1.14 | 41.7% | +0.43 | -0.57 |
| ATR impulse 1.5× | 1,759 | 30.5% | -0.14 | -1.14 | 41.5% | +0.51 | -0.49 |
Pips per trade, stop 1×ATR 14, target 2×ATR 14. Win rates are after the 1-pip cost.
The gap between the best and worst channel was 0.16 pips per trade on the follow side and 0.19 on the fade side. The gap between following and fading any one of them was 0.37 to 0.72 pips. Direction mattered more than construction, by roughly three to one.
The full grid says the same. Over all five exits, every follow test lost after costs, and every fade test did too. The closest to break-even were:
| Test | Trades | Win rate | Gross | Net | 1st half | 2nd half |
|---|---|---|---|---|---|---|
| Fade Keltner 20/2, exit after 2h | 448 | 52.9% | +0.97 | -0.03 | +1.09 | -1.15 |
| Fade Bollinger 20/2, stop 1.5 / target 3 | 673 | 41.9% | +0.79 | -0.21 | -0.15 | -0.27 |
| Fade Bollinger 20/2, exit after 2h | 446 | 51.6% | +0.77 | -0.23 | +0.42 | -0.85 |
| Fade Keltner 20/1.5, exit after 2h | 509 | 50.5% | +0.70 | -0.30 | +0.63 | -1.15 |
| Follow Keltner 20/2, stop 1 / target 2 | 939 | 31.1% | +0.02 | -0.98 | -0.80 | -1.15 |
The Keltner fade with a 2-hour exit came within 0.03 pips of break-even, but only by averaging a good first half and a bad second one. The Bollinger fade with a 1.5:3 exit lost a little more on average but was steadier: negative in both halves by a similar amount. Neither is a strategy. Both say the same thing as my Bollinger Bands strategy test: on M5 a band break is more often the end of a push than the start.
Why does the ATR channel behave differently from Bollinger?
Because it is narrower and it reacts more slowly. With the defaults, the Keltner half-width of 2×ATR was a median 0.79 of the Bollinger half-width of 2 deviations, and wider on only 27.7% of bars. So Keltner breaks came earlier and more often: 1,232 against 1,050.
The two still mostly flagged the same moves. 64.9% of Keltner breaks had a Bollinger break in the same direction within three bars, and 76.1% of Bollinger breaks had a Keltner one. Where they differ is at the extremes. A standard deviation swells as soon as closes spread out, so by the time price closes outside a Bollinger Band the move has already stretched the band — the break is more extreme, which is better for a fade and worse for a follow. ATR moves more slowly, so a Keltner break catches the move a little earlier. That fits the table: +0.02 against -0.14 to follow, +0.39 against +0.58 to fade.
Donchian sat in the middle on the follow side. It is the purest breakout of the three — a new 20-bar high — and a new 100-minute high on EURUSD did no better than a close outside a band. My support and resistance test found the same about recent highs and lows: they get broken without meaning much.
Is ATR better as a filter than as a signal?
On these bars, yes. I took a plain EMA 12/26 crossover, exited it after 2 hours, and split the crosses by how ATR 14 compared with its own median over the previous 100 bars:
| EMA 12/26 cross, 2-hour exit | Trades | Win rate | Gross | Net | 1st half | 2nd half |
|---|---|---|---|---|---|---|
| No filter | 319 | 45.5% | -0.65 | -1.65 | -2.31 | -1.07 |
| ATR below 0.8× median | 92 | 38.0% | -1.60 | -2.60 | -4.07 | -1.30 |
| ATR below median | 182 | 42.3% | -0.83 | -1.83 | -2.40 | -1.26 |
| ATR above median | 185 | 47.0% | +0.06 | -0.94 | -0.91 | -0.97 |
| ATR above 1.3× median | 88 | 52.3% | +0.78 | -0.22 | +0.33 | -0.74 |
The pattern is monotonic: the quieter the market when the averages crossed, the worse the cross did. Skipping crosses in below-median volatility cut the loss per trade from 1.65 to 0.94 pips and the number of trades by 42%. It did not make the crossover profitable — the fast 12/26 pair lost in my EMA vs SMA test too — but it is a bigger improvement than any choice of channel above.
ADX played the same role in my ADX trend filter test, where ADX above 20 was the only filter that turned the average trade positive. A volatility or trend reading tells you when a trend rule has a chance. It is a poor trigger on its own.
So which channel should you use?
- For breakouts on EURUSD M5, none of them. All 25 follow tests lost after costs.
- If you fade band breaks, Bollinger was slightly better than Keltner, +0.58 against +0.39 pips before costs with the same exit. Neither cleared a 1-pip spread.
- If you like the ATR channel, use its width, not its break. ATR above its recent median was where a trend entry lost least.
- Test your channel on your own spread. Every one of the 25 fades here was positive before costs, by 0.11 to 0.97 pips. On an account paying 0.3 pips, most of them would be positive — the cost detail is in my spread and swap test.
Frequently asked questions
Is the Keltner Channel better than Bollinger Bands?
For following a breakout on EURUSD M5, slightly: +0.02 pips per trade before costs against -0.14 with a 1:2 ATR exit. For fading a breakout, Bollinger was better: +0.58 against +0.39. After a 1-pip cost, both lost in every test.
What is the difference between Keltner Channels and Bollinger Bands?
Keltner draws the band at a multiple of ATR around an EMA; Bollinger draws it at a multiple of the standard deviation of closes around an SMA. With default settings, the Keltner band was a median 0.79 of the Bollinger width on EURUSD M5 and fired 17% more signals.
Does the Donchian channel breakout work on forex?
Not on EURUSD 5-minute bars. A close above the 20-bar high or below the 20-bar low lost 1.14 pips per trade after costs with a 1:2 ATR exit, and was positive before costs in none of the five exits.
Can ATR be used as a filter?
Yes, and it helped more than as a signal. EMA 12/26 crosses lost 2.60 pips per trade when ATR was below 0.8× its 100-bar median and 0.22 when it was above 1.3×.
Do Keltner and Bollinger give the same signals?
Mostly. 64.9% of Keltner 20/2 breaks came within three bars of a Bollinger 20/2 break in the same direction, and 76.1% of Bollinger breaks had a matching Keltner break.
Want a clean indicator to install right now?
It is my own enhanced DeMARK Trend Line indicator for MetaTrader 4 and 5. Non repaint, clean, and free.

