The reversion you see in a band is mostly the band
Price stretches away from a Bollinger band, a Keltner channel, a VWAP band or a regression channel, then snaps back. Split that snap-back into what price did and what the line did, and 96 to 98 percent of it is the line moving to price. The part a trade can actually collect is under a tick.
Where this came from
This started as a strategy, not a study. Fit a channel to recent price, let it tilt so a trend does not invalidate it, sell the upper band and buy the lower one, and take ten to twenty ticks a session out of the chop. We built it, and the premise checked out at every step — the market really does mean-revert at these horizons, and the band residual really does behave like the textbook process. The trade still did not work. Chasing the gap between those two facts is where the useful result is, and it turned out not to be about this strategy at all.
First, the premise is real
The whole idea rests on one claim: that intraday price has range in it to sell, rather than wandering off like a random walk. That claim is testable without reference to any strategy. The variance ratio compares the variance of a q-minute move to q times the variance of a one-minute move. At 1.00 there is nothing to fade. Below 1.00 the market is reverting.
On 1,227 sessions of ES, every horizon from five minutes out sits below one, and the effect strengthens as the horizon lengthens: 0.988 at five minutes, 0.974 at ten, 0.937 at thirty and 0.913 at an hour, with intervals that clear 1.00 comfortably. The two-minute reading of 0.998 is the one to ignore — at that horizon the bid-ask bounce pushes the statistic down for a mechanical reason that has nothing to do with tradeable range.2
The model says eleven ticks
Fit a rolling regression channel and the distance from price to the midline — the residual — behaves like an Ornstein-Uhlenbeck process: it gets pulled back toward zero at a rate you can measure.3 On a 30-bar channel the residual's autocorrelation is 0.872, which is a half-life of 5.1 minutes, and the typical band is 7.5 ticks wide. Enter two standard deviations out, hold ten minutes, and the model says the trade is worth 11.18 ticks. The round turn on ES costs 2.28 ticks — one tick crossed on each side plus commission. On paper this is not a marginal edge; it is a licence to print.
The realised move is 0.79 ticks. Not 11.18 with slippage. Not half. A fifteenth. Shorten the channel to 20 bars or lengthen it to 60 and the promise stays near eleven ticks while the delivery stays under one.
Where the other ten ticks went
A residual is the distance between two things, so it can close from either end. Write it out and there is nowhere else for the move to hide:
e(t) = price(t) − line(t)
e(t+H) − e(t) = [ price(t+H) − price(t) ] − [ line(t+H) − line(t) ]
price moves to the line the line moves to price
Only the first term is tradeable. The second is bookkeeping: the midline is refitted on every bar, so once a move is inside the window the fit slides up to meet it and the residual collapses without price going anywhere at all.
Measured across 16,540 ES signals, the line supplied 18.58 ticks of the closing gap and price supplied 0.84. That is the missing factor of fifteen, found. The same split holds everywhere we looked: NQ 87.19 against 2.93, gold 14.48 against 0.23, crude 19.09 against 0.31. Between 96 and 98 percent of the reversion is the band, on four instruments and 83,000 signals.
Why this is not obvious from the chart
On a chart the two cases look identical. Price pokes outside the band, a few bars pass, price is inside the band again — the picture is the same whether price came back or the band went out to get it. The eye reads the gap closing and infers the movement that would have closed it. Every visual test you can run on a band indicator is blind to the distinction, which is why the belief survives so well.
It is not the channel — it is any line that refits
A regression channel is an unusual construction, so the obvious objection is that this is a quirk of that particular fit. It is not. We ran the identical measurement on three band families at five window lengths each: the regression channel, Bollinger bands (a simple moving average with a standard-deviation envelope)4, and Keltner channels (an exponential average with an ATR envelope). Sixteen cells including an anchored session VWAP.
Across all of them, the band moved between 4.0 and 23.7 ticks toward price and price contributed between +0.84 and −0.52. The best cell in the entire grid returns about a third of what it costs to trade. Keltner channels are negative at every window we tested. Both long-window Bollinger cells are negative, which is worth saying plainly: at a 240-bar window, price keeps going away from the band and the gap closes anyway, entirely on the band's side of the ledger.
The anchored VWAP is the interesting control. It is never refitted, only extended — yesterday's prints stay in it forever — so its line should move least, and it does: 4.01 ticks against the regression channel's 18.58. The tradeable term does not benefit. Price contributed −0.44 ticks there, the wrong way. Slowing the line down removes the illusion without revealing an edge underneath it.
The second wall is the fill
Suppose you took the 0.79 ticks at face value and tried to collect it. How you get into the trade decides the outcome, and the two answers have opposite signs.
Cross the spread — wait for price to close outside the band, buy or sell the next bar's open — and the trade makes +$9.85 a trade gross across 16,540 fills. Rest a limit order at the band instead, and let the market come to you, and the same signal on the same bars loses −$9.92. That is a $19.77 swing produced entirely by the fill assumption.
The mechanism is not subtle once stated. A resting limit order fills when price trades through your level — and price trades through your level precisely on the bars when the move is continuing, not reverting. You are filled on the breakouts and passed over on the reversions. This is textbook adverse selection against a passive quote,5 and it is the reason a backtest that fills at the touch of a level will show an edge that does not exist. Any simulator that grants you a fill because price reached your price is measuring the simulator.
Where the geometry is least hostile
Take the taker version at face value — ignore the fill problem entirely, credit the trade with its full gross move, subtract the round turn — and only one instrument clears zero.
ES loses $18.65 a trade, gold loses $22.44, crude loses $20.66. NQ makes $1.34, which is a quarter of a tick, at a t-statistic of 0.58. That is breakeven wearing a hopeful expression, not an edge. But the reason NQ is the least bad is worth carrying away, because it generalises. The cost of a round turn is almost constant in tick terms across these four markets — 2.28 to 2.70 ticks — so the only thing that varies is how much band noise there is to harvest. NQ's band is 32.9 ticks wide where ES's is 7.0. Its tick is the finest in the complex relative to its own volatility, and that is the whole of its advantage here.
What to do with this
The useful part of this is not a verdict on one strategy. It is a measurement you can run on any indicator you are thinking of trading, in an afternoon.
- Decompose before you trade a band. Take your indicator, take your entry rule, and compute the two terms above on your own data. If the line supplies most of the closing gap, the backtest is describing the indicator's arithmetic rather than the market's behaviour.
- Judge the price term in ticks, against your round turn. Percentages and hit rates hide the scale. A 4% tradeable share sounds like something; 0.84 ticks against a 2.28-tick toll does not, and it is the same number.
- A refitted line is not a level. Support and resistance drawn once and left alone can be wrong, but it is at least a fixed claim about a price. A rolling band is a moving target that chases whatever just happened, and the faster it refits, the more of its apparent mean reversion is arithmetic.
- Settle the fill assumption before tuning parameters. Twenty dollars a trade moved on the fill model here and roughly nothing moved on the parameters. Most published band strategies have that ordering backwards.
What we’d test next
The band question is closed for our purposes: the premise is real, the tradeable term is under a tick, and the fill is adverse. Three things we would measure next, in order of how cheap they are:
- The same decomposition against references that never move at all — the prior day's close, the session open, the overnight high. If the tradeable term is still near zero there, the conclusion is about intraday price rather than about indicators.
- NQ alone, with much wider bands and far fewer trades, which is the only corner of this grid where the arithmetic is not immediately fatal.
- Whether order flow separates a trade-through that is noise from one that is a real breakout — resting size, absorption, delta at price. That is the missing input, and it is invisible in OHLCV bars. Two other studies in this lab have terminated at the same requirement.
Method
- Data
- 1-minute futures bars, regular session only. ES, NQ and CL from 2021-08-30 to 2026-08-27 (1,227, 1,225 and 1,256 sessions); GC from 2010-06-07 to 2026-09-09 (3,561 sessions). Contract roll days are dropped entirely, because the roll gap is not a price move. Sessions with fewer than 250 bars are excluded.
- Bands
- Four families, all built the same way and all measured with the same rule. Regression channel: rolling ordinary least squares on bar position, midline taken at the window end, half-width k times the residual standard deviation. Bollinger: simple moving average, half-width k standard deviations. Keltner: exponential moving average, half-width k times ATR. VWAP: anchored at the session open, half-width k times the running standard deviation of price around it. Windows of 20, 30, 60, 120 and 240 bars for the three rolling families.
- Signal and measurement
- A signal is a close k = 2.0 band-widths outside the band, with a cooldown equal to the hold so signals cannot stack. Everything is measured 10 bars later. The decomposition uses closes at the signal bar and the exit bar; the tradeable P&L uses the next bar's open as the entry, never the signal bar's close. The maker fill requires the next bar to trade through the resting limit by a full tick, which is a conservative assumption about queue position — it is generous only in ignoring the orders ahead of yours.
- Costs
- One tick crossed on each side plus $3.50 commission per round turn: 2.28 ticks on ES, 2.70 on NQ, 2.35 on GC and CL. No exchange-fee variation, no slippage beyond the tick, no financing.
- Statistics
- Signals inside one session overlap and are not independent, so P&L is averaged to a daily figure first and the t-statistic is taken across sessions, not across signals. Variance-ratio intervals use the standard heteroskedasticity-consistent form.1 No result here is adjusted for multiple comparisons; the grid is reported whole rather than as a best cell.
- Limits
- One entry threshold and one hold — k = 2.0 and ten bars — across five windows and four band families. This is not a parameter sweep, and it is not a full strategy backtest: there are no stops, no targets and no position sizing, because the object being measured is the reversion itself rather than a trading rule. Three of the four instruments cover five years; only gold covers sixteen. A wider grid would change the individual numbers. It would have to change them by a factor of three to change the conclusion.
References
- Lo, Andrew W., and A. Craig MacKinlay. “Stock Market Prices Do Not Follow Random Walks: Evidence from a Simple Specification Test.” The Review of Financial Studies 1, no. 1 (1988): 41–66. Link
- Roll, Richard. “A Simple Implicit Measure of the Effective Bid-Ask Spread in an Efficient Market.” The Journal of Finance 39, no. 4 (1984): 1127–1139. Link
- Uhlenbeck, George E., and Leonard S. Ornstein. “On the Theory of the Brownian Motion.” Physical Review 36, no. 5 (1930): 823–841. Link
- Bollinger, John. Bollinger on Bollinger Bands. New York: McGraw-Hill, 2001.
- Glosten, Lawrence R., and Paul R. Milgrom. “Bid, Ask and Transaction Prices in a Specialist Market with Heterogeneously Informed Traders.” Journal of Financial Economics 14, no. 1 (1985): 71–100. Link
- Avellaneda, Marco, and Sasha Stoikov. “High-frequency Trading in a Limit Order Book.” Quantitative Finance 8, no. 3 (2008): 217–224. Link