Market microstructure & order books

Price-time priority & queue value

structural
Reviewed 4 June 2026. As of 2026: a permanent feature of the market, not an edge that decays.

Better-priced orders fill first; among orders at the same price, the earliest fills first (FIFO). That is why queue position is an asset: being early means you trade before the orders behind you.

See it move

Queue position & fill probabilitydrag the queueIX-QUEUE
Ahead of you1,200
Your order1 lot
Fills this episode800
You get filled?no
ahead
behind
fill front
Queue ahead of you1,200
Queue behind you800
% of level that trades40%

What to notice. Your order only fills once the trade front reaches it, so the size ahead of you is the whole game. Lower it (arrive earlier, or pick a thinner level) and the same flow now fills you. That is why queue position is an asset.

What is price-time priority, precisely?

Price-time priority is the rule most order books use to decide which resting order an incoming aggressive order fills against. It ranks orders by two keys, in strict order: first price (better-priced orders match first, meaning higher bids and lower asks) and then, among orders sharing a price, time, where the one that arrived earliest matches first. An incoming marketable order is filled against the front of that ranking and works its way back. It is the fairest simple rule there is: it rewards both improving the price and committing early.

The intuition is a supermarket queue with one twist. You can leap to the very front by offering a better price (improving the quote by a tick) but if you join at a price that already has orders resting, you go to the back of that price's queue and wait your turn. The matching engine stamps each resting order with an immutable arrival time; the moment you cancel and re-post, that stamp is reset and you drop to the back. This is why posting a new best price is so powerful and so contested: a one-tick improvement plants you at the front of a brand-new, empty queue. It is also the mechanical basis of quote-matching, or stepping ahead.

Bid-side ranking: a better price always wins; at an equal price, the earlier arrival wins. Asks mirror it with lower prices first. Move the slider in the explorer above to see your rank change.
AB    pA>pB    or    (pA=pB  and  tA<tB)A \succ B \iff p_A \gt p_B \;\; \text{or} \;\; \left(p_A = p_B \;\text{and}\; t_A \lt t_B\right)

Why is queue position worth money?

A passive order earns the spread only if it is filled before the price moves away. The further forward you sit, the more of the level's incoming flow reaches you before the queue empties or the quote shifts. Front-of-queue means a high fill probability on terms you like: you capture the spread. Back-of-queue means you tend to fill exactly when you would rather not: when there is persistent, one-sided pressure that is about to push the price through your level. Queue position is the financial asset that turns "I posted a limit order" into "I actually earn the spread".

The dangerous asymmetry is that back-of-queue fills correlate with adverse moves. You get reached at the back precisely when sellers keep hitting the bid, i.e. when the price is about to keep falling against your resting buy. That is adverse selection expressed through the queue: good queue position raises the share of benign fills relative to toxic ones, while a poor position loads you up on the toxic kind. The catch is the trade-off: to sit at the front you must either commit early (and carry the risk of resting through news) or improve the price and earn a thinner spread. Queue value is simply the quantification of "is it worth waiting where I am, or re-pricing to jump forward?"

A passive order's edge is the spread it captures times the chance it fills benignly, both of which rise as you move forward in the queue.
E[edge]P(fill before adverse move)×S2    P(toxic fill)×Δv\mathbb{E}[\text{edge}] \approx P(\text{fill before adverse move}) \times \tfrac{S}{2} \; - \; P(\text{toxic fill}) \times \Delta v

How does fill probability depend on position and cancellations?

Fill probability falls as your queue position grows (there is more size ahead of you that must trade or cancel before you are reached) and it rises with the level's trade-arrival rate. The mechanism is simple to state: you fill when the cumulative (trades + cancellations) ahead of you reaches your position before the price moves. Two competing processes empty the queue ahead of you, and both advance you: executions, where someone trades against the level, and cancellations, where someone ahead of you pulls their order. Crucially, cancellations ahead of you advance your position for free, with no trade required.

That free advancement is the counter-intuitive heart of it. In modern lit books, most resting volume is cancelled rather than executed, often within milliseconds. So your effective fill probability is dominated by cancellation dynamics, not trade flow, which is exactly why the naive reasoning "I'm 60% of the way through the queue, so I have roughly 60% fill odds" is wrong. Some of the size ahead of you will evaporate without ever trading, pulling you forward; some of your own fills will arrive as toxic flow you would rather have missed. Modelling the queue therefore means modelling cancellations as carefully as you model trades.

You fill when executions plus cancellations ahead of you reach your position before an adverse price move arrives. Both terms move you up; cancellations cost nothing.
fill    (execahead(τ)+cancelahead(τ))Qahead    before    τmove\text{fill} \iff \big(\,\text{exec}_{\text{ahead}}(\tau) + \text{cancel}_{\text{ahead}}(\tau)\,\big) \geq Q_{\text{ahead}} \;\; \text{before} \;\; \tau_{\text{move}}
Show the queue-reactive sketch optional

Model the volume ahead of you, QaheadQ_{\text{ahead}}, as a birth–death process. Departures (which advance you) arrive as executions at rate λexec\lambda_{\text{exec}} and cancellations at rate λcancel\lambda_{\text{cancel}}; arrivals behind you do not affect your rank. Your fill is the event that QaheadQ_{\text{ahead}} hits zero before an adverse-move stopping time τmove\tau_{\text{move}}.

dQaheaddt=(λexec+λcancel)\frac{dQ_{\text{ahead}}}{dt} = -(\lambda_{\text{exec}} + \lambda_{\text{cancel}})

Under constant, independent rates the expected time to clear the queue ahead is the position divided by the total departure rate. Because λcancel\lambda_{\text{cancel}} usually dominates λexec\lambda_{\text{exec}} on fast lit books, cancellations do most of the advancing: the formal version of "most volume is cancelled, not traded".

E[τclear]=Qaheadλexec+λcancel\mathbb{E}[\tau_{\text{clear}}] = \frac{Q_{\text{ahead}}}{\lambda_{\text{exec}} + \lambda_{\text{cancel}}}

The queue-reactive model (Huang, Lehalle & Rosenbaum 2015) makes these rates state-dependent (they vary with the queue size and the book's shape) which is the honest correction to the constant-rate sketch. The principle is robust; the fitted rates are venue-specific.

Named model, dated. The standard frame is the queue-reactive model of Huang, Lehalle & Rosenbaum (2015), which treats the queue as a stochastic process with rates that react to the book's state and computes the probability the ahead-queue empties before an adverse price move. It assumes (roughly) independence and stable rate functions; real rates are state-dependent and regime-shifting, so the curve must be re-fitted per venue and dated, not copied.

FIFO vs pro-rata matching: what's the difference?

FIFO (plain price-time) fills the single earliest order at a price completely before touching the next, so time priority decides everything. Pro-rata instead fills all resting orders at the best price simultaneously, in proportion to their displayed size, so size matters and time barely does. The two regimes demand opposite tactics from the same passive strategy: on FIFO you optimise your queue position; on pro-rata you optimise your displayed size. Get the venue's algorithm wrong and your fill model is fiction.

Under FIFO / price-time the race is to be first in the queue, which fuels the latency arms race and every queue-position strategy in this atlas. It dominates lit cash equities, listed equity options' price-time books, and most crypto. Under pro-rata, an incoming order is split across all resting orders at the best price proportionally to their size, so the incentive flips: you post large to win a bigger share of each fill, not early. Several CME interest-rate futures and some options classes use pro-rata, often as hybrids that bolt a small time-priority or top-of-book allocation onto the pro-rata split, so you must read the specific contract's matching-algorithm spec rather than assume. Over-sizing to win allocation is itself a studied behaviour that pure pro-rata invites.

FIFO gives the whole incoming order to the front of the time queue; pro-rata splits it across the level in proportion to displayed size. Opposite incentives: be early, versus be big.
fillipro-rata=M×QijQj,filliFIFO=min ⁣(Qi,MkiQk)\text{fill}^{\text{pro-rata}}_i = M \times \frac{Q_i}{\sum_j Q_j}, \qquad \text{fill}^{\text{FIFO}}_i = \min\!\big(Q_i,\, M - \textstyle\sum_{k \prec i} Q_k\big)

Worked example

Take one price level on a FIFO book, as of 2026. Reproduce it in the explorer above. Resting bids sit at 50.00 in arrival order: A = 100 lots, B = 200 lots, C = 50 lots, and you are C, behind 300 lots. Everything here is synthetic. Your queue position is 300 (the size ahead of you) so you fill only after 300 lots' worth of executions or cancellations clear ahead of you, and only if the bid is still resting at 50.00 when they do.

Trades only. Suppose sellers hit the 50.00 bid for 250 lots in total. Order A fills fully (100) and B fills 150 of its 200, and the 250 lots are exhausted before reaching you. You (C) get nothing: you needed more than 300 lots of clearing. This is the back-of-queue problem in one line.

Cancellations help. Now suppose B cancels its 200 lots instead, the common case, since most volume cancels rather than trades. Your position jumps from 300 to 100 with no execution at all. Just 100 lots of selling now fills A, and the very next lot reaches you. The cancellation ahead advanced you 200 lots for free, exactly the dynamic the slider for cancellation rate isolates in the explorer.

On FIFO, 250 lots of pure selling strand you at the back; but a single 200-lot cancellation ahead pulls you to within 100 lots of a fill, for free.
Qahead:300  B cancels 200  100Q_{\text{ahead}}: 300 \xrightarrow{\;\text{B cancels 200}\;} 100

Pro-rata contrast. Put the same book on a pro-rata venue and a 250-lot market sell against the 350 lots resting fills A, B and C proportionally: A gets 250×100/35071250 \times 100/350 \approx 71, B gets 143\approx 143, and you (C) get 36\approx 36, so you fill something immediately despite arriving last. Size, not time, set your share. That single switch of matching rule flips you from "filled nothing" to "filled 36 lots" on identical orders, which is why knowing your venue's algorithm is not optional. The numbers here are synthetic and rounded; real cancellation rates, fill probabilities and matching algorithms are venue- and instrument-specific and must be verified against the venue's matching-algorithm spec and dated.

Where this fits

Common questions

What is price-time priority?
Price-time priority is how most order-driven venues rank resting orders: better-priced orders fill first, and among orders at the same price, the one that arrived earliest fills first (FIFO). It is why queue position has economic value: being early in the queue at a price means you trade before later orders. Some venues use pro-rata or size-time hybrids instead.