Bid-Ask Bounce

The bid-ask bounce is a specific situation when the price of a stock or other asset bounces back and forth within the very limited range between the bid price and ask price. This happens when there are trades on both the bid and asking price, but no real movement in price. The bounce can also occur when the bid price jumps to become equal to what the selling price was just a moment before, but then drops back to its original level.

— Investopedia

Photo by Samuel-Elias Nadler on Unsplash

In our previous two articles, we briefly discussed some of our findings on bid-ask spreads and bid-ask imbalances on various crypto markets. In this article, we will focus on another key concept: bid-ask bounce. Perhaps the most prominent literature reference about this topic is Richard Roll’s seminal paper entitled “A Simple Implicit Measure of the Effective Bid-Ask Spread in an Efficient Market”. One of the key concepts considered in the development of his model is the idea of a “bid-ask bounce”. In such a model, Roll has shown that the effective bid-ask spread can be measured by

Spread = 2*sqrt(-cov) (1)

where “cov” is the first-order serial covariance of price changes.

To first get a real feeling of such energetic bounces, head over to More often than not, you will find that xbtusd on bitmex has very high volume of trades bouncing between two prices: the bid price and the ask price that remain unchanged for quite a while (though the bid size and the ask size do change crazily). Now we can download the actual data from, which will give us an AWS S3 pre-signed url containing second-by-second quotes for 2020–10–17:


Notice that the data are sparse: between 1602892800 (unix timestamp) and 1602892803 there aren’t any data points which means that the quotes (more specifically, bid price and bid size and ask price and ask size) didn’t change between those two timestamps. Using a small script we can easily find out the longest period of time during which the quote prices remained unchanged: from 1602971401 (unix timestamp) to 1602973141 (that is 29 minutes !!) the bid price remained at $11337.5 and the ask price remained at $11338. Notice that $0.5 happens to be the tick size for xbtusd on bitmex at the time of writing (Tick size can be changed by bitmex). As a market maker, you’d be so happy to stay with this period of time to minimize inventory skew: according to Roll’s model, in the absence of new information there is equal probability that the next actual trading price will take the bid price or the ask price, therefore it is almost guaranteed that market makers won’t have one-sided hanging orders. Now let us examine the actual trades to see whether the equal probability assumption is true or not, and compute the effective bid-ask spread using equation (1). We can download the data from Slice the data between 1602971401 (unix timestamp) and 1602973141, we can estimate the following probabilities:

Interesting enough, some of these probabilities aren’t very close to 0.5 (i.e. the assumption in Roll’s model). Nevertheless, let us proceed to calculate the effective bid-ask spread using equation (1): $0.43. Wow! That’s a pretty good estimate of the actual bid-ask spread of $0.5! Before concluding this short and sweet article, we would like to point out two important aspects explicitly expressed in equation (1). First, the clever use of covariance can reduce the skews/artifacts introduced by drifting of mean values, therefore the formulus isn’t restricted by the assumption that we have to stay within a strictly-bid-ask-bouncing period of time. Second, the covariance needs to be negative which is a reflection that a trade is likely to be followed by a trade in the opposite direction (Sell after a Buy and vice versa). This means whenever the calculated covariance becomes positive and thus Roll’s model is broken, it is a string sign of trending behavior and that market makers will have elevated adverse selection and inventory risk and must be very careful in such situations. For more information we found this excellent Q&A on stackexchange.



Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store