Most order book tools show a single number or a colored bar: “62% bids.” Few explain how that number was computed, how many price levels it includes, or why it can flip from 62% bids to 55% asks in two seconds without a single trade. This guide builds the imbalance ratio by hand from a sample book, shows the variants worth knowing, and then explains the part that matters most for interpreting it: resting orders are not commitments, and the book can be shown to you on purpose.
The sample book
Illustrative BTC/USDT book, top five levels each side:
| Bid price | Bid size (BTC) | Ask price | Ask size (BTC) |
|---|---|---|---|
| 59,990 | 2.1 | 60,000 | 0.9 |
| 59,980 | 1.4 | 60,010 | 1.1 |
| 59,970 | 3.0 | 60,020 | 0.7 |
| 59,960 | 0.8 | 60,030 | 2.4 |
| 59,950 | 1.2 | 60,040 | 1.4 |
| Total | 8.5 | 6.5 |
Three ways to compute imbalance
1. Depth imbalance over N levels
Imbalance = (Bid volume − Ask volume) ÷ (Bid volume + Ask volume)
Over five levels: (8.5 − 6.5) ÷ (8.5 + 6.5) = 2.0 ÷ 15.0 = +0.133. The range is −1 (only asks) to +1 (only bids). A tool that shows “57% bids” is giving you the same thing as a share: 8.5 ÷ 15 = 56.7%.
2. Top-of-book imbalance
Only the best bid and best ask: (2.1 − 0.9) ÷ (2.1 + 0.9) = +0.40. Much stronger than the five-level reading, because the best bid happens to be large. This is the version most closely tied to the next few ticks, and the version that changes fastest.
A related quantity is the microprice, which shifts the mid-price toward the side that is likely to be hit:
Microprice = (Ask × Bid size + Bid × Ask size) ÷ (Bid size + Ask size)
(60,000 × 2.1 + 59,990 × 0.9) ÷ 3.0 = $59,997. The simple mid is $59,995. The microprice sits $2 closer to the ask because there is less size to clear there.
3. Distance-weighted imbalance
Orders far from the touch are less likely to trade soon, so many traders down-weight them. With illustrative weights of 1.0, 0.8, 0.6, 0.4, 0.2 for levels 1 to 5:
- Weighted bids = 2.1(1.0) + 1.4(0.8) + 3.0(0.6) + 0.8(0.4) + 1.2(0.2) = 5.58
- Weighted asks = 0.9(1.0) + 1.1(0.8) + 0.7(0.6) + 2.4(0.4) + 1.4(0.2) = 3.44
- Imbalance = (5.58 − 3.44) ÷ (5.58 + 3.44) = +0.237
Same book, three answers: +0.13, +0.24, +0.40. None is “the” imbalance. Before you trust any dashboard, find out which one it uses and over what depth (levels, or a percentage band like ±0.5% from mid).
What imbalance does and does not tell you
There is real research behind the idea. Cont, Kukanov and Stoikov, in “The Price Impact of Order Book Events”, found that over short intervals price changes in US stocks were mainly driven by order flow imbalance at the best bid and ask, with a roughly linear relationship whose slope is inversely proportional to market depth. Two details in that finding are easy to miss:
- It is about changes in the best bid and ask queues (orders added, cancelled and filled), not a static snapshot of resting size.
- It is about short horizons. A book snapshot says little about where price will be in an hour.
So a static +0.13 does not mean “buyers are winning.” It means more size is currently displayed on the bid within five levels. Whether that size stays, gets pulled, or gets traded through is the information.
Absorption: imbalance plus executed volume
Absorption is what you call it when aggressive orders keep hitting one side and price does not move, because passive orders on that side keep refilling. You need two data streams to see it: the book (resting size at a level) and the trade tape (which side was the aggressor). On Binance, for example, each aggregated trade carries a flag for whether the buyer was the maker; if true, the seller was the aggressor.
Worked absorption check
Illustrative: over 60 seconds, the tape shows 18 BTC of market sells executed at 59,990. At the start of the window, the displayed bid at 59,990 was 2.1 BTC. At the end it still shows about 2 BTC, and the price has not ticked lower.
- Executed at the level: 18 BTC
- Average displayed size: about 2 BTC
- Ratio: roughly 9 times the visible size traded without the level breaking
That pattern is consistent with a buyer refilling the bid (an iceberg-style order, or a market maker repeatedly re-quoting). It is evidence that this level absorbed selling for that minute. It is not evidence of who the buyer is, or that they will keep doing it. When the refilling stops, the level can break immediately. The breakout and failure side of that story is covered in our volume confirmation guide.
Spoofing and the limits of what you can see
US commodities law defines spoofing in 7 U.S.C. § 6c(a)(5)(C) as “bidding or offering with the intent to cancel the bid or offer before execution.” The key word is intent. A large order that appears and disappears is not proof of spoofing; legitimate traders cancel constantly when prices move. Regulators prove intent with account-level order records that you do not have.
What you can do is see how fragile an imbalance reading is. Add one illustrative 25 BTC bid at 59,950 to the sample book. The five-level imbalance jumps from +0.133 to (33.5 − 6.5) ÷ 40 = +0.675. One order, possibly cancelled a second later, quadrupled the reading. That is the practical problem: imbalance measures displayed liquidity, and displayed liquidity costs nothing to display until it trades.
Practical filters
- Persistence: only count size that has rested for a minimum time (for example, several book updates). Flickering size gets ignored.
- Distance: large orders several levels away move the depth ratio but rarely trade soon. Distance weighting reduces their influence.
- Trades over quotes: give more weight to what executed (the tape) than to what is resting.
- Cap single levels: clip any one level at a multiple of the median level size before summing.
None of these filters tells you anyone’s intent. They only make your number less sensitive to orders that never trade, which is the same reason traders are told not to assume every swept level was deliberate stop hunting.
Where imbalance fails
- Single venue. BTC trades on many exchanges. The book on one venue is a slice of total liquidity, and arbitrage traders can move price there from elsewhere.
- Snapshot delay. Many retail feeds update every 100 ms to 1 second. Binance’s spot partial-depth streams, for instance, push at 1000 ms or 100 ms. The fastest participants react within that gap.
- Hidden size. Iceberg and other non-displayed orders do not appear until they trade.
- News and macro. Imbalance has nothing to say about a CPI print or an exchange outage.
Test it yourself
- Pick one symbol and venue. Record the five-level imbalance and the top-of-book imbalance every few seconds for an hour, using the exchange’s public depth stream or an order book tool that exports.
- Record the mid-price 10 seconds and 60 seconds later for each reading.
- Bucket readings (below −0.3, −0.3 to +0.3, above +0.3) and compare the average subsequent move per bucket. Then repeat with the spoof-resistant filters above and see whether the relationship strengthens or disappears.
- Note in your trading journal the cost side: a 10-second edge smaller than your fees and spread is not usable at retail speed.
For a wider view of who places most of these orders and what their activity looks like in the data, see our companion article on HFT footprints in order flow.
Financial disclaimer: This article is for educational purposes only and is not financial, investment, or trading advice. Trading involves substantial risk of loss. Example figures are illustrative.
2 thoughts on “Order Book Imbalance: How to Calculate It and Read Absorption”