TL;DR — the answer box
- The band barely matters. Across long mean-reversion variants, median return-to-drawdown ran 3.52 for Bollinger, 3.04 for Keltner and 3.00 for Casey Bands. A spread of 0.52. Meanwhile the gap between trading long and trading short was 90.4 percentage points.
- Keltner is not the trend band. Every source on the first page of Google says Keltner suits trend-following. Mean reversion beat breakout for all three families, and Keltner's own mean-reversion variants ran 3.04 against 1.56 for its breakouts.
- Costs reverse the answer. Bollinger's most durable setting trades 1,169 times where Keltner's trades 593. At 0.05% a side Bollinger keeps 59% of its profit and its MAR falls to 0.116 — below buy-and-hold's 0.156. Keltner keeps 80% and Casey Bands 79%.
- My own 2025 claim was wrong, in the way that matters. I said Casey Bands had the widest profitable zone. Bollinger clears every bar most often — 83.3% of its variants beat a 2.0 return-to-drawdown against Casey's 74.7%. What survived is the other half: Casey's surface is the most even of the three.
- All three beat doing nothing, and beat luck. At their most durable settings on SPY: MAR 0.304 (Keltner), 0.304 (Casey), 0.232 (Bollinger), against 0.156 for buying and holding and 0.068 for a seeded coin flip that trades as often.
How is each band actually calculated?
All three draw a line above price and a line below it. They differ only in how they measure the distance.
| Family | Centre line | Half-width | Published default |
|---|---|---|---|
| Bollinger Bands | simple average of the close | multiplier × standard deviation of the close | 20 period, 2.0 |
| Keltner Channels | exponential average of the close | multiplier × Average True Range | 20 period EMA, 2.0 × ATR(10) |
| Casey Bands | exponential average of the highs and of the lows, then smoothed | multiplier × Average True Range | 20 period, 1.25, smoothing 3 |
Average True Range, or ATR, is a standard gauge of how far a market has been moving day to day. Standard deviation is a statistical spread — it reacts harder to a single violent bar than ATR does, which is why StockCharts notes that Keltner Channels are the smoother of the two. John Bollinger's own site remains the reference for how his bands are constructed.
Casey Bands are the odd one out on purpose. Instead of centring on the close and pushing outward, the upper band is built from the highs and the lower band from the lows, so the channel is anchored to where the market actually reached rather than where it settled.
There is one more thing all three share, and it is what made this comparison possible. Every band pair can be collapsed into a single number: where the close sits between the two lines, scaled 0 to 100. On Casey Bands that reading already has a name — Close%, or PercentC. Computed on Bollinger Bands, the identical formula is the standard %B. So the three families stop being three indicators and become one number with three different ways of producing it, which means they can run through exactly the same code.
How we tested
One harness. The only thing allowed to vary is the band.
- Markets: E-mini S&P 500 futures (ES, regular session, 5,026 daily bars, 19.5 years from 2007-01-03) plus SPY (8,398 bars from 1993-02-02), QQQ (6,866), IWM (6,537) and DIA (7,153).
- Variants: 116,640 in total — 23,328 per market. Band length (3, 4, 6, 10, 14, 20, 30, 40), multiplier (0.25 through 3.0), entry level, exit level, mean reversion and breakout, long and short, and a protective time exit of 0, 5 or 10 bars. Identical axes for all three families.
- Entry: the channel reading closes below the entry level, buy at the next open. Exit: it closes above the exit level, sell at the next open, or the time exit fires first. The raw band cross that most people mean by "Bollinger strategy" is the special case where the entry level is 0 and the exit level is 100 — it is in the sweep, alongside everything around it.
- Money: $35,000 a position, no compounding, one position at a time. Frictionless in the main sweep, and priced properly further down.
- No look-ahead, structurally: the decision is taken on a close, the fill happens at the following open. The code has no way to do otherwise.
- Reliability: 98,894 of the 116,640 variants clear a 50-trade floor. Thin cells are flagged, never quietly dropped.
Two things are held still, and I would rather say so than have you find them. Casey Bands' smoothing stays at its defined default of 3 bars, and its ATR lookback is tied to its band length. Casey Bands have two knobs the other families do not, and letting me tune them while Bollinger and Keltner sat fixed would have handed my own indicator a search advantage — which is precisely the thing this study is trying to test for.
Does the band you choose change your results?
Barely.
| Family | Variants | Profitable | Median net profit | Median Ret/DD | Median win % | Median trades | Median time in market | Median edge per trade |
|---|---|---|---|---|---|---|---|---|
| Bollinger Bands | 8,552 | 99.5% | $68,925 | 3.52 | 67.0% | 370 | 42.8% | 0.15 |
| Keltner Channels | 7,784 | 99.3% | $60,626 | 3.04 | 66.5% | 260 | 37.1% | 0.16 |
| Casey Bands | 8,411 | 99.2% | $58,302 | 3.00 | 64.2% | 223 | 35.0% | 0.18 |
Return-to-drawdown is total profit divided by the worst losing stretch — higher means a smoother ride for the same money. Edge per trade is R-expectancy, the average profit per dollar risked; 0.2 or better is a common "worth trading" bar.
On the two measures a trader looks at first — did it make money, and how rough was the ride — the three are almost indistinguishable.
Read the table and the shape is obvious. Bollinger makes the most money and takes the most trades and spends the most time exposed. Casey Bands make the least money, take the fewest trades and spend the least time exposed — and earn the most per trade. Keltner sits between them on every single line.
That is not three different edges. That is one edge, sampled at three different intensities. Hold on to the second chart — the gap in time spent holding a position is the one that decides the whole article, several sections from here.
Is Keltner really the trend band and Bollinger the mean-reversion one?
No. This is the most repeated claim in the whole subject and it does not survive contact with the data.
| Family | Mean reversion | Breakout |
|---|---|---|
| Bollinger Bands | 3.52 | 1.17 |
| Keltner Channels | 3.04 | 1.56 |
| Casey Bands | 3.00 | 1.68 |
Median return-to-drawdown, long variants. Mean reversion wins for all three, and it is not close: the worst mean-reversion family (3.00) still beats the best breakout family (1.68). Keltner's own mean-reversion variants beat its breakout variants by 95%.
If anything the folklore is backwards. Casey Bands and Keltner are the better breakout bands (1.68 and 1.56 against Bollinger's 1.17), and Bollinger is the better mean-reversion band. Every ranking page I could find asserts the opposite pairing, and none of them tested it.
What actually decides whether a band strategy makes money?
Which side you trade. Nothing else comes close.
| Family | Long variants profitable | Short variants profitable |
|---|---|---|
| Bollinger Bands | 93.5% | 6.5% |
| Keltner Channels | 96.3% | 3.7% |
| Casey Bands | 96.0% | 4.0% |
Pooled, 95.2% of long variants made money against 4.8% of short ones. The spread between the best and worst band on the long side is 2.8 percentage points. The spread between long and short is 90.4.
This is the same finding that turns up in every study I run on US equity indexes, and it is worth saying plainly because it makes most indicator arguments pointless. The setup beats the indicator. Get the direction wrong and no band saves you; get it right and all three work.
Where is the profitable zone — and is it really widest for Casey Bands?
Here is where I have to correct myself.
When I published this article in 2025 I showed three optimisation surfaces and said Casey Bands produced "the broadest band of high profitability" — easier to optimise, harder to overfit. I never defined what "broadest" meant. So this time I set two bars before looking, and applied them identically.
| Family | Variants | Profitable | Ret/DD ≥ 2.0 | Ret/DD ≥ 3.0 |
|---|---|---|---|---|
| Bollinger Bands | 8,552 | 99.5% | 83.3% | 61.2% |
| Keltner Channels | 7,784 | 99.3% | 76.5% | 51.1% |
| Casey Bands | 8,411 | 99.2% | 74.7% | 50.0% |
Casey Bands come last on both bars. The claim, as I stated it, is wrong.
The half that survives is the other reading of it. If "robust" means the neighbours behave like the winner — a flat surface rather than a lone spike — then Casey Bands do lead, and Bollinger is the worst of the three:
| Family | Median Ret/DD | Spread relative to the mean | Lowest cell | Highest cell |
|---|---|---|---|---|
| Bollinger Bands | 3.43 | 0.55 | 0.34 | 12.02 |
| Keltner Channels | 2.77 | 0.48 | 0.47 | 8.30 |
| Casey Bands | 2.59 | 0.45 | 0.47 | 7.62 |
Bollinger has the highest peak and the deepest hole. Casey Bands have neither. That is a real property, and it is the property I was pointing at in 2025 — I just described it as "wider" when what I meant was "flatter", and then never measured either.
Here is the Casey Bands surface on its own, drawn the way the 2025 article drew it, with one addition it did not have: the 2.0 bar as a plane running through it. That is what "flat" looks like when you can see it. The surface clears the plane nearly everywhere, and it does it by sitting evenly above it rather than by spiking somewhere and collapsing next door.
The 2025 renders had no plane and no criterion, which is exactly why "broadest" could not be checked. A surface with a bar drawn through it can be.
Do Casey Bands really hug price more tightly?
Yes. And that turns out to cut both ways.
| Family | Setting | Mean channel width | Closes finishing outside |
|---|---|---|---|
| Bollinger Bands | 20, 2.0 | 4.93% | 10.5% |
| Keltner Channels | 20, 2.0 | 4.16% | 20.0% |
| Casey Bands | 20, 1.25 | 3.52% | 37.7% |
Measured on every E-mini S&P 500 bar in the sample. Casey Bands are the tightest channel of the three, which is what I built them to be — and price finishes outside them on 37.7% of days, more than three times as often as Bollinger.
That comparison is not quite fair, because a narrower channel is easier to escape. So here it is with the channels forced to the same size — each multiplier tuned until the mean width is 4.00% of price:
| Family | Multiplier that matches | Closes finishing outside |
|---|---|---|
| Bollinger Bands | 1.625 | 25.4% |
| Keltner Channels | 1.925 | 22.1% |
| Casey Bands | 1.480 | 30.1% |
Even at an identical width, price escapes Casey Bands most often and Keltner least. The 2025 article said Keltner "lets prices wander outside the bands" while Casey Bands "stay tighter and closer to price, adapting to both upward and downward pushes." Half right. They are tighter. But tighter is why price gets out — the adapting does not stop the escapes, it produces them.
I first built Casey Bands after watching price whip through my Keltner strategies during 2022's swings. The data now tells me the whipping was not a flaw in Keltner. It was the tight channel doing exactly what a tight channel does, and I had built myself a tighter one.
Is a 77% win rate worth anything?
The page that ranks first for "keltner channel strategy backtest" — QuantifiedStrategies' Keltner write-up — leads with "77% WinRate!" in its title. So I checked what a 77% win rate is worth here.
Of the 7,784 reliable long mean-reversion Keltner variants, 12.3% — 956 of them — win 77% of the time or better. The claim is easy to hit. Now the part nobody quotes:
| Keltner long mean-reversion variants | Median Ret/DD | Median net profit |
|---|---|---|
| The 12.3% that win ≥77% of the time | 2.58 | $58,018 |
| The family as a whole | 3.04 | $60,626 |
The high-win-rate variants are worse. They earn less per unit of drawdown and less in dollars. The correlation between win rate and return-to-drawdown across them is +0.17 — near enough to nothing.
This is the oldest trap in a mean-reversion strategy. Buying dips wins often by construction; you take a lot of small wins and occasionally hold a falling knife. A win rate quoted on its own tells you how the strategy feels, not what it makes. Which is why nothing in this article quotes one without a risk-adjusted number beside it.
Do any of them beat just holding the S&P 500?
The comparison every strategy owes, and the one most articles skip.
For each family I took its most durable length-and-multiplier cell — profitable in all five markets on at least 100 median trades — and reported the median across every variant SPY has inside it. The median, not the best, so the number is not a winner.
| Strategy | Setting | MAR | Annual return | Worst drawdown | Time in market |
|---|---|---|---|---|---|
| Keltner Channels | 4, 0.5 | 0.304 | 4.20% | 13.8% | 46.3% |
| Casey Bands | 3, 0.25 | 0.304 | 4.32% | 14.3% | 45.8% |
| Bollinger Bands | 4, 0.25 | 0.232 | 4.09% | 17.4% | 55.9% |
| Buy and hold SPY | — | 0.156 | 8.82% | 56.5% | 100% |
| Seeded random control | — | 0.068 | — | 31.0% | — |
MAR is annual return divided by the worst percentage fall. It is the only return-over-drawdown ratio that can fairly be set beside a one-trade benchmark.
Read it honestly, because it says two things at once. Holding SPY earned 8.82% a year and every band strategy earned roughly half that. But holding SPY also cost you a 56.5% drawdown, and these cost 13.8% to 17.4%. Per unit of pain, the bands win comfortably. Per dollar of return, the index wins.
And they are only in the market 45.8% to 55.9% of the time. The other half, the capital is free.
What happens when the trading isn't free?
Everything above this line was frictionless. Now the bill.
Notice that the most durable settings are also the busiest — these cells trade 593 to 1,169 times. That is exactly where a zero-cost assumption flatters a result most, so it gets priced rather than disclaimed. Each family's stable setting is re-run charging a round trip against the position's own value: 0.02% a side is roughly a retail commission plus a tight spread on a liquid ETF, 0.05% is a deliberately harsh reading.
| Family | Median trades | MAR frictionless | MAR at 0.02% | MAR at 0.05% | Profit kept at 0.05% |
|---|---|---|---|---|---|
| Keltner Channels | 593 | 0.304 | 0.275 | 0.230 | 80% |
| Casey Bands | 598 | 0.304 | 0.274 | 0.228 | 79% |
| Bollinger Bands | 1,169 | 0.232 | 0.180 | 0.116 | 59% |
| Buy and hold SPY | 1 | 0.156 | — | — | — |
Bollinger's advantage was a taxi that took the long way round. The meter says you got further; the fare says you paid for it. At 0.05% a side Bollinger drops to 0.116 — under buy-and-hold's 0.156 — while Keltner and Casey Bands stay clear at 0.230 and 0.228.
That is the whole article in one table. Frictionless, Bollinger wins. Charged for its trades, it loses to the index. The band that trades least wins, and the reason Casey Bands survive is the thing I did not know I had built into them.
Does combining all three smooth the ride?
A little. Much less than I claimed in 2025.
One variant per family, each at its own published default, running side by side on SPY with $35,000 apiece:
| Strategy | Trades | Net profit | Worst drawdown | MAR |
|---|---|---|---|---|
| Bollinger Bands alone | 191 | $42,084 | 19.0% | 0.13 |
| Keltner Channels alone | 153 | $34,442 | 17.2% | 0.12 |
| Casey Bands alone | 240 | $52,751 | 23.2% | 0.12 |
| All three combined | 584 | $129,278 | 17.9% | 0.14 |
The combination improves MAR by 8% over the best single band, and its worst drawdown of 17.9% sits below the worst single band's 23.2% — but above the best single band's 17.2%.
The reason is in the correlations. Daily equity changes between the three ran +0.83, +0.79 and +0.84. Three bands drawn on one market, buying the same dips a day or two apart, are close to the same bet. Diversification pays when the things you own disagree, and these barely do. Combining band families is not a portfolio; combining genuinely different edges across genuinely different markets is, and that is a different article.
Where's the free code?
This is what the title promised in 2025 and what the original article did not actually deliver — it pointed at a download instead. Here is the indicator itself.
EasyLanguage (MultiCharts, TradeStation) — the authoritative definition, $SOf_CaseyBands v1.1:
inputs:
LookBack(numericsimple), ATRLookBack(numericsimple),
Multiplier(numericsimple), Smoothing(numericsimple),
oUpperBand(numericref), oLowerBand(numericref), oMidBand(numericref),
oPercentC(numericref), oWidthC(numericref);
variables: ATRValue(0), RawUpper(0), RawLower(0);
ATRValue = AvgTrueRange(ATRLookBack);
if BarNumber >= LookBack + 1 then begin
RawUpper = xAverage(High, LookBack) + (ATRValue * Multiplier);
RawLower = xAverage(Low, LookBack) - (ATRValue * Multiplier);
oUpperBand = Average(RawUpper, Smoothing);
oLowerBand = Average(RawLower, Smoothing);
oMidBand = (oUpperBand + oLowerBand) / 2;
oPercentC = iff((oUpperBand - oLowerBand) <> 0,
(Close - oLowerBand) / (oUpperBand - oLowerBand), 0.5) * 100;
oWidthC = (oUpperBand - oLowerBand) / Average(Close, LookBack) * 100;
end;
$SOf_CaseyBands = 1;Defaults: LookBack 20, ATRLookBack 20, Multiplier 1.25, Smoothing 3. Note that EasyLanguage's AvgTrueRange is a simple average of true range, not Wilder's smoothing, and xAverage is the exponential average.
Python — the version that produced every number in this article:
import numpy as np, pandas as pd
def _sma(x, n):
return pd.Series(x).rolling(n).mean().to_numpy()
def _ema(x, n): # EasyLanguage xAverage
return pd.Series(x).ewm(span=n, adjust=False).mean().to_numpy()
def casey_bands(high, low, close, length=20, mult=1.25, smoothing=3):
prev_close = np.concatenate([[np.nan], close[:-1]])
tr = np.maximum.reduce([high - low,
np.abs(high - prev_close),
np.abs(low - prev_close)])
atr = _sma(tr, length)
upper = _sma(_ema(high, length) + atr * mult, smoothing)
lower = _sma(_ema(low, length) - atr * mult, smoothing)
return lower, (upper + lower) / 2.0, upper
def channel_position(close, lower, upper): # Close% / PercentC / %B
width = upper - lower
return np.where(width == 0, 50.0, (close - lower) / width * 100.0)
def channel_width(close, lower, upper, length=20): # WidthC
return (upper - lower) / _sma(close, length) * 100.0Those last two functions are the reason this comparison was possible at all: swap casey_bands for a Bollinger or Keltner calculation and channel_position gives you the same 0-100 reading, so the same strategy code runs on any of them.
The EasyLanguage above is my own code and I am publishing it here for you to use and modify. Please do not redistribute it as your own.
The verdict — and the honest limits
Casey Bands are not better than Bollinger Bands or Keltner Channels. They are also not worse. On the measure that ends up mattering — what is left after you pay for the trades — they and Keltner finish level at 0.228 and 0.230 MAR while Bollinger falls to 0.116, and the reason is simply that they trade half as often for nearly the same return.
Where the hype is right: a tighter, ATR-based channel built off the highs and lows really does behave differently from a standard-deviation channel built off the close. The difference is measurable, consistent, and worth something.
Where it is wrong — including where I was wrong: no band family is "the profitable one". The choice between them is a 0.52 decision on median return-to-drawdown. The choice between long and short is a 90.4-point decision. Anyone selling you a band as an edge has the ratio backwards.
Limits, because a study that hides them is not worth trusting.
- The main sweep is frictionless. The costs section prices that, but only for three settings on one market. Every other number in this article is an upper bound.
- The best settings sit at the short, tight end of the grid — lengths of 3 and 4 with multipliers of 0.25 to 0.5. That is well away from every published default, it trades 600 to 1,200 times, and it is precisely where costs and slippage do the most damage. Treat it as the direction the edge points, not as a recommendation.
- Five markets, one family. ES, SPY, QQQ, IWM and DIA are all US equity indexes and they move together. 206 of the study's 213 length-and-multiplier cells were profitable in all five, which sounds like broad validation and is really one market tested five ways.
- The futures results are quoted as ratios, deliberately. One E-mini contract carries roughly $376,750 of notional against a $35,000 account, so percentage-of-account figures on ES are meaningless. Every percentage in this article comes from SPY, where whole-share sizing is unleveraged.
- A backtest is not a live edge. These are historical fills at historical opens with no queue, no partial fills and no bad night's sleep.
What this means for you
- Stop choosing between band families. The decision is worth 0.52 on return-to-drawdown. Pick whichever one you can read on a chart and move on.
- Spend the effort on direction and style instead. Long mean reversion on a US index was profitable in 95.2% of long variants. Short was profitable in 4.8%. That is where your testing time belongs.
- Count your trades before you admire your equity curve. Two settings with the same frictionless return and a 2:1 difference in trade count are not the same strategy. The busier one is borrowing from your broker to look good.
- Never accept a win rate on its own. The 77%-win-rate Keltner variants earned 2.58 return-to-drawdown against 3.04 for the family. Ask for the risk-adjusted number, every time.
- If you want the tightest channel, take the escapes with it. Casey Bands close outside the channel 30.1% of the time even at a matched width. That is a design choice, not a defect — decide whether you want it.
If you want the tested library rather than one indicator, the $37 mean-reversion ebook collects 36 of these signals with the same treatment.
The next study, and the ones that quietly overturn something I published last year, land in the Overfit newsletter first. StatOasis.com/Overfit
Published 2 August 2025 · rebuilt from scratch and last updated 19 August 2026. Every figure above is computed from this study's own results table, which you can download and check. This is research, not investment advice, and a backtest is not a promise — trading involves risk of loss.








