NexusFi: Find Your Edge


Home Menu

 



Order Matching and Price Priority: How Futures Exchanges Decide Who Gets Filled

Looking for NinjaTrader pricing, features, reviews, and community ratings? Visit the directory listing.
NinjaTrader Directory →
Looking for DTN IQFeed pricing, features, reviews, and community ratings? Visit the directory listing.
DTN IQFeed Directory →

Overview #

Order Matching and Price Priority: How Futures Exchanges Decide Who Gets Filled

Every limit order you place enters a queue. Your fill — or lack of one — depends entirely on where you land in that queue and the rules the exchange uses to process it. Those rules are the matching algorithm, and they vary by product, by exchange, and sometimes by time of day. Understanding them isn't optional if you're trading size or working passive orders.

The matching algorithm is the single most mechanical force in your execution. It doesn't care about your thesis, your risk management, or your account size (well, actually, in some products it cares a lot about your order size). It follows its rules with zero discretion. Knowing those rules is the difference between understanding why you got filled and wondering why 500 contracts traded at your price while you sat there watching.

Key Concepts #

Before diving into specific algorithms, here are the terms you need:

Aggressor order — the incoming order that initiates a match. A market buy sweeping the offer side, or a limit buy crossing the spread to hit the ask. The aggressor consumes resting liquidity.

Resting order — a limit order sitting in the order book waiting to be matched. Your bid at 4500.00 in ES is a resting order until someone sells into it.

Price level — all resting orders at the same price. When 300 contracts are bid at 4500.00 in ES, that's one price level with 300 contracts of depth.

Queue position — your place in line among all resting orders at a given price level. In FIFO markets, this is everything. In pro-rata markets, it barely matters.

Top of book — the best bid and best offer. The first price level that an aggressor order will interact with.

Matching range — the prices an incoming order can fill against. A market order matches against all available price levels until filled. A limit order matches only at or better than its limit price.

Atomic matching — when an aggressor order enters the matching engine, it fills against all eligible resting orders in a single operation. As @josh explains on NexusFi, "when the big market buy which comes in to sweep the book enters the matching phase, its entire quantity will match in a single, atomic transaction. It will not match against all the orders at one price, report that, then another price, report that, etc., giving anyone the opportunity to cancel orders." You can't see an incoming sweep and pull your order before it reaches you. Once you're in the path, you're getting filled.

Limit and Market order mechanics (@josh)

FIFO queue matching diagram
Atomic matching timeline

Price-Time Priority (FIFO): The Default #

FIFO — First In, First Out — is the most common matching algorithm in futures markets. The rule is simple: at any given price level, the order that arrived first gets filled first. If you're number 47 in a queue of 200 contracts at 4500.00 in ES, you need 47 contracts to trade at that price before you get touched. If only 30 trade there before price moves away, you don't get filled. Period.

ES, NQ, YM, CL, GC, SI, the Treasury complex (ZB, ZN, ZF) — all FIFO. Most of the products retail traders touch run pure price-time priority.

How FIFO Works Step by Step #

  1. Incoming sell market order for 10 contracts hits the bid side
  2. The matching engine looks at the best bid price (say, 4500.00)
  3. At that price, it finds the oldest resting buy order — placed at 09:31:02.347
  4. That order gets filled first, up to its full size
  5. If any aggressor quantity remains, the next-oldest order at that price gets filled
  6. This continues until the aggressor order is fully matched or the price level is exhausted
  7. If the price level is exhausted, the engine moves to the next best price (4499.75)

The critical implication: time is your only edge in FIFO markets. A 1-lot placed 30 seconds before a 500-lot at the same price gets filled first. The 500-lot has zero priority advantage despite being 500x larger.

Queue Position in FIFO Markets #

“Orders in the CME derivative markets are always placed at the end of the queue. If there are 200 contracts bid at 2200 in ES, your 1 lot bid will have to wait for 200 contracts to sell into 2200.”

Why was my target not filled? (@jossfx)

But queue position isn't static. Traders who pull their orders create gaps. If someone ahead of you cancels their 50-lot, you just moved up 50 spots without doing anything. This is why watching the DOM isn't just about reading size — it's about reading queue dynamics. A price level that shows 300 contracts but has been cycling (orders placing and canceling) may be much easier to get filled at than a stale 300 that's been sitting since the open.

You lose your spot when you modify. Cancel and replace moves you to the back of the line at the new price. Some traders scatter orders across multiple levels specifically to maintain queue position at each one — they keep a presence at several prices and cancel the ones that don't work, rather than chasing with a single order that constantly resets its position.

The FIFO Queue Position Problem #

Here's the practical reality for retail traders in deep, liquid FIFO markets like ES:

At the inside bid/offer during regular trading hours, ES routinely shows 500-2,000+ contracts. Your 1-lot joins at the back. Getting filled requires either (a) enough selling to chew through everyone ahead of you, or (b) a fast, aggressive move that sweeps through the price level.

In the first case, if enough volume trades at your price to fill you, the trade might already be moving against you — you're getting filled because the other side is winning. In the second case, the aggressive sweep fills everyone including you, but you're likely in a volatile spike where the next tick matters a lot.

This creates the FIFO paradox: the easier it is to get filled passively, the less likely the fill is favorable. Markets where you get instant passive fills are markets moving through your level. Markets where you wait in queue forever are markets where your level is holding.

Pro-Rata Matching: Size Over Time #

Pro-rata matching allocates fills proportionally based on order size rather than arrival time. If you're showing 10% of the resting liquidity at a price level, you get approximately 10% of the incoming order. Time still matters — but only for the top-of-book allocation, not the main distribution.

The formula, as @josh details on NexusFi:

Your allocation = (N / R) × A

Where N = your order size, R = total resting orders at this price, A = remaining aggressor quantity after top-of-book allocation.

Pro-Rata Order Matching on Eurodollar with small positions. (@Edwin Lefevre)

The catch: allocations round down, and there's typically a minimum allocation size (often 2 contracts). So if your calculated allocation is 1.7 contracts, you get zero. This means small orders in pro-rata markets face a systematic disadvantage — you need to show enough size to clear the minimum allocation threshold.

Where Pro-Rata Lives #

The classic pro-rata market was Eurodollar futures (GE) before the SOFR transition. Interest rate products with tight ranges and massive depth tend to use pro-rata or allocation-style matching because pure FIFO would give an insurmountable advantage to the fastest participants, effectively locking out everyone else from the inside market.

CME's "Allocation" algorithm (used for many rate products) works like this:

  1. Top order priority: The first order that established the best price gets filled completely
  2. Pro-rata allocation: Remaining aggressor quantity is distributed proportionally among all other resting orders at that price
  3. FIFO for leftovers: Any quantity that can't be distributed via pro-rata (due to rounding/minimums) gets allocated by time priority

The Pro-Rata Behavioral Distortion #

Pro-rata matching creates a specific, well-documented behavioral incentive: show more size than you need.

“Eurodollar matching engine is basically pro-rata not FIFO. So everybody is incented to show more size than they need so they get bigger fills in the pro-ration!”

Eurodollar Futures (@kazz)

The math is straightforward. If you want 100 contracts filled but the pro-rata allocation would only give you 30 at your current displayed size, you show 300 contracts instead. Now your allocation triples. The problem: so does everyone else's. The result is massively inflated displayed depth that doesn't represent real trading interest. The order book in a pro-rata market is structurally misleading in a way that FIFO order books aren't.

This is why Eurodollar futures showed enormous displayed depth relative to actual trading volume. Participants were gaming the allocation formula, not expressing genuine trading interest. When you see 50,000 contracts on the bid in a pro-rata instrument, the real interest might be 5,000. The rest is allocation gaming.

Josh's math puts this in concrete terms: with a 10-lot resting order against 20,000 total contracts at a price level, you need an aggressor order of at least 4,000 contracts to receive any pro-rata allocation at all (due to the minimum allocation of 2). That's a high bar for a retail-sized position.

Pro-Rata Order Matching on Eurodollar with small positions. (@Edwin Lefevre)

Pro-rata matching allocation formula

Hybrid Algorithms: The Real World Is Messy #

Most matching algorithms at CME Globex aren't pure FIFO or pure pro-rata. They're hybrids that blend both mechanisms. @Fat Tails provides the definitive breakdown on NexusFi, documenting six distinct matching algorithms available on CME Globex:

  • FIFO — Pure price/time priority
  • FIFO with LMM — FIFO with a configurable percentage routed to a Lead Market Maker
  • Pro-Rata — Simple proportional matching, or pro-rata with minimum allocation and FIFO for residuals
  • Allocation — Pro-rata with top-order priority (first order gets filled 100%, then pro-rata for the rest)
  • Eurodollar Option — Pro-rata with Lead Market Maker participation
  • Split FIFO and Pro-Rata — Percentage-based allocation between FIFO and pro-rata mechanisms

Are stop orders placed in queue? (@nourozi)

Split FIFO/Pro-Rata: The Corn Example #

Fat Tails walks through CME's corn futures (ZC) matching rules as a concrete example. ZC uses a split FIFO and pro-rata algorithm with these parameters:

  • Top order allocation: 100% (the first order at the best price gets filled completely)
  • FIFO allocation: 40% of remaining quantity
  • Pro-rata allocation: 60% of remaining quantity

What this means in practice: the trader who establishes the price level first has a massive advantage (100% top priority). After that, 40% of the incoming order goes to the next-oldest orders by time, and 60% gets distributed proportionally by size. This rewards both speed (for top priority and the FIFO portion) and size (for the pro-rata portion).

Every product at CME has specific matching parameters documented in the Globex Product Reference Sheet. The parameters include the matching algorithm type, top order allocation percentage, FIFO/pro-rata split percentages, minimum pro-rata allocation size, and whether a Lead Market Maker program applies.

Lead Market Maker (LMM) Programs #

Some products reserve a guaranteed fill allocation for designated Lead Market Makers. The LMM commits to providing continuous two-sided quotes within specified parameters (maximum spread width, minimum quote size, minimum time in market). In exchange, a configurable percentage of incoming order flow is directed to the LMM before the standard matching algorithm runs.

This exists because some products (especially options on futures and less liquid contracts) need a guaranteed liquidity provider. Without LMM incentives, the bid-ask spread would widen to the point where the product becomes untradeable for most participants.

Hybrid split FIFO/Pro-Rata matching

CME Globex: Product-by-Product Reality #

Here's what retail traders actually encounter:

Product Matching Algorithm Key Implication
ES, NQ, YM Pure FIFO Queue position is everything. Get there early or use market orders.
CL, NG Pure FIFO Same as equity index — time priority dominates.
GC, SI Pure FIFO Precious metals follow standard FIFO.
ZB, ZN, ZF Pure FIFO Treasury futures reward early queue placement.
ZT (2-Year Note) Allocation (size-weighted) Massive displayed depth. Tiny retail orders have minimal priority.
ZC, ZW, ZS Split FIFO/Pro-Rata Hybrid — both time and size matter. Check specific split percentages.
SOFR (SR3) Allocation Replaced Eurodollar. Pro-rata with top-order priority.
Options on Futures Varies (often LMM) Often includes Lead Market Maker allocation.
“The only case I can think of in which you'd actually run into strange order filling strategies is in ZT, the US 2 year future. If I'm not mistaken, orders are filled according to size first there. That's why ZT is unusually thick; it's common to see tens of thousands of contracts populating the order book at any price.”

Why was my target not filled? (@jossfx)

That "unusually thick" order book is the direct result of the matching algorithm. Pro-rata and allocation algorithms create inflated depth because participants show more size to increase their allocation percentage. FIFO algorithms create thinner, more honest order books because queue position can't be gamed by size alone.

CME Globex matching algorithm comparison

Queue Position Management: The Hidden Edge #

For traders working passive orders in FIFO markets, queue position management is a genuine skill. Here are the practical mechanics:

Establish early. If you know 4500.00 is your level, get your order there before the market arrives. Placing a bid at 4500.00 when ES is trading 4505.00 costs nothing (no margin impact until filled) but establishes queue position 5 points away. If the market drops to your level, you're near the front.

Don't modify. Every price change sends you to the back. If you need to adjust by one tick, consider whether the positional advantage at the current price is worth more than the price improvement. Often it is.

Monitor cancel volume. DOM depth that's shrinking at a price level without trades means participants are pulling orders. Your effective position improves without any trading occurring. Conversely, depth growing means participants are stacking behind you — good for your position, potentially bad for the directional thesis (everyone agrees this is a good price to buy, which might mean the market is about to break through it).

Use multiple orders across levels. Rather than chasing with a single order, maintain resting orders at 2-3 levels around your target. Cancel the ones that don't trigger rather than moving a single order (which resets queue position each time). This is how institutional traders manage passive execution, as @iantg describes on NexusFi — pros "run 3 to 10 orders per side at all times constantly monitoring, canceling/price mod and reposing."

Can someone with real futures trading experince tell me if this strategy can works? (@Vitlr)

Queue position dynamics

Implied Matching: Spread Orders and Synthetic Books #

CME Globex supports implied matching — the engine can create synthetic fills by combining resting orders across related instruments. This matters most for calendar spreads, inter-commodity spreads, and options.

Here's how it works: if there's a resting bid for the ESZ6-ESH7 calendar spread at -2.00, and a resting offer for outright ESH7 at 4500.00, the matching engine can create an implied offer for ESZ6 at 4498.00 (4500.00 - 2.00). An incoming buy order for ESZ6 can match against this implied offer, which triggers fills on both the calendar spread and the outright ESH7.

Implied-in: Implied prices are derived from outright orders to create synthetic spread prices. Implied-out: Implied prices are derived from spread orders to create synthetic outright prices.

The practical effect: spread markets are deeper than they appear because the matching engine can construct fills from combinations of outright and spread orders. But implied fills can have slightly different timing characteristics than direct fills, and understanding whether your fill was direct or implied can affect your read of market activity.

Implied matching is one reason why spread orders on CME Globex often get better execution than manually legging. The engine can see combinations that a human trader can't process in real-time.

Self-Match Prevention (SMP) #

CME Globex and other exchanges implement Self-Match Prevention to stop a firm's own buy and sell orders from matching against each other. Without SMP, a market maker with resting bids and offers could accidentally fill against itself when market conditions move rapidly — creating phantom volume, unnecessary commissions, and potential regulatory issues.

SMP rules allow firms to tag their orders with an SMP ID. When two orders with the same SMP ID are about to match, the exchange cancels one (typically the resting order or the aggressor, depending on the firm's configuration) instead of executing the trade.

For retail traders, SMP isn't directly relevant to your execution. But it matters for understanding market behavior: when you see large orders appear and disappear rapidly at the inside market, some of those movements are SMP-related activity from market makers adjusting their quotes.

Latency and the Matching Engine #

The CME Globex matching engine processes orders in the low-microsecond range. For most retail traders, this is irrelevant — your broker's gateway, your internet connection, and your platform's order routing add milliseconds of latency that dwarf the matching engine's processing time.

But latency matters indirectly because it shapes the competitive environment.

“The people making money in this space have FPGAs running machine code or C++, plugged directly into the exchange's matching engines.”

Can someone with real futures trading experince tell me if this strategy can works? (@Vitlr)

In FIFO markets, microsecond advantages translate directly to queue position advantages. A colocation firm that can update its orders 100 microseconds faster than the next participant effectively has a permanent queue position advantage in fast-moving markets. This is why HFT firms pay millions for colocation space and custom hardware — in FIFO markets, speed literally equals money.

In pro-rata markets, the latency advantage is different. Speed matters less for queue position (since allocation is size-based) but more for quoting — being fast enough to adjust quotes before adverse information is fully reflected in the order book.

This creates a natural product segmentation: FIFO products attract speed-focused HFT, while pro-rata products attract size-focused market makers. The matching algorithm shapes not just who gets filled, but who shows up to trade in the first place.

What This Means for Retail Traders #

Here's the practical distillation:

In FIFO markets (ES, NQ, CL, ZB, etc.):

  • Your 1-lot has equal priority to a 500-lot if you arrived first
  • But you need to survive the queue, which means your level needs to hold
  • Getting filled on a passive limit order often means the other side is winning at that moment
  • Queue position is a genuine edge — establish early, modify rarely
  • Market orders always fill immediately but pay the spread

In pro-rata/allocation markets (ZT, SOFR, grain spreads):

  • Displayed depth is unreliable — participants inflate size for allocation gaming
  • Small orders face systematic disadvantage due to minimum allocation thresholds
  • Time priority exists (top-of-book) but is less dominant than in FIFO
  • Market orders are more necessary because passive fills are harder to obtain with small size

In hybrid markets (ZC, ZW, ZS):

  • Check the specific split percentages for your product
  • Both time and size matter, in the proportions defined by the algorithm
  • Top-of-book priority is usually very strong (100% in many cases), so being first still matters a lot

For all markets:

  • Know your product's matching algorithm before you trade it
  • Don't assume the DOM depth represents real interest (especially in pro-rata markets)
  • Understand that matching is atomic — you can't cancel after an incoming order enters the matching phase
  • Simulated trading engines rarely model matching algorithms accurately, which is why sim fills are unreliable for passive order strategies

The matching algorithm is the referee of every trade. It doesn't favor you or punish you — it follows its rules exactly. The edge comes from understanding those rules better than the next participant and positioning so.

FIFO vs Pro-Rata behavioral impact

Citations

  1. @Fat TailsAre stop orders placed in queue? (2014) 👍 10
    “This depends on the rules that were set up for the matching engine. The most common principles used for matching orders are - price / time priority - pro rata matching Price / time priority (FIFO) applied to stop buy order: The stop order with the lo...”
  2. @joshLimit and Market order mechanics (2024) 👍 4
    “Basically, yes. Imagine you had an order to sell a few ticks above the current market. You are free to cancel that order at any time you want.”
  3. @joshPro-Rata Order Matching on Eurodollar with small positions. (2020) 👍 6
    “I've never actually traded eurodollars, and I don't think I've seen anyone on this forum who has either, though I'm sure *someone* must have. But, let's do some quick math to see how likely you are to get a PR fill.”
  4. @lax99Why was my target not filled? (2018) 👍 4
    “Orders in the CME derivative markets are always placed at the end of the queue. If there are 200 contracts bid at 2200 in ES, your 1 lot bid will have to wait for 200 contracts to sell into 2200.”
  5. @iantgCan someone with real futures trading experince tell me if this strategy can works? (2019) 👍 6
    “This strategy for sure will not work. Assuming you are using limit orders: You will only ever get filled from the side that is thin and about to break, therefore you will start every trade down 1 tick.”
  6. @SMCJBEurodollar Futures (2019) 👍 3
    “Eurodollar matching engine is basically* pro-rata not FIFO. So everybody is incented to show more size than they need so they get bigger fills in the pro-ration! * It's actually allocation which I believe fills the first order in the book 100% and th...”

Help Improve This Article

NexusFi Elite Members can help keep Academy articles accurate and comprehensive.

Unlock the Full NexusFi Academy

660 in-depth articles across 17 categories — written by traders, backed by community research. Includes knowledge maps, citations with community excerpts, and the ability to help improve articles.

We add approximately 268 new Academy articles every month and update approximately 602 with fresh content to keep them highly relevant.

Strategies (74)
  • Volume Profile Trading
  • Order Flow Analysis
  • plus 72 more
Market Structure (35)
  • Initial Balance: The First Hour That Defines Your Entire Trading Day
  • Opening Range: Why the First 15 Minutes Define Your Entire Trading Session
  • plus 33 more
Exchanges (38)
  • Futures Exchanges: Understanding Where and How Futures Trade
  • plus 36 more
Concepts (35)
  • Futures Order Types: Market, Limit, Stop, and Conditional Orders
  • High Volume Nodes & Low Volume Nodes
  • plus 33 more
Indicators (47)
  • Delta Analysis & Cumulative Volume Delta (CVD)
  • Market Internals: Reading the Broad Market to Trade Index Futures
  • plus 45 more
Instruments (38)
  • Micro E-mini Futures (MES, MNQ, MYM, M2K): The Complete Guide to CME Fractional-Sized Contracts
  • E-mini Nasdaq-100 (NQ) Futures: The Complete Trading Guide
  • plus 36 more
+ 11 More Categories
660 articles total across 17 categories
Risk Management (35) • Data (35) • Automation (34) • Prop Firms (34) • Platforms (44) • Psychology (37) • Brokers (39) • Prediction Markets (34) • Regulation (34) • Cryptocurrency (34) • Infrastructure (33)
Become an Elite Member


© 2026 NexusFi®, s.a., All Rights Reserved.
Av Ricardo J. Alfaro, Century Tower, Panama City, Panama, Ph: +507 833-9432 (Panama and Intl), +1 888-312-3001 (USA and Canada)
All information is for educational use only and is not investment advice. There is a substantial risk of loss in trading commodity futures, stocks, options and foreign exchange products. Past performance is not indicative of future results.
About Us - Contact Us - Site Rules, Acceptable Use, and Terms and Conditions - Downloads - Top