Bid-ask bounce: why transaction prices can alternate
Bid-ask bounce occurs when successive transactions alternate between prices near the bid and ask even if the underlying value changes little. That alternation can create negative first-order covariance in price changes and inflate volatility measured from very short return intervals.
- Observed input
- Successive transaction prices
- Classic signature
- Negative lag-one covariance of price changes
- Main limit
- Price movement also reflects information and inventory
Key Takeaways
- Transaction prices can move between bid and ask without the midpoint moving by the same amount.
- Roll's estimator infers an effective spread from negative serial covariance.
- The estimator relies on market-efficiency and stationarity assumptions.
- Quoted bid and ask data is preferable when the actual spread is available.
The bounce mechanism
A buyer-initiated marketable order often trades near the ask. A seller-initiated marketable order often trades near the bid. If the next trade switches side while the midpoint is stable, the observed transaction-price change reverses. Repeated switching can look like short-horizon mean reversion.
The Roll price-only estimator
Richard Roll derived an implicit spread estimate from the first-order covariance of transaction-price changes. The real-valued expression requires a negative covariance. A non-negative sample covariance is not evidence of a zero spread; it means the simple estimator does not produce a valid estimate under that sample.
Roll estimator
effectiveSpread = 2 × sqrt(-Cov(ΔPₜ, ΔPₜ₋₁))
condition: Cov(ΔPₜ, ΔPₜ₋₁) < 0Assumptions and competing effects
The original model assumes an informationally efficient market and a stationary distribution over the estimation window. Price discreteness, clustered trades, changing spreads, serially correlated fundamental returns, stale prices, and different market regimes can bias the result.
A Pine Script proxy has a narrow claim
Pine Script can calculate lagged covariance from the price series available on the chart and display when the Roll condition holds. Bar closes are not transaction ticks, so the output is a price-series proxy rather than a direct bid-ask measurement. Pineify can generate that code, but it cannot add missing quote history.
Generate a clearly labeled Roll proxy
Define the price field, covariance window, missing-value behavior, and the non-negative covariance state. Pineify can generate editable Pine Script that plots the proxy and its validity flag. Review the calculation against your data source.
Sources and verification
This page is educational and does not provide investment advice. The methods described are diagnostics or estimates, not trading signals. Results depend on data quality, sampling, market structure, and model assumptions.