5.2 The Roll model: spread from bid–ask bounce
Motivation
Trades alternate between the bid and the ask. That alternation makes trade-price changes negatively autocorrelated even when the underlying value is a random walk. Roll (1984) turned this into an estimator of the spread that needs only trade prices. It is the first thing to compute when someone shows you a mean-reversion strategy on tick or minute data: much of the "reversion" may be bounce.
5.2.1The bid–ask bounce model#
Setup
Let the efficient price (the expected value of the asset given public information) follow a random walk, and trades occur at the bid or the ask:
with assumptions:
- (A1) i.i.d., mean 0, variance ;
- (A2) i.i.d. with ;
- (A3) and are independent at all leads and lags.
The spread is constant; the dealer's quotes are .
Proposition 5.1Roll, 1984
Under (A1)–(A3), with ,
Hence , and the Roll estimator is
Proof
From (5.2), . Under (A2), and , and the 's are uncorrelated across time. By (A3) the and terms are uncorrelated, so covariances add:
. The first term is 0 by (A1). Expanding the second, . So .
For , involves and involves , which share no index when , so the covariance is 0.∎
The first-order autocorrelation of trade-price changes is , which lies in ; it is close to when the spread dominates the efficient-price noise, which is the typical situation at the tick level.
5.2.2Estimating the spread from trades#
Worked example
On one day, an NSE large-cap trading near ₹1,500 has 30,000 trades. The sample first-order autocovariance of trade-to-trade price changes is (₹²). Then , i.e. 0.4 bp of price. This is the effective spread implied by bounce, which can differ from the quoted spread (queue position and hidden orders mean many trades occur inside the quote).
Code Exercise m05_roll (in the app: Exercises → m05_roll) asks you to simulate (5.2), implement (5.4), and check that recovers the true within a few percent on 300,000 simulated trades. A second test adds a proportional bounce to a GARCH, fat-tailed log-price path from toolkit.data.synthetic_prices and recovers a 100 bp spread from 20,000 observations within 20%. Problem 5.2 extends the model to persistent order flow, where the estimator is biased down.
5.2.3Limits and strategy hygiene#
Practitioner notes
- When the estimator fails. If the estimator is undefined. This happens often in daily data, where the bounce is small relative to and returns may have small positive autocorrelation from slow information diffusion. Use Roll on tick or one-minute data, or use Hasbrouck's Bayesian version (Hasbrouck 2007, Ch. 3).
- Order-flow persistence. Real order flow is positively autocorrelated (large orders are split; M05 · 5.5), violating (A2). With and geometric decay, the autocovariance becomes (Problem 5.2), so Roll underestimates by the factor .
- Adverse selection. If trades carry information (the next sections), moves in the direction of , violating (A3); Roll then measures only part of the effective spread (Problem 5.3).
- Strategy hygiene. A "mean-reversion" backtest on trade prices that buys after down-ticks and sells after up-ticks earns the bounce on paper but pays it in reality: you buy at the ask, not at the last trade. Always backtest intraday strategies on bid and ask, or on mids plus a spread.