· EXECUTION

Why market orders fill at several prices

A market order fills against resting orders one at a time, in price and time order. A 15 lot ES buy on the Liquivue DOM shows five fills at three prices.

SHORT ANSWER

A market order fills at several prices because it trades against resting limit orders one at a time. The exchange matches it with the best price first and, at each price, the oldest order first. When the size at the best price runs out, the rest trades at the next price. On the Liquivue DOM, one ES buy of 15 contracts gets five fills at three prices.

Why market orders fill at several prices comes down to how the exchange matches orders. A market order is an instruction to buy or sell now at the best available price. It does not trade against the book as a whole. It trades against individual resting limit orders, one at a time, until it is complete. This note follows one invented ES buy sent from the DOM in Liquivue and counts each fill. The note on how to measure slippage with one fill sequence turns fills like these into ticks and dollars.

How the exchange matches a market order

CME matches outright ES orders by price and then by time. The best price comes first. Within one price, the oldest resting order comes first. This rule is called FIFO, for first in, first out.

A DOM shows one total per price. Behind each total sits a queue of separate orders. When a market buy arrives, the exchange fills it against the first order in the queue at the best offer, then the second, and so on. When that price is empty, matching moves up one tick. Each match is one fill.

The book in this example

All numbers below are invented. The market is the E-mini S&P 500 future, ES, where one tick is 0.25 points. At 02:30 New York time, during the overnight session, the book is thin. The Liquivue DOM shows these offers.

PriceOffers on the DOMResting orders in the queue
5,041.501110, then 1
5,041.2583, then 5
5,041.0064, then 2

The best bid is 5,040.75. A market by price DOM does not show the queue column. This note adds it to show what the exchange matches against.

The fill sequence

You click to buy 15 contracts at market on the Liquivue DOM. The exchange fills the order like this.

  1. 4 contracts at 5,041.00, against the oldest offer at that price.
  2. 2 contracts at 5,041.00. The price level is now empty.
  3. 3 contracts at 5,041.25.
  4. 5 contracts at 5,041.25. That level is empty too.
  5. 1 contract at 5,041.50, from the queue's first order of 10.

The order is complete after five fills at three prices. The 10 lot at 5,041.50 has 9 contracts left and keeps its place at the front of that queue.

The average fill price is the total cost divided by 15. Six contracts at 5,041.00, eight at 5,041.25 and one at 5,041.50 give an average of about 5,041.17. That is two thirds of a tick above the best offer you saw when you clicked.

In Liquivue, the position panel shows a long of 15 with the fills. Trade bubbles print at 5,041.00, 5,041.25 and 5,041.50 on the heatmap, and the offer bands at the two lower prices go dark. CVD rises by 15, because you were the aggressor on every fill.

When the book changes before your order arrives

Your screen shows the book as it was a few milliseconds ago. Suppose another buyer takes all 6 contracts at 5,041.00 just before your order reaches the exchange, and a seller cancels the 3 lot at 5,041.25.

Your 15 lot now meets 5 contracts at 5,041.25 and 11 at 5,041.50. It fills 5 at 5,041.25 and 10 at 5,041.50, in two fills. The average is about 5,041.42, a full tick worse than the first case. Nothing in your order changed. The book changed.

How the fills appear on the tape

The exchange reports each match. Platforms differ in how they print them. An unaggregated tape prints five trades of 4, 2, 3, 5 and 1. An aggregated tape can join them into one print of 15, or into one print per price. The note on why your tape and another platform's tape do not match covers this setting.

What a limit order changes

Send a buy limit for 15 at 5,041.25 against the first book instead. The exchange matches the same first four fills, 14 contracts. The last contract does not trade at 5,041.50. It rests in the book at 5,041.25 and waits. The limit caps the price, and the cost is that part of the order may not fill.

Fill details on other platforms

NinjaTrader has SuperDOM and a time and sales window built in. Jigsaw daytradr builds its ladder around Depth & Sales and a reconstructed tape. Quantower has historical time and sales. Liquivue keeps order entry, the heatmap and the position panel in one browser workspace, at €20 a month after a 7-day trial. Your provider bills data separately. The glossary defines FIFO, aggressor and fill.

A check you can run

Send a 2 lot market order in simulation during a quiet hour and a busy hour. Write down the DOM size at the best price before each click. Compare it with the number of fills and prices in your fill report.

Questions

Why did my market order get several fills?

Your order was larger than the first resting order it met, so the exchange matched it against several resting orders in turn. Each match is a separate fill, and the fills can sit at one price or at several.

What order does CME use to match a market order?

For outright futures such as ES, the exchange matches the best price first and, within one price, the oldest resting order first. Traders call this price and time priority, or FIFO.

Can the book change after I click buy?

Yes. Other traders can trade or cancel at the best price in the milliseconds between your click and the exchange receiving the order. Your order then fills against the book as it stands on arrival, not as it looked on your screen.

Can you see each fill in Liquivue?

Yes. Liquivue position tracking shows size, entry, P&L and fills, and you can send market, limit and bracket orders from the chart or the DOM. This site has not verified a standalone time and sales window in Liquivue.

Educational content about market data and charting software. It is not trading or investment advice. Trading involves risk.

MORE NOTES