Bid-ask bounce and the fake mean reversion
Posted: Sat Oct 31, 2026 5:52 am
Tick data jumps between the bid and the ask as trades alternate between buyers and sellers. If the price series is built from trade prices, a buy executes at the ask and a sell at the bid, even when the true value hasn't changed.
That creates negative autocorrelation: an up tick is often followed by a down tick, simply because of the bounce. A naive test on tick data finds strong mean reversion at the one-tick horizon.
The mean reversion isn't tradable. To capture it, the trader would need to buy at the bid and sell at the ask, which is the opposite of what a market order does. A strategy that appears to profit from the bounce loses once real execution is modeled.
This artifact fools many people who test tick-level systems. A system that buys after a down tick and sells after an up tick shows beautiful results on mid prices or last trade prices, and fails on bid and ask.
The remedy is to test with the correct side for each action: buys at the ask, sells at the bid. If the edge disappears, it was the bounce.
Some data vendors provide only the mid or the last price, which hides the issue. Checking that the dataset has separate bid and ask is an important step.
A small numeric illustration: the true mid price stays at 1.08500, with a spread of 0.4 pips. Trades alternate between buyers and sellers. The trade prices read 1.08502, 1.08498, 1.08502, 1.08498. Every tick is a reversal of the last, so the series shows strong negative autocorrelation.
A system that sells after an up tick and buys after a down tick would appear to win 0.4 pips each time on this series. In reality, selling after the up tick means selling at the bid, 1.08498, and buying after the down tick means buying at the ask, 1.08502. Each round trip loses 0.4 pips, the opposite of the apparent result.
That is why tick-level tests must be built on bid and ask quotes. Any dataset that offers only one price per tick is hiding the very quantity that decides the outcome.
Has a tick-level system ever turned out to be nothing more than the bid-ask bounce?
That creates negative autocorrelation: an up tick is often followed by a down tick, simply because of the bounce. A naive test on tick data finds strong mean reversion at the one-tick horizon.
The mean reversion isn't tradable. To capture it, the trader would need to buy at the bid and sell at the ask, which is the opposite of what a market order does. A strategy that appears to profit from the bounce loses once real execution is modeled.
This artifact fools many people who test tick-level systems. A system that buys after a down tick and sells after an up tick shows beautiful results on mid prices or last trade prices, and fails on bid and ask.
The remedy is to test with the correct side for each action: buys at the ask, sells at the bid. If the edge disappears, it was the bounce.
Some data vendors provide only the mid or the last price, which hides the issue. Checking that the dataset has separate bid and ask is an important step.
A small numeric illustration: the true mid price stays at 1.08500, with a spread of 0.4 pips. Trades alternate between buyers and sellers. The trade prices read 1.08502, 1.08498, 1.08502, 1.08498. Every tick is a reversal of the last, so the series shows strong negative autocorrelation.
A system that sells after an up tick and buys after a down tick would appear to win 0.4 pips each time on this series. In reality, selling after the up tick means selling at the bid, 1.08498, and buying after the down tick means buying at the ask, 1.08502. Each round trip loses 0.4 pips, the opposite of the apparent result.
That is why tick-level tests must be built on bid and ask quotes. Any dataset that offers only one price per tick is hiding the very quantity that decides the outcome.
Has a tick-level system ever turned out to be nothing more than the bid-ask bounce?