Strasmore Research
Deep Dives · Matt ConnorBy Matt Connor ·

Price-Time Priority vs Pro-Rata Fills

Why two orders at the same price get different fills: price-time priority, pro-rata and parity allocation, worked through one book with real market data.

Price-time priority and pro-rata are the two rules an exchange can use to decide which resting order gets filled when several sit at the same price. Under price-time priority, also called FIFO, the order that arrived first is filled first, down to the last share it asked for. Under pro-rata, every order at that price receives a slice in proportion to its size, and arrival time barely counts. Same book, same trade, very different fills.

Price-time priority vs pro-rata on one order book

Freeze one price level. Five bids rest at 100.00, entered in this sequence: 10 lots, then 200, then 5, then 50, then 35. That is 300 lots at one price. A seller arrives with a market order for 100 lots. Price cannot break the tie. The matching engine's allocation algorithm breaks it, and that algorithm is a venue rule rather than a law of nature.

Here is how the 100 lot sell splits under three models. The book and the fills are a hypothetical worked example.

  • Bid 1, 10 lots, first in queue: 10 lots under FIFO, 4 under pro-rata, 10 under the hybrid.
  • Bid 2, 200 lots, second in queue: 90 under FIFO, 67 under pro-rata, 63 under the hybrid.
  • Bid 3, 5 lots, third in queue: nothing under any of the three.
  • Bid 4, 50 lots, fourth in queue: nothing under FIFO, 17 under pro-rata, 16 under the hybrid.
  • Bid 5, 35 lots, fifth in queue: nothing under FIFO, 12 under pro-rata, 11 under the hybrid.

Bid 1 is a small order that arrived first. FIFO fills it completely, ahead of a 200 lot order that may have missed by a microsecond. Pro-rata hands it 4 lots: a claim of 10 out of the 300 lots resting works out to 3.33 lots on a 100 lot trade, rounds down to 3, and picks up one leftover lot in time order. Bids 4 and 5 are the mirror image, shut out entirely by FIFO and paid by pro-rata.

Bid 3 deserves a pause. Its proportional claim of 1.67 lots rounds down to 1. Pro-rata venues set a minimum allocation, commonly 1 or 2 lots, and an order whose slice falls under it receives nothing. With a 2 lot minimum, bid 3 collects zero from both proportional models. A genuinely small order in a pro-rata queue is close to invisible.

What the hybrid adds: a slice off the top

Pure pro-rata is rare. The third column is a price-time and pro-rata hybrid: one designated order takes a fixed slice before anything is shared. Bid 1 is first in the queue and takes up to 40 percent of the incoming trade, capped at its own 10 lots. The remaining 90 lots split proportionally across the other four, with the same rounding and the same minimum. Venues attach that slice to a TOP order, meaning the order that set the new best price, usually capped at a modest size. Under pure pro-rata, improving the price earns nothing extra, so nobody wants to be the trader who tightens the market. A fixed slice for the price setter restores part of the FIFO incentive.

Under FIFO, queue position is the asset

On a price-time book the question is never whether you are at the right price. It is how many shares sit ahead of you at that price, and how fast the queue in front is clearing. Fills arrive in small pieces.

QueryAverage shares per trade print, June 2026
The exact SQL behind every number
SELECT
    ticker                                    AS symbol,
    round(sum(volume) / sum(transactions), 1) AS avg_shares_per_print
FROM global_markets.stocks_daily_aggs
WHERE ticker IN ('AAPL', 'MSFT', 'NVDA', 'SPY', 'KO', 'JNJ', 'T', 'F')
  AND date >= '2026-06-01'
  AND date <  '2026-07-01'
GROUP BY ticker
HAVING sum(transactions) > 0
ORDER BY avg_shares_per_print DESC
Run this yourself

Across the 8 names, F printed the largest average trade at 336.5 shares and MSFT the smallest at 53.2. At those sizes a resting 500 share limit order is filled by a long series of small counterparties, and every share ahead of it clears first.

Speed pays, since arriving one message earlier puts you ahead of everyone later at that price. Cancel and replace is expensive: on essentially every price-time venue, changing your price or increasing your size forfeits the timestamp and sends you to the back. Reducing size usually keeps priority. Traders treat queue position as inventory for exactly this reason.

QueryQuote updates per second and average quoted spread, ten minutes on 17 June 2026
The exact SQL behind every number
SELECT
    ticker                    AS symbol,
    round(count() / 600.0, 1) AS quote_updates_per_second,
    round(avg(toFloat64(ask_price) - toFloat64(bid_price))
          / avg(toFloat64(bid_price)) * 10000, 2) AS avg_spread_bps
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('AAPL', 'MSFT', 'NVDA', 'SPY', 'KO')
  AND sip_timestamp >= '2026-06-17 14:00:00'
  AND sip_timestamp <  '2026-06-17 14:10:00'
  AND bid_price > 0
  AND ask_price > bid_price
GROUP BY ticker
ORDER BY quote_updates_per_second DESC
Run this yourself

Queue position is perishable, since the price level may not survive. SPY refreshed its quote 296.4 times a second over that ten minute window, against 28.8 for KO. Its average quoted spread measured 0.32 basis points, a basis point being one hundredth of a percentage point. Queue value at a price that lasts two seconds is worth two seconds. This churn is one of the mechanics behind how market makers make money.

Under pro-rata, size is the asset

Flip the rule and the incentive inverts. If your fill is proportional to displayed size, the way to get more is to display more. A futures trader who wants 20 lots, expecting roughly a third of any claim, quotes 60. Everyone at the level runs the same arithmetic, the level inflates, and each participant's ratio falls again. Displayed depth on a pro-rata book overstates what the crowd actually wants. Overquoting is the equilibrium of the rule rather than a trick, and it carries a real cost: a large seller can take the whole level, and every inflated quote fills at once.

QueryAAPL option prints by contract count, 17 June 2026
The exact SQL behind every number
SELECT
    multiIf(size = 1,    '1 contract',
            size <= 5,   '2 to 5 contracts',
            size <= 25,  '6 to 25 contracts',
            size <= 100, '26 to 100 contracts',
                         'over 100 contracts')       AS size_bucket,
    round(100.0 * count() / sum(count()) OVER (), 1)  AS share_pct
FROM global_markets.options_trades
WHERE underlying_symbol = 'AAPL'
  AND sip_timestamp >= '2026-06-17 13:30:00'
  AND sip_timestamp <  '2026-06-17 20:00:00'
GROUP BY size_bucket
ORDER BY share_pct DESC
Run this yourself

Options books are where most retail traders meet allocation rules that are not plain FIFO. Many options exchanges put customer orders ahead of everything else, then apply pro-rata or parity among the rest. Sizes there are small, and minimum allocation rules bite hardest on small orders. 48.5 percent of AAPL option prints that session fell in the 1 contract band, out of 5 bands. Against resting size that can reach thousands of contracts at a strike, a one contract proportional claim rounds to zero. Customer priority and the minimum allocation are what get small orders filled at all, and that is a large part of why options orders don't get filled while your price trades on screen.

Price-broker-time, and where each model is used

A third family sits between the two. Under price-broker-time, usually called parity, the engine splits the trade among the brokers represented at the price, then applies time priority inside each broker's own orders. NYSE has long run a parity model of this kind. A broker holding one order at the price can receive the same share as a broker holding ten, so where your broker routes carries value that neither pure model prices.

In broad strokes: US equities exchanges run price-time, with display priority and in places parity overlays. Most US options exchanges run price-time with customer priority first, and several add pro-rata or parity underneath. Equity index futures generally run FIFO, while many CME interest rate products use pro-rata or a hybrid with a TOP allocation. These algorithms are set per product and revised over time, so the rule for a contract you trade is worth looking up in the current rulebook.

Hidden and iceberg size loses display priority

Every model above allocates displayed size first. A hidden order, or the undisplayed remainder of an iceberg order, sits behind every displayed order at the same price on most venues, however early it arrived. An iceberg showing 100 of 5,000 shares queues its visible 100 by time, then refreshes the next tranche with a new timestamp at the back. Displaying size buys priority, and concealment is paid for in queue position.

Why a marketable order at the NBBO can still miss

The NBBO is the best bid and offer across all US exchanges, and it is a snapshot that can be stale by the time your order lands.

QueryAAPL trade prints by share count, 17 June 2026
The exact SQL behind every number
SELECT
    multiIf(size <  100,  'under 100 shares',
            size =  100,  'exactly 100 shares',
            size <= 500,  '101 to 500 shares',
            size <= 1000, '501 to 1,000 shares',
                          'over 1,000 shares')        AS size_bucket,
    round(100.0 * count() / sum(count()) OVER (), 1)  AS share_pct
FROM global_markets.stocks_trades
WHERE ticker = 'AAPL'
  AND sip_timestamp >= '2026-06-17 13:30:00'
  AND sip_timestamp <  '2026-06-17 20:00:00'
GROUP BY size_bucket
ORDER BY share_pct DESC
Run this yourself

The most common single print for AAPL that session was under 100 shares, at 88.9 percent of prints across 5 size bands. Displayed size at the inside is often a few hundred shares. An order larger than what is displayed takes what is there, then walks to the next price or rests, depending on the order type you sent. A limit priced exactly at the NBBO that arrives after the level is consumed joins the back of the queue and waits.

Data notes

The order book at the top is hypothetical. Its bid sizes, the 100 lot sell, the 2 lot minimum and the 40 percent top slice were chosen to make the allocation differences legible, and no venue's parameters are implied. Every panel is pinned to a fixed window: June 2026 for average print size, and one session on 17 June 2026 for the other three. Sizes are as reported on the consolidated tape.

FAQ

What is price-time priority?

Price-time priority ranks resting orders by price first, then by the time they arrived. Among orders at the same price the earliest timestamp is filled in full before the next one receives anything. US equities exchanges use it as the base rule.

What is pro-rata allocation?

Pro-rata gives every order at the best price a share of an incoming trade in proportion to its size, with arrival time used only for leftover lots. Most pro-rata venues apply a minimum allocation, so an order whose claim falls below it receives nothing.

Why do futures traders quote larger than they want to trade?

On a pro-rata book, allocation follows displayed size, so a trader expecting a fraction of any quote posts a multiple of the size they want. The whole level does the same, and displayed depth ends up above genuine demand.

Does cancelling and replacing an order lose my place in the queue?

On a price-time venue, changing an order's price or increasing its quantity gives it a new timestamp at the back of the queue at that price. Reducing quantity normally preserves the original position. Each venue sets the exact behaviour.


Every panel above carries the SQL that produced it, so you can change the symbol or the window and run it again. The same questions can be asked in plain English on the Strasmore terminal.

#market structure#order book#matching engine#pro-rata#execution#queue priority