reference · Order execution
Market Depth and Order Books: Read Size Beyond the Best Price
Market depth shows available buying and selling interest at multiple prices in a particular feed or venue. It helps explain why an order larger than the best displayed quantity may fill at several prices.

Key points
- An order book is a changing view of a particular market source.
- Calculate a multi-price fill using quantity-weighted prices.
- A resting limit order and a displayed price do not establish queue position or a guaranteed fill.
- FIFO is one product-specific allocation method; an order amendment can change time priority.
Scope and assumptions
- The example book is hypothetical, remains unchanged during execution and contains enough immediately executable quantity. Real books can change before an order arrives.
- The new nine-row snapshot fixture is invented single-venue price-level data for EDU-XYZ, not observed market or TradeCopier data.
- Its cancellation event is explicitly scripted; actual snapshots alone do not prove why displayed size changed.
- Three levels per side, whole contracts, a 0.10 price tick, one instrument and one feed are fixed for every example calculation.
- The separate EDU-FUT queue is fictional: one same-price outright bid level, whole contracts and a declared FIFO algorithm without implied orders, top-order treatment or other allocation steps.
- The two queue branches are alternative scenarios, not consecutive executions, and do not represent an observed venue, broker account or TradeCopier fill.
What the columns mean
An order book groups buying interest on the bid side and selling interest on the ask side. Each row associates a price with a quantity. The best bid and ask form the top of the book; additional rows show deeper levels. Spotware documents depth views and volume-weighted average prices, but the available view depends on the platform and the underlying data source.
Read the quantity unit before using a row. Four contracts, four lots and four units are not interchangeable. Also identify whether the display is an exchange book, aggregated liquidity available through a broker, or a simulated feed. A broker's visible depth is not a consolidated inventory of all buying and selling interest worldwide.
A four-contract order through two levels
Imagine an instrument with the following ask prices. This deliberately simple example assumes that displayed quantities remain available and there are no extra execution restrictions:
| Ask price | Available contracts | Used by a market buy of four |
|---|---|---|
| 100.10 | 2 | 2 |
| 100.20 | 3 | 2 |
| 100.30 | 5 | 0 |
The average entry price is (2 × 100.10 + 2 × 100.20) ÷ 4 = 100.15. The best ask was 100.10, but it covered only half the order. The 0.05 average difference is a price distance. To express it in money, multiply by four contracts and the instrument's currency value per price unit.
A buy limit of 100.10 would restrict the acceptable execution price. Under these assumptions it could immediately obtain at most two contracts at that level. What happens to the other two depends on the order's lifetime and filling policy. See time in force and partial quantities before assuming the remainder stays active.
What depth leaves unknown
The screen and the order do not arrive at the matching system simultaneously. Orders ahead of yours may consume visible liquidity; resting interest may be canceled; additional interest may appear. Some markets also permit forms of undisplayed quantity. A screenshot therefore cannot prove that a later order should have filled at its displayed price.
A limit order resting at a traded price is not automatically first in the queue. The market's matching rules, earlier orders and the actual aggressing quantity all matter. This is why a candle touching a limit price is weaker evidence than the relevant order and transaction records.
Who fills first at one price? A scoped FIFO example
For this separate exercise, EDU-FUT is a fictional futures instrument with one bid price of 100.00, three accepted outright buy-limit orders, whole-contract quantities and a declared CME Globex-style FIFO (F) matching algorithm. Assume no implied orders, top-order or lead-market-maker treatment, hidden quantity, cancellations or intervening arrivals. A sell order for five contracts then arrives at that bid. This is a teaching sequence, not CME market data, an observed broker route or a TradeCopier result.
CME's algorithm definitions say that FIFO fills same-price resting orders in time order and that increasing an order's quantity re-queues it. Its matching-steps documentation also lists pro-rata and mixed algorithms. Confirm the current instrument's algorithm from its futures security definition; do not apply this FIFO exercise to every futures contract, spread, venue or broker interface.
| Branch | Resting order and priority time (UTC) | Size at match | Fill | Remaining |
|---|---|---|---|---|
| Unchanged orders | A · 14:30:00.000 · first | 3 | 3 | 0 |
| B · 14:30:00.100 · second | 4 | 2 | 2 | |
| C · 14:30:00.200 · third | 2 | 0 | 2 | |
| B increases from four to five at 14:30:00.250 and re-queues | A · 14:30:00.000 · first | 3 | 3 | 0 |
| C · 14:30:00.200 · second | 2 | 2 | 0 | |
| B · 14:30:00.250 · third | 5 | 0 | 5 |
In the unchanged branch, the five-contract sell fills A's three first and two of B's four; C receives none. Nine contracts were resting before the match and four remain: B two plus C two. In the alternative branch, B's quantity increase loses its earlier time priority, so the queue is A, C, B. The same sell fills A three and C two; B receives none. Ten contracts were resting before that independent match and five remain with B. These branches are not consecutive trades, and a different amendment or matching algorithm can produce a different allocation.
Download the six-row synthetic queue ledger (CSV) to check each priority time, allocation and remainder. The fill quantities sum to five in each branch. An aggregate market-by-price level cannot reveal whether the five contracts went to A and B or A and C. CME distinguishes aggregated market-by-price data from market-by-order data, in which anonymous OrderID and PriorityID can help reconstruct individual priority. Even an order-level feed does not guarantee a later order will fill: the book and your priority can change before matching, and actual order acknowledgments and execution records decide the outcome.
For a copied-order investigation, record the exact destination venue or broker, instrument, algorithm when applicable, accepted order ID, amendment history, price, quantity, timestamps, partial fills and final position for each account. Do not infer a follower's queue position from the source account's depth display. This example explains one exchange matching rule; it does not establish that TradeCopier supports a particular futures route or that an eligible instruction received a fill.
Reconcile the result rather than the screenshot
Keep the requested quantity, order acknowledgment, every partial deal, any cancellation and the final position. Add filled quantities before calculating their weighted average. For example, two deals of two contracts each are one four-contract result; averaging their prices without quantity weighting works here only because their sizes are equal.
Across copied accounts, compare each account's own fills and available instrument. Different books, arrival times or requested sizes can create different results even from the same source instruction. The existing partial-fill guide extends that reconciliation task. None of these observations establishes a universal fill guarantee or platform compatibility.
Calculate a scoped, visible order-book imbalance
An imbalance compares displayed bid and ask quantities in a specified view. For this exercise, use the first three price levels on each side of one invented venue, at one timestamp, with quantities in whole contracts. Define I3 = (B3 - A3) / (B3 + A3), where B3 is the sum of bid contracts at levels 1 through 3 and A3 is the matching ask sum. A positive value means more visible bid quantity in those levels of that snapshot. It does not identify the next price move, all available liquidity, participant intent, or an executable fill.
CME distinguishes market-by-price data, which aggregates quantities at each price level, from market-by-order data, which adds anonymous individual-order detail. Do not treat a price-level summary as a queue-position record. CME's liquidity-tool methodology also describes timestamped book updates after orders, trades and cancellations. Neither source defines this three-level I3 as a CME signal; the ratio and its three-level boundary are our declared teaching convention.
The downloadable example uses EDU-XYZ, an invented instrument with a 0.10 price tick. It is a synthetic single-venue price-level feed, not TradeCopier data, CME market data or a cTrader account. All nine rows record the same unit and feed scope. The event labels are part of our fictional script; two real snapshots alone would not reveal whether a size change came from cancellation, execution, replacement or another cause.
| Timestamp (UTC) | Bid levels, contracts | Ask levels, contracts | B3 / A3 | I3 | Best spread |
|---|---|---|---|---|---|
| 14:30:00.000 | 8 + 6 + 4 | 4 + 5 + 3 | 18 / 12 | 6 / 30 = +0.20 | 100.00 - 99.90 = 0.10 = 1 tick |
| 14:30:00.250 | 8 + 6 + 4 | 2 + 5 + 3 | 18 / 10 | 8 / 28 = +0.285714 | 100.00 - 99.90 = 0.10 = 1 tick |
| 14:30:00.500 | 2 + 2 + 1 | 2 + 1 + 1 | 5 / 4 | 1 / 9 = +0.111111 | 100.20 - 99.80 = 0.40 = 4 ticks |
At 14:30:00.250 our scripted event cancels two contracts at the best ask and records no trade. I3 rises from 20% to about 28.5714% while the top prices and spread stay unchanged. At 14:30:00.500 a new book has just nine visible contracts across both sides and a four-tick spread; the intervening event sequence is deliberately unspecified. Its positive 11.1111% imbalance is not evidence of ample executable size. Both CME's fill-quality analysis and the changing example show why one displayed depth number cannot stand in for a full execution assessment.
Download the nine-row synthetic snapshot CSV. Recalculate bid and ask totals from the three rows for each timestamp before using the ratio. If either side is missing, the feed timestamp is unavailable, quantity units differ, or the planned three levels are incomplete, label this exact calculation unavailable instead of silently treating a missing value as zero. If B3 + A3 is zero, the ratio is undefined.
Compare feeds and timestamps before interpreting the number
The scope of a depth view matters. Spotware documents Standard, Price and volume-weighted-average-price depth views in cTrader; these displays answer related but different questions. A cTrader view cannot be assumed to contain the same venues, orders, levels, units or timestamps as a CME price-level feed. Record the exact instrument, feed/provider, selected side and levels, quantity unit, time zone, snapshot timestamp and price increment beside every computed I3. A comparison across accounts is meaningful only after those fields are made comparable.
Displayed interest can be canceled or replaced before an instruction arrives. A market-by-price summary cannot establish an individual order's queue place; even more detailed order-level data does not reserve displayed size for a later incoming order. A quote that was fresh at capture can already be stale for a decision. Keep the event sequence and actual fills separate from the pre-trade snapshot.
Use a decision record when visible liquidity looks thin
The table below is a blank operating-policy example, not a buy or sell recommendation. Define any thresholds, permitted order types and who may approve an exception before seeing the outcome. The same snapshot can support different choices under different mandates; none of the rows claims that waiting, using a limit or sending no order will improve returns.
| Observable state | Evidence still needed | Possible rule to document |
|---|---|---|
| Displayed spread widens and size on the intended execution side is below the proposed quantity | Fresh timestamp, deeper levels, order size and permissible price boundary | A policy may wait for a fresh book, set a limit that can remain unfilled, or send no order. |
| One side or its timestamp is missing | Feed health and venue or broker trading status | Mark the cost estimate unavailable; a no-order rule can apply until the data is restored. |
| Two accounts show different depth or spread | Instrument identity, unit conversion, provider scope and capture times for both feeds | Review each destination independently rather than carrying one account's estimated fill to the other. |
| A narrow top spread appears with little visible quantity | Depth beyond the best price, arrival time and actual executed deals | A limit may bound price but has nonfill or partial-fill risk; a wait or no-order rule remains possible. |
A later review should compare the chosen reference price and time with each actual fill, quantity, fee and final position. The original four-contract example above shows how a weighted fill can differ from the best displayed ask. This additional I3 worksheet measures a different thing: the balance of visible resting size in three selected levels. Neither metric alone explains a broker result or validates a TradeCopier feature. Preserve the original order and deal records before attributing a difference to thin liquidity.
Questions and answers
Does a large bid mean the price will rise?
No. Displayed interest can change, be canceled or be executed. A depth snapshot is not a reliable forecast and may cover only one venue or broker's available liquidity.
Why did my fill differ from the best ask?
The best ask may have covered less quantity than your order, or the book may have changed before execution. Inspect the individual deals and their quantities before attributing the difference to one cause.
Is order-book volume the same as traded volume?
No. Book quantities describe available or resting interest at that moment. Traded volume describes completed transactions over a period; canceled orders can disappear without becoming trades.
How do I calculate the three-level imbalance in the example?
Add the first three displayed bid quantities to obtain B3 and the first three displayed ask quantities to obtain A3, then calculate (B3 - A3) / (B3 + A3). Snapshot A has 18 bid and 12 ask contracts, giving 6/30 = +0.20. This is only the declared three-level, single-feed snapshot measure.
Why did the example imbalance rise even though no trade occurred?
The fictional event script cancels two contracts at the best ask, changing the ask total from 12 to 10 while bid size stays 18. The ratio becomes 8/28, about +0.285714. In real data, two snapshots alone cannot establish whether a change was a cancellation, execution or replacement.
Do two books with the same imbalance have the same liquidity?
No. A ratio omits absolute size, spread, order size, available levels and how quickly displayed interest changes. Compare those fields and actual fills before making an execution-quality assessment.
What if one book side or its timestamp is missing?
Mark this exact three-level reading unavailable. Do not treat missing size as zero, silently mix feeds or assume an old quote is still executable. If the denominator is zero, the ratio is undefined.
Can one account's depth estimate be applied to a copied account?
Not automatically. Instrument identity, provider scope, quantity unit, quote time and actual order size may differ. Compare each destination's available evidence and its own order and fill records; a shared source instruction does not guarantee equal fills.
If a futures contract trades at my limit price, will my resting order fill?
Not necessarily. On a product using FIFO, earlier same-price orders receive the incoming quantity first. Other products can use different allocation steps. Confirm the instrument's current matching algorithm, your accepted order and actual fills; a price-level book or candle does not prove your queue place.
Can increasing a resting order's size change its FIFO priority?
Yes, under CME Globex's documented FIFO algorithm an increase in quantity loses time priority and re-queues the order. In the fictional five-contract sell example, that change moves B behind C, so C receives two contracts it did not receive in the unchanged branch. This is not a universal rule for every venue or a measured TradeCopier outcome.
Sources and further checks
Use the current source for your exact instrument, account and platform. Referencing a general specification does not establish support for every TradeCopier workflow.
- Spotware: Depth of Market · Checked September 19, 2026
- MetaQuotes: Order Properties · Checked September 19, 2026
- Spotware: Trading Conditions · Checked September 19, 2026
- CME Group: Understanding the CME Liquidity Tool Methodology · Checked September 23, 2026
- CME Group: Market by Order (MBO) · Checked September 23, 2026
- CME Group: Assessing Liquidity · Checked September 23, 2026
- CME Group: Supported Matching Algorithms · Checked September 24, 2026
- CME Group: Matching Algorithm Steps · Checked September 24, 2026
- CME Group: Futures Security Definition (MatchAlgorithm) · Checked September 24, 2026
Found an error? Send a correction with this page's address and a primary source. See our editorial standards for how we handle examples, claims and revisions.

