What a Market-by-Order DOM Shows That a Regular DOM Doesn't
A regular DOM shows the total size at each price. A market-by-order DOM shows the individual orders behind it, and where your own order stands in line. Here is what that changes for futures traders.
Look at a DOM ladder on ES and you see a column of prices with a number beside each one: 250 contracts bid at this price, 310 offered at that one. It feels like a complete picture of the order book. It is a summary.
Behind every one of those numbers is a queue of individual orders, each with its own size and its own place in line. A regular DOM adds them up and shows you the total. A market-by-order DOM shows you the queue.
For a trader who uses limit orders, that difference is not academic. It changes what you can know about a level, and it changes what you can know about your own order.
Two Ways an Exchange Publishes the Book
CME Group publishes its order book in two formats, described on its own pages as Market by Price and Market by Order.
Market by Price (MBP) is the price-level view. CME describes it as restricting updates to a maximum of 10 price levels and consolidating all of the quantity at each level into a single update, which includes the total quantity and the number of orders. In CME's words, with MBP "individual queue position and order sizes cannot be determined with a high degree of accuracy."
Market by Order (MBO) is the order-level view. CME describes it as an order-based feed that "provides the ability to view individual queue position, full depth of book and the size of individual orders at each price level." It covers all price levels rather than the top 10, and each order carries an anonymous OrderID and a priority value used to sort the queue.
So the two formats differ in three ways:
| Market by Price | Market by Order | |
|---|---|---|
| Depth | Top 10 price levels | Every price level |
| At each price | Total size and order count | Every individual order and its size |
| Queue order | Not available | Each order's priority in the queue |
MBO data is anonymous. CME states that it contains no customer-identifiable information: you see that an order of 40 contracts is resting at a price, not whose it is.
Why Queue Order Matters in ES and NQ
The reason order-level data matters so much for E-mini traders is the way CME matches orders in these markets.
E-mini equity index futures match on a FIFO (first in, first out) basis. CME's FAQ for its Micro E-mini futures, for example, states that they use FIFO, "identical to their E-mini counterparts." Under FIFO, CME's documentation says, resting orders at a price are matched in the order of their timestamps: earliest first, then the next earliest, and so on.
That means at any given price, a resting limit order fills only after every order ahead of it in the queue has filled or been canceled. Two traders with buy orders at the same price can have very different chances of being filled, depending on when each order joined the line.
CME's matching documentation also lists the changes that cost an order its place in line. A modified order loses its timestamp priority when its working quantity is increased, its price is changed, or its account number is changed. Moving your order a tick and back, or adding a contract to it, sends it to the back of the queue.
A regular DOM shows how much is ahead of you only in the crudest sense: it shows the total at the price. It does not show how much of that total joined before you and how much joined after.
What the Order Count Tells You
Even before queue position, splitting a level into its orders changes how you read it.
Take two prices on an ES ladder, each showing 400 contracts on the bid. The numbers below are an invented illustration.
- Price A: 400 contracts made up of 160 orders. Most are one, two or three lots.
- Price B: 400 contracts made up of 3 orders: one of 300, two of 50.
A regular DOM shows both as 400. They are not the same level.
Price A is broad interest from many participants. If some cancel, the level changes gradually. Price B is mostly one order. If that single 300-lot is canceled, three-quarters of the level disappears at once.
Knowing the composition helps you read what happens next. If price trades down to Price B and the 300-lot fills, you have learned that someone was willing to buy 300 contracts there. If the 300-lot vanishes as price gets close, you have learned something different, and you learn it at the moment it happens rather than inferring it from a sudden drop in a total.
MBP data does carry the number of orders at each of its 10 levels, so some DOMs can show an order count. What MBP cannot show is how that size is split: 400 contracts across 3 orders could be 300, 50 and 50, or 134, 133 and 133. Only order-level data tells you that one of them is a 300-lot.
Large Orders on the Ladder
Because an MBO DOM knows the size of every individual order, it can mark the large ones. What counts as large depends on the market and the time of day: a 50-lot in ES during regular hours is ordinary, while in a thinner market or the overnight session it may stand out.
Marking large orders helps in a few practical ways:
- Levels with a large order at the front of the queue behave differently from levels where the large order is at the back. A 300-lot at the front fills first. A 300-lot at the back means everything ahead of it has to trade before it does.
- Large orders that appear and disappear are visible as individual events, not just as a total that jumps.
- Large orders that fill tell you a real participant transacted there, which is information about the level after the fact.
A caution: a resting order is a statement of intent that can be withdrawn at any time. Large orders get canceled routinely for ordinary reasons. Reading intent into any single order, large or small, is guesswork. Order-level data shows you what is on the book. It does not tell you why.
Iceberg Orders
Some orders show only part of their size. CME documents how its own exchange-held icebergs (which it calls native icebergs) appear in MBO data: when the displayed quantity is refreshed, the refreshed order keeps the same OrderID as the original.
CME's matching documentation adds that after a match, a display-quantity order is refreshed and its priority is set to the lowest of the remaining orders at that price: it goes to the end of the queue.
For a reader of the DOM, that means repeated refills of the same order at the same price are something order-level data can make visible, where a regular DOM would only show a total that keeps getting replenished.
Your Place in Line
The most practical difference for a trader is what MBO tells you about your own order.
When your limit order joins a price, it goes to the back of the queue there. From that moment, the contracts ahead of you can shrink in only two ways:
- They trade. Aggressive orders arrive and fill the orders ahead of you, oldest first.
- They cancel. Orders ahead of you are withdrawn.
Orders that join after you do not matter to your fill: they are behind you. Cancellations behind you do not help you either.
This is where a regular DOM leaves you guessing. If the total at your price drops from 400 to 350, a price-level view cannot tell you whether those 50 contracts were ahead of you (good for your fill) or behind you (no change). Software working from price-level data has to estimate, for example by assuming cancellations come proportionally from everywhere in the queue, or from the back. The estimate can drift a long way from reality over the life of an order.
With order-level data, every order ahead of yours is known individually. When one fills or cancels, the contracts ahead of you change by exactly that amount.
Worked Example: Joining the Bid
An invented illustration, with round numbers chosen for the arithmetic.
ES is trading 5,800.00 bid, 5,800.25 offered. You place a buy limit order for 2 contracts at 5,800.00. At that moment the bid at 5,800.00 holds 300 contracts from earlier orders.
Contracts ahead of you: 300.
Over the next minute:
- Sellers hit the bid for 120 contracts. Those fill the oldest orders first.
- Ahead of you: 300 - 120 = 180
- Orders totaling 80 contracts that were ahead of you are canceled.
- Ahead of you: 180 - 80 = 100
- New buy orders totaling 150 contracts join the bid behind you. The DOM total grows, but your position does not change.
- Ahead of you: still 100
- Orders totaling 40 contracts that joined after you are canceled.
- Ahead of you: still 100
At the end of that minute, a regular DOM shows the bid at 5,800.00 as 300 + 2 - 120 - 80 + 150 - 40 = 212 contracts, your own 2 included. It looks as if 210 contracts stand between you and a fill. In fact 100 do. The other 110 (the 150 that joined, less the 40 of them that canceled) are behind you.
Now picture making a decision on that basis. If you believe 210 contracts are ahead of you, you might give up and pay the offer. If you know 100 are ahead and sellers just took 120 in a minute, you might reasonably stay.
The point is not that one choice is right. It is that the second decision is made on what is actually in front of your order.
What Your Place in Line Doesn't Tell You
Queue position is not a fill prediction. Price can move away from your level before the queue ahead of you clears, and you can be at the front of the line at a price that never trades again. A good place in the queue only means that if the market trades enough at your price, you are filled sooner than the orders behind you.
There is also a subtler cost. At the front of the queue, your order fills whenever a seller arrives at your price, including just before price moves through your level. Traders sometimes describe the fills they get easily as the ones they would have preferred to miss. Order-level data helps you know where you stand. It does not remove that trade-off.
Depth Beyond Ten Levels
A price-level feed with 10 levels shows 10 bids and 10 offers. In ES, at 0.25 index points per tick, that covers 2.5 points on each side of the market.
Most of the time, the action is within those levels. But traders who rest orders further away, or who want to see where larger interest sits beyond the immediate book, can only see that with full-depth data. CME describes its MBO feed as covering all price levels, where MBP was restricted to the top 10.
Be cautious about how much weight to put on orders far from the market. The further an order rests from the current price, the more likely it is to be moved or canceled before price ever gets there.
Where MBO Data Comes From
Market-by-order data originates at the exchange, but you receive it through whatever data connection your trading software uses. Not every broker or data service passes order-level data through to the trader, and those that do may make it part of a specific data package. If you want an MBO DOM, the first question is whether your data connection carries order-level detail at all.
It is also worth knowing that order-level data is heavier than price-level data: every individual order event is a message. Software that shows it well has to handle many more updates per second without the ladder freezing at the moments that matter most, such as the open or a scheduled economic release.
Practical Rules for Using an MBO DOM
- Read size and order count together. A level of 400 contracts across 160 orders is different from 400 across 3. Decide which you are looking at before you treat a level as support or resistance.
- Watch your contracts ahead, not the total. Once your order is working, the total at your price includes orders behind you. Your fill depends only on what is in front.
- Don't touch a working order without a reason. Raising its size or moving its price, even briefly, puts it at the back of the queue under FIFO.
- Treat large orders as information, not intent. They can be withdrawn at any moment. A large order that fills tells you more than one that only rests.
- Notice how the queue ahead of you is shrinking. Fills ahead of you mean sellers (or buyers) are arriving at your price. Cancellations ahead of you mean resting interest is leaving. Both move you up the line, but they say different things about the level.
- Weigh far-from-market orders lightly. Deep book orders are the easiest to move.
- Check your data connection. An MBO DOM only works if your feed carries order-level data.
The Bottom Line
A regular DOM tells you how much is resting at each price. A market-by-order DOM tells you what that size is made of, which orders are large, and, most usefully, how many contracts are actually ahead of your own order.
In FIFO markets like the E-minis, where every fill goes to the oldest order first, that last number is the one that matters for a working limit order. Without order-level data it has to be estimated. With it, you can see it.
NexTick360's market-by-order DOM shows how many orders make up each price's size, marks the large ones and tells you your place in line and the contracts ahead of your working order, with click-to-trade entries that send your ATM's stop and target. See the DOM
Keep your broker. NexTick360 is a futures platform that stays fast at the open, with your limits, a coach and your journal built in.
Get early access →Founders get 25% off the yearly price for as long as they stay. No card, no spam.