Qm
Advanced

The Roll Spread Model

A clever trick that recovers the bid-ask spread from nothing but the sequence of traded prices, no quotes needed. Because trades bounce between bid and ask, consecutive price changes are negatively correlated, and the size of that correlation reveals the spread.

Prerequisites: Autocorrelation and Serial Correlation, Covariance Matrix Estimation

Suppose all you have is a list of prices a stock traded at, no bid, no ask, just the tape of executions. Can you figure out how wide the bid-ask spread was? Richard Roll showed in 1984 that you can, using one elegant observation: because trades randomly hit the bid or lift the offer, the traded price keeps bouncing between the two, and that bounce leaves a fingerprint in the numbers.

Picture a stock whose true value sits still at $50.00 with a spread of 4 cents, so the bid is $49.98 and the ask is $50.02. A buyer's trade prints at $50.02; the next trade, if a seller, prints at $49.98; then maybe a buyer again at $50.02. The value never moved, but the printed price zig-zags up and down. This is the bid-ask bounce, and it makes each price change tend to reverse the last one.

ask 50.02 bid 49.98 value 50.00 successive trades →
The bid-ask bounce: with the true value flat, trades print at the ask (green, a buy) or the bid (clay, a sell). Each move up tends to be followed by a move down and vice versa, a negative serial correlation whose magnitude encodes the spread.

From bounce to spread

Roll modeled trades as equally likely to be buys or sells, independent of each other, around a fixed value. Under those assumptions the change in price from one trade to the next has a negative first-order autocovariance:

Cov(Δpt,Δpt1)=s24,\operatorname{Cov}(\Delta p_t,\, \Delta p_{t-1}) = -\frac{s^2}{4},

where Δpt\Delta p_t is the change in traded price from trade t1t-1 to trade tt, and ss is the effective bid-ask spread (in the same units as price). The minus sign is the whole story: it says an up-tick is typically followed by a down-tick. Turning the equation around to solve for the spread gives Roll's estimator:

s=2Cov(Δpt,Δpt1).s = 2\sqrt{-\operatorname{Cov}(\Delta p_t,\, \Delta p_{t-1})} .

In words: take consecutive price changes, compute how much a move tends to reverse (the negative covariance), flip its sign, square-root it, and double it. Out pops the spread, from prices alone.

Roll's spread is s=2Cov(Δpt,Δpt1)s = 2\sqrt{-\operatorname{Cov}(\Delta p_t, \Delta p_{t-1})}. The bid-ask bounce makes consecutive price changes negatively correlated, and the size of that negative correlation is exactly a quarter of the spread squared.

Worked example

You collect nine consecutive trade prices (in dollars): 50.02, 49.98, 50.02, 49.98, 49.98, 50.02, 49.98, 50.02, 49.98. The eight price changes Δp\Delta p are:

0.04,  +0.04,  0.04,  0,  +0.04,  0.04,  +0.04,  0.04.-0.04,\; +0.04,\; -0.04,\; 0,\; +0.04,\; -0.04,\; +0.04,\; -0.04 .

To get the first-order autocovariance, pair each change with the previous one and average the products. The seven pairs (Δpt1,Δpt)(\Delta p_{t-1}, \Delta p_t) give products:

(0.04)(+0.04),(+0.04)(0.04),(0.04)(0),(0)(+0.04),(+0.04)(0.04),(0.04)(+0.04),(+0.04)(0.04)(-0.04)(+0.04),\, (+0.04)(-0.04),\, (-0.04)(0),\, (0)(+0.04),\, (+0.04)(-0.04),\, (-0.04)(+0.04),\, (+0.04)(-0.04)

which are 0.0016,0.0016,0,0,0.0016,0.0016,0.0016-0.0016,\, -0.0016,\, 0,\, 0,\, -0.0016,\, -0.0016,\, -0.0016. Their average is

Cov0.00807=0.00114.\operatorname{Cov} \approx \frac{-0.0080}{7} = -0.00114 .

Plug into Roll's formula:

s=20.00114=2×0.0338=0.068.s = 2\sqrt{0.00114} = 2 \times 0.0338 = 0.068 .

So the implied spread is about 6.8 cents, in the right neighborhood of the true 4-cent spread, and it would converge closer with a longer sample. The point is not the exact number from nine trades but that a pure price series handed us a spread estimate at all.

Roll's model assumes the true value doesn't move and order flow is a coin flip. In reality, informed trading and genuine news make the covariance turn positive on trending names, and then the formula asks for the square root of a negative number and simply fails. When that happens, don't force it; a positive covariance is telling you information (not just the bounce) is driving prices, which is precisely what The Glosten-Milgrom Model and Adverse Selection models handle.

Think of Roll as the spread cousin of Amihud Illiquidity: both extract a liquidity cost from cheap, low-frequency data. Roll gives you the bid-ask cost (the round-trip spread) while Amihud gives you the impact cost (how far the price moves per dollar). Together they sketch a stock's total trading cost without a single quote.

Where it sits

Roll launched the whole literature on inferring microstructure costs from transaction data, later refined by models that split the spread into its parts (order-processing, inventory, and adverse-selection components, see Bid-Ask Spread Decomposition). It remains a first-pass estimator when quote data is missing or unreliable, and its core insight, that the mechanical bounce between bid and ask hides inside the autocorrelation of prices, is one of the most quoted results in all of market microstructure.

Discussion

Sign in to join the discussion · reading is open to everyone

💡 Discussion rules

  1. Ask and answer about this concept. Off-topic gets removed.
  2. No homework dumps. Show what you tried first.
  3. Corrections are welcome. Cite a source when you claim an error.

Loading discussion…

Related concepts

Practice in interviews

Further reading

  • Roll (1984), A Simple Implicit Measure of the Effective Bid-Ask Spread
  • Hasbrouck, Empirical Market Microstructure
ShareTwitterLinkedIn