Market Orders With Protection on CME Globex
A market order with protection on CME Globex sweeps only inside a protection band, then rests the remainder as a limit. Here is the mechanism, with data.
A market order with protection is the CME Globex version of a plain market order: it fills against resting orders only inside a fixed band of protection points around the best price on the opposite side, and any quantity left over rests in the book as a limit order at the edge of that band. The exchange documents the same mechanism under a second name, market limit, and some platforms print that label on the ticket. In a thin book the outcome is a partial fill at a price you can work out before the order leaves, in place of a sweep that walks the book to whatever price happens to be resting up there.
How a market order with protection works, step by step
A plain market order says fill me now at whatever price is available, and in a deep book that is usually uneventful. Our market order versus limit order guide walks through the trade you make when you pick between the two. Globex does not accept that instruction bare. When a buy order arrives, the matching engine reads the best offer, adds the product's protection points, and uses the result as a limit price for that order alone. The order fills everything available up to and including that price, in the normal price time priority sequence. Anything unfilled stops there and rests as a limit order at the band edge, visible to the rest of the market, where it can be cancelled or filled later if the market trades back.
Four things follow for the trader watching the ticket.
- The worst possible fill price is known before the order is sent. It sits one band width from the touch.
- A partial fill is a normal outcome rather than a malfunction. The remaining quantity is working as a limit order.
- That remainder holds a place in the queue at the band edge, so a market that trades back fills it in turn.
- The order never trades through the band, even when the book is empty beyond it.
A sell order mirrors the same steps: the engine takes the best bid, subtracts the band, and rests any remainder at the lower edge.
Where the protection band comes from
Protection points are a per product parameter, published by the exchange in each contract's specification next to tick size and contract unit. They are expressed as a count of minimum price increments, so the dollar width of the band falls out of the product's tick value. Read the figure from the specification of the contract you are trading rather than memorising one number: the parameter differs by product, and the exchange revises it.
The arithmetic is worth doing once. The E-mini S&P 500 trades in 0.25 index point ticks, and its contract specification values each tick at $12.50 (as of October 2026). Take a band of 12 ticks as an illustration rather than a published figure. A buy order lifting the best offer can then trade at most 12 ticks above it, which is 12 times $12.50, or $150 per contract between the touch and the worst allowed fill. Substitute the real tick value for your contract and the real protection points from its specification, and the same multiplication gives the number that matters to you. Tick size and tick value covers the first half of that sum, and how to read a futures symbol helps you confirm which contract's specification you are reading.
What a market order with protection is not
It is not a stop order. A stop sits dormant until a trigger price trades, then releases an order into the market. Protection applies to an order that is already live, and the two can sit on the same ticket. Stop orders and limit orders separates those roles.
It is not a limit order that you price. You never choose the band. The exchange sets it per product, and your input is the quantity.
It is not a separate button at most equity brokers. The order type lives in the futures exchange matching engine. On a stock ticket, the closest instrument you control yourself is a marketable limit order priced a few cents through the touch, which caps your fill at a level you pick.
Do US stock market orders have protection?
Not at the order level. A US equity market order carries no exchange applied price band at the moment it matches. Two separate mechanisms do similar work afterwards. Limit up limit down bands pause trading in a stock once the national best bid or offer moves outside a percentage band around a rolling reference price, which stops a sweep from continuing; limit up limit down halts covers that band in full. Clearly erroneous execution rules let an exchange break a print after it has happened, inside a filing window. Both land after the trade. The cost of a market order into a thin book is set by the book itself, and what price a market order fills at traces that walk level by level.
The first stop on the walk is the quoted spread. The panel below measures it across six household names during a single ten minute window of one pinned session, as a share of the mid price.
| symbol | spread_bps | one_cent_bps | quote_count |
|---|---|---|---|
| SPY | 0.25 | 0.13 | 72284 |
| NVDA | 1.08 | 0.47 | 65864 |
| AAPL | 1.26 | 0.3 | 28539 |
| KO | 1.29 | 1.13 | 16486 |
| MSFT | 2.02 | 0.2 | 7885 |
| F | 7.3 | 7.29 | 4328 |
The exact SQL behind every number
SELECT
ticker AS symbol,
round(avg((toFloat64(ask_price) - toFloat64(bid_price))
/ ((toFloat64(ask_price) + toFloat64(bid_price)) / 2)) * 10000, 2) AS spread_bps,
round(avg(0.01 / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2)) * 10000, 2) AS one_cent_bps,
count() AS quote_count
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('SPY', 'AAPL', 'MSFT', 'NVDA', 'KO', 'F')
AND sip_timestamp >= toDateTime('2026-09-15 14:00:00', 'UTC')
AND sip_timestamp < toDateTime('2026-09-15 14:10:00', 'UTC')
AND bid_price > 0
AND ask_price > bid_price
AND (toFloat64(ask_price) - toFloat64(bid_price)) / toFloat64(bid_price) < 0.05
GROUP BY ticker
ORDER BY spread_bpsAcross 6 names, the tightest quote belonged to SPY at 0.25 basis points of mid price, and the widest to F at 7.3. A basis point is one hundredth of one percent. On that last name a single penny already spans 7.29 basis points of the price, while on the tightest name the same penny is a far smaller fraction. This is the equity version of the point protection points make on futures: a band is counted in ticks, and a tick is a different fraction of price on every product.
The same names at the open and at midday
Spreads are not constant through the day. The next panel takes the first five minutes of that session and a five minute block at noon, same date, same six names.
| symbol | open_spread_bps | midday_spread_bps | open_minus_midday_bps |
|---|---|---|---|
| F | 8.34 | 7.37 | 0.97 |
| MSFT | 6.71 | 1.8 | 4.91 |
| KO | 4 | 1.29 | 2.71 |
| AAPL | 3.15 | 0.88 | 2.27 |
| NVDA | 2.22 | 0.67 | 1.55 |
| SPY | 0.45 | 0.25 | 0.2 |
The exact SQL behind every number
SELECT
symbol,
round(avgIf(spread_bps, phase = 'open'), 2) AS open_spread_bps,
round(avgIf(spread_bps, phase = 'midday'), 2) AS midday_spread_bps,
round(avgIf(spread_bps, phase = 'open') - avgIf(spread_bps, phase = 'midday'), 2) AS open_minus_midday_bps
FROM
(
SELECT
ticker AS symbol,
if(sip_timestamp < toDateTime('2026-09-15 13:40:00', 'UTC'), 'open', 'midday') AS phase,
(toFloat64(ask_price) - toFloat64(bid_price))
/ ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000 AS spread_bps
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('SPY', 'AAPL', 'MSFT', 'NVDA', 'KO', 'F')
AND (
(sip_timestamp >= toDateTime('2026-09-15 13:30:00', 'UTC')
AND sip_timestamp < toDateTime('2026-09-15 13:35:00', 'UTC'))
OR (sip_timestamp >= toDateTime('2026-09-15 16:00:00', 'UTC')
AND sip_timestamp < toDateTime('2026-09-15 16:05:00', 'UTC'))
)
AND bid_price > 0
AND ask_price > bid_price
AND (toFloat64(ask_price) - toFloat64(bid_price)) / toFloat64(bid_price) < 0.05
)
GROUP BY symbol
HAVING countIf(phase = 'open') > 0 AND countIf(phase = 'midday') > 0
ORDER BY open_spread_bps DESCF quoted the widest opening spread of the group at 8.34 basis points, against 7.37 basis points in the noon block, a gap of 0.97 basis points. An order that crosses the spread pays that difference on the way in. The same clock pattern is what a fixed protection band meets on a futures book at the reopen.
How far does price travel in one minute?
A band is sized against movement, so the useful question is how far a liquid market usually travels while an order is working. The panel below measures the median high to low range of every regular session minute during September 2026, in basis points, grouped into ten minute clock buckets.
| et_time | spy_range_bps | ko_range_bps |
|---|---|---|
| 09:30 | 5 | 15.9 |
| 09:40 | 4.34 | 9.61 |
| 09:50 | 3.65 | 7.87 |
| 10:00 | 3.74 | 7.92 |
| 10:10 | 3.91 | 7.35 |
| 10:20 | 3.39 | 5.69 |
| 10:30 | 3.5 | 5.65 |
| 10:40 | 3.29 | 5.63 |
| 10:50 | 3.26 | 5.67 |
| 11:00 | 3.26 | 5.14 |
| 11:10 | 3.07 | 4.56 |
| 11:20 | 2.87 | 4.51 |
| 11:30 | 2.75 | 4.53 |
| 11:40 | 2.62 | 3.97 |
| 11:50 | 2.43 | 3.96 |
| 12:00 | 2.46 | 3.98 |
| 12:10 | 2.16 | 3.41 |
| 12:20 | 2.21 | 3.45 |
| 12:30 | 2.48 | 2.88 |
| 12:40 | 2.3 | 2.88 |
The exact SQL behind every number
SELECT
formatDateTime(toStartOfInterval(toTimeZone(window_start, 'America/New_York'), INTERVAL 10 MINUTE), '%H:%i') AS et_time,
round(quantileDeterministicIf(0.5)(
(toFloat64(high) - toFloat64(low)) / toFloat64(close) * 10000,
toUInt32(toUnixTimestamp(window_start)),
ticker = 'SPY'), 2) AS spy_range_bps,
round(quantileDeterministicIf(0.5)(
(toFloat64(high) - toFloat64(low)) / toFloat64(close) * 10000,
toUInt32(toUnixTimestamp(window_start)),
ticker = 'KO'), 2) AS ko_range_bps
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'KO')
AND window_start >= toDateTime('2026-09-01 04:00:00', 'UTC')
AND window_start < toDateTime('2026-10-01 04:00:00', 'UTC')
AND close > 0
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) >= 570
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) < 960
GROUP BY et_time
HAVING countIf(ticker = 'SPY') > 0 AND countIf(ticker = 'KO') > 0
ORDER BY et_timeThe 09:30 bucket holds the opening minutes, with a median one minute range of 5 basis points for SPY and 15.9 for KO. The curve drops through the middle hours and lifts again into the close, where the final bucket in view prints 3.62 basis points for SPY. A band wide enough for the quiet hours is a different band from one wide enough for the first ten minutes. The exchange sets a single parameter per product and the trader leaves it alone, which is the trade the design makes.
Ranges describe the extremes. The distribution describes how often they turn up. This last panel sorts every regular session minute SPY traded in September 2026 by the size of its move from the minute's open to its close.
| move_bucket | minute_count | share_of_minutes_pct |
|---|---|---|
| under 2 bps | 5948 | 72.63 |
| 2 to 5 bps | 1915 | 23.38 |
| 5 to 10 bps | 292 | 3.57 |
| 10 to 20 bps | 34 | 0.42 |
| 20 to 50 bps | 1 | 0.01 |
The exact SQL behind every number
WITH minute_moves AS
(
SELECT abs(toFloat64(close) - toFloat64(open)) / toFloat64(open) * 10000 AS move_bps
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= toDateTime('2026-09-01 04:00:00', 'UTC')
AND window_start < toDateTime('2026-10-01 04:00:00', 'UTC')
AND open > 0
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) >= 570
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) < 960
)
SELECT
multiIf(move_bps < 2, 'under 2 bps',
move_bps < 5, '2 to 5 bps',
move_bps < 10, '5 to 10 bps',
move_bps < 20, '10 to 20 bps',
move_bps < 50, '20 to 50 bps',
'50 bps or more') AS move_bucket,
count() AS minute_count,
round(100 * count() / (SELECT count() FROM minute_moves), 2) AS share_of_minutes_pct
FROM minute_moves
GROUP BY
move_bucket,
multiIf(move_bps < 2, 1, move_bps < 5, 2, move_bps < 10, 3, move_bps < 20, 4, move_bps < 50, 5, 6) AS bucket_order
ORDER BY bucket_order72.63% of those minutes landed in the smallest bucket, under 2 bps, which is 5948 minutes in all. The largest bucket in view, 20 to 50 bps, held 0.01% of them. A band set a few ticks wide clears most of a distribution with this shape and binds only in the tail, which is the behaviour the order type is built around: silent in ordinary conditions, decisive in a gap.
FAQ
What is a market order with protection?
It is a market order that CME Globex caps with a price band. The matching engine takes the best price on the opposite side, adds or subtracts the product's protection points, and fills only within that limit. Any quantity left over rests as a limit order at the edge of the band.
What is a market limit order on CME Globex?
It is the same order type under a second exchange name. Platforms use either label, so a ticket marked market limit and one marked market with protection describe one behaviour: sweep inside the band, rest the remainder at the edge.
What happens to the part of the order that does not fill?
It becomes an ordinary resting limit order at the edge of the protection band, visible in the book with its own queue position. You can cancel or modify it, and it fills if the market trades back to that price.
How many protection points does a contract have?
That is a per product figure published in the contract specification and expressed in minimum price increments. Check the specification for the contract and venue you are trading rather than assuming a value, since products differ and the exchange updates the parameter.
Do US stock market orders work the same way?
No. A US equity market order has no exchange applied price band at the moment it matches. Limit up limit down bands and clearly erroneous trade rules act afterwards, at the level of the stock rather than at the level of your order.
Data notes and window definitions
- Every panel pins a fixed historical window, so the numbers above do not move with the market. The two quote panels read 2026-09-15: a ten minute slice from 10:00 ET, plus a five minute block at the open and a five minute block at noon.
- Spreads use two sided quotes only. Crossed quotes and quotes wider than 5% of the bid are dropped before averaging.
- The range and distribution panels cover regular session minutes in September 2026 and use a deterministic median, so a rerun of the same window returns the same figure.
- Basis point conversions divide by the quote mid price or by the minute's open, which keeps names at different price levels comparable.
Every panel here carries the exact SQL that produced it, expandable under the table. To run the same measurement on a ticker and a window of your own, ask the question in plain English on the Strasmore terminal.