Quant Memo
Advanced

Microstructure Noise in High-Frequency Prices

Every observed tick is the efficient price plus a small trading-mechanics error. That error is harmless at daily frequency and catastrophic at tick frequency, where it makes realised volatility blow up and returns look artificially mean-reverting.

Prerequisites: Order Book Mechanics, Volatility

A newcomer to high-frequency data usually reaches the same reasonable conclusion twice: more data is better, so estimate volatility from every tick rather than from daily closes. Then the number comes back four times too large, and sampling more finely only makes it worse. The data is not broken. You have run into microstructure noise — the gap between the price the market "really" thinks and the price that happens to print.

The standard decomposition is one line. Write the observed log price at time tt as

pt=pt+utp_t = p^*_t + u_t

where ptp^*_t is the efficient price (the unobservable value that only moves on genuine news, and moves like a random walk) and utu_t is the noise — a small, roughly zero-mean, roughly independent error caused by the mechanics of trading. In English: what you see is the truth plus a trading-mechanics wobble.

Where does the wobble come from? Mostly:

  • Bid-ask bounce. Buyer-initiated trades print at the ask, seller-initiated at the bid. With a flat efficient price the tape still zig-zags by the full spread.
  • Price discreteness. Prices land on the tick grid, so every print is rounded.
  • Stale and non-synchronous quotes, order splitting, and inventory effects that push a market maker's quotes temporarily off fair value.

An actual tape

Take a stock with a genuinely flat efficient price of $10.01, bid $10.00, ask $10.02. Eight trades arrive, alternating aggressor, and nothing whatsoever happens to fair value:

#AggressorPrintReturn (¢)
1buy10.02
2sell10.00−2
3sell10.000
4buy10.02+2
5sell10.00−2
6buy10.02+2
7buy10.020
8sell10.00−2

The efficient price never moved, so true variance over this window is zero. Yet the realised variance from these prints is the sum of squared returns: (2)2+0+22+(2)2+22+0+(2)2=24(-2)^2 + 0 + 2^2 + (-2)^2 + 2^2 + 0 + (-2)^2 = 24 in squared cents. All of it is noise. Sample the same window at its endpoints only — 10.02 to 10.00 — and you get (2)2=4(-2)^2 = 4. Sampling ten times finer would have produced roughly ten times the variance.

That is the whole problem in one table: noise variance accumulates with the number of observations, while true variance accumulates with elapsed time.

Why realised variance explodes

Realised variance over nn intervals is RVn=i=1nri2RV_n = \sum_{i=1}^{n} r_i^2, the sum of squared returns. Each observed return contains a fresh pair of noise terms, and taking expectations gives the standard bias result

E[RVn]IV+2nσu2\mathbb{E}[RV_n] \approx \text{IV} + 2n\,\sigma_u^2

where IV\text{IV} is the integrated (true) variance you want and σu2\sigma_u^2 is the variance of the noise. In plain English: the honest signal is a constant, but the garbage term grows linearly in how often you sample. Push nn to every tick and the estimator converges to a measure of the spread rather than of volatility.

the tape vs the truth efficient observed time signature plot true IV 1 tick 30 min RV
Left: with a flat efficient price, bid-ask bounce alone makes the tape zig-zag. Right: the volatility signature plot — realised variance is flat at coarse sampling and blows up as the interval shrinks, because noise variance grows with the number of observations.

The fingerprint: negative autocorrelation

Noise leaves a signature you can test for. Because a bounce down is likely to be followed by a bounce back up, observed returns are negatively autocorrelated at lag 1 even when the efficient price is a pure random walk. Under the simple i.i.d.-noise model the first autocovariance is exactly σu2-\sigma_u^2, which is the engine behind the The Roll Spread Model: measure the lag-1 autocovariance of tick returns, and back out the effective spread as 2cov(rt,rt1)2\sqrt{-\text{cov}(r_t, r_{t-1})}.

Run that on the eight-trade tape above and it recovers a 2-cent spread — the right answer, and a reminder that the "noise" carries real information about trading costs even as it destroys your volatility estimate.

Observed price = efficient price + noise. True variance grows with elapsed time; noise variance grows with number of observations. That single asymmetry explains the exploding signature plot, the negative return autocorrelation, and why the honest fix is to sample less often than your data allows.

What practitioners actually do

  • Sample at 5 minutes. Crude, and the workhorse for a reason: it is coarse enough that the noise term is small relative to true variance, fine enough to beat daily data.
  • Two-scales realised volatility (Zhang, Mykland & Aït-Sahalia). Compute RV on a fast grid and a slow grid, then combine them so the noise term cancels.
  • Realised kernels (Barndorff-Nielsen et al.), which down-weight the contaminated high-lag autocovariances.
  • Quote midpoints instead of trades, which removes bounce but not discreteness or staleness.

The classic mistake is treating a blown-up tick-frequency RV as evidence of high volatility, then sizing positions or pricing options off it. It is not volatility, it is mostly spread. Always plot the signature curve first: if RV keeps climbing as the interval shrinks, you are measuring microstructure, not risk.

In interviews

Expect: "you have tick data — why not use all of it to estimate volatility?" State the decomposition, say the bias term is 2nσu22n\sigma_u^2 and grows with sampling frequency, then give the flat-efficient-price bounce example — it is fully convincing in thirty seconds. A good follow-up answer is that the noise is not purely a nuisance: its lag-1 autocovariance is how The Roll Spread Model estimates the effective spread from prices alone.

Related concepts

Practice in interviews

Further reading

  • Roll (1984), A Simple Implicit Measure of the Effective Bid-Ask Spread
  • Zhang, Mykland & Aït-Sahalia (2005), A Tale of Two Time Scales
  • Hansen & Lunde (2006), Realized Variance and Market Microstructure Noise
ShareTwitterLinkedIn