Appearance
Personalize your experience
Queue & Fill Probability
Order Book ViewIf you rest a limit order at this level now, how long until it fills, and how likely is it to fill at all? Learned from the live stream and checked against real outcomes.
What it answers
A joins the back of its price level's queue. It only when everything in front of it has traded or been cancelled, or when price straight through the level. This view estimates that for every visible level at five horizons, and shows how far your own orders have moved up their queues. Open it with View → Queue & fill probability.
Anatomy
How the queue is modelled
A public L2 feed has no order IDs, so queue position cannot be read directly. It is modelled from what the feed does show: each level's size on every update, and the trade tape.
- 1Attribute printsA buy aggressor against the ask queue, a sell aggressor against the bid queue. are folded onto the book's price buckets with the book's own rounding.
- 2Split size changesBetween updates a level changes by adds − cancels − . The tape gives the trades, so any beyond them was cancelled. That gives a hazard per distance rank: the share of the queue leaving per second.
- 3Learn ratesPer side: the passive trade rate λ and its burstiness (Σ size² per second). For the mid: its , sampled every 250ms over 10 minutes. Rates use a 30-second half-life, so they adapt within a minute.
- 4Move virtual ordersconsume the queue from the front. Cancels are spread through the queue, so only the share in front of an order moves it forward. Size later joins behind it.
- 5EstimateCombine queue depletion with the chance price reaches or through the level (below).
- 6Self-checkScore every probe at 15 seconds against what actually happened.
The fill model
With A₀ in front of you, a passive trade rate λ and a hazard c, the queue ahead decays as dA/dt = −λ − c·A, so the expected volume gone from the front by τ is M(τ) = (A₀ + λ/c)(1 − e^(−cτ)). arrive in bursts, and each 's effect is itself eroded by later cancels, giving variance V(τ) = s²(1 − e^(−2cτ))/2c. The chance the queue in front of you is gone by τ is Φ(−A(τ)/√V).
const remaining = ahead - (ahead + lambda / c) * (1 - Math.exp(-c * tau));
const variance = s2 * (1 - Math.exp(-2 * c * tau)) / (2 * c);
const floor = 0.3 * ahead * Math.exp(-c * tau); // model uncertainty
const pQueue = normCdf(-remaining / Math.sqrt(variance + floor * floor));
// Touch: the queue clears, or price trades through the level.
pFill = 1 - (1 - pQueue) * (1 - reach(halfSpread + step / 2, tau));
// A level d from the touch: price must come to it, then a queue thinned by
// cancels must clear in the remaining time — or price trades through it.
pFill = 1 - (1 - reach(d, tau) * pQueue(ahead * Math.exp(-c * tau / 2), tau / 2))
* (1 - reach(d + halfSpread + step / 2, tau));Reach is the chance the mid moves a given distance toward the order within τ. It comes from the market's own over the last 10 minutes: for every start and horizon the largest move up and down is recorded, so trending and mean-reverting markets give asymmetric, realistic odds. Excursions missed between samples are corrected for (Broadie–Glasserman). Until there is enough history, the Brownian reflection principle 2(1 − Φ(d/σ√τ)) stands in.
Anatomy
How the queue is modelled
A public L2 feed has no order IDs, so queue position cannot be read directly. It is modelled from what the feed does show: each level's size on every update, and the trade tape.
- 1Attribute printsA buy aggressor against the ask queue, a sell aggressor against the bid queue. are folded onto the book's price buckets with the book's own rounding.
- 2Split size changesBetween updates a level changes by adds − cancels − . The tape gives the trades, so any beyond them was cancelled. That gives a hazard per distance rank: the share of the queue leaving per second.
- 3Learn ratesPer side: the passive trade rate λ and its burstiness (Σ size² per second). For the mid: its , sampled every 250ms over 10 minutes. Rates use a 30-second half-life, so they adapt within a minute.
- 4Move virtual ordersconsume the queue from the front. Cancels are spread through the queue, so only the share in front of an order moves it forward. Size later joins behind it.
- 5EstimateCombine queue depletion with the chance price reaches or through the level (below).
- 6Self-checkScore every probe at 15 seconds against what actually happened.
The fill model
With A₀ in front of you, a passive trade rate λ and a hazard c, the queue ahead decays as dA/dt = −λ − c·A, so the expected volume gone from the front by τ is M(τ) = (A₀ + λ/c)(1 − e^(−cτ)). arrive in bursts, and each 's effect is itself eroded by later cancels, giving variance V(τ) = s²(1 − e^(−2cτ))/2c. The chance the queue in front of you is gone by τ is Φ(−A(τ)/√V).
const remaining = ahead - (ahead + lambda / c) * (1 - Math.exp(-c * tau));
const variance = s2 * (1 - Math.exp(-2 * c * tau)) / (2 * c);
const floor = 0.3 * ahead * Math.exp(-c * tau); // model uncertainty
const pQueue = normCdf(-remaining / Math.sqrt(variance + floor * floor));
// Touch: the queue clears, or price trades through the level.
pFill = 1 - (1 - pQueue) * (1 - reach(halfSpread + step / 2, tau));
// A level d from the touch: price must come to it, then a queue thinned by
// cancels must clear in the remaining time — or price trades through it.
pFill = 1 - (1 - reach(d, tau) * pQueue(ahead * Math.exp(-c * tau / 2), tau / 2))
* (1 - reach(d + halfSpread + step / 2, tau));How price reach is estimated
Reach is the chance the mid moves a given distance toward the order within τ. Two estimates are blended:
- Empirical: the market's own mid over the last 10 minutes. For every start and horizon the largest move up and down is recorded, so trending and mean-reverting markets give asymmetric, realistic odds. Moves missed between 250ms samples are corrected for (Broadie–Glasserman).
- Brownian: the reflection principle 2(1 − Φ(d/σ√τ)), with σ measured over 5-second windows so 100ms bid/ask does not inflate it.
- Weighting: by how many independent τ-windows the history holds, n = history ÷ τ, as n ÷ (n + 8). A 15s estimate from 30s of history rests on two windows and leans on the Brownian one; after 10 minutes it is 40 windows and mostly empirical. Long horizons stay more Brownian for longer.
How accurate it is
| Check | Result |
|---|---|
| Queue maths vs a FIFO queue (Poisson , uniform cancels) | within ±0.07 over four regimes and four horizons |
| Empirical reach vs the true Brownian first-passage at 100ms / 250ms / 1s | 0.393 / 0.365 / 0.370 against 0.371 (mean of 10 walks) |
| BTC/USDT, 15s horizon, ~140 probes per 4-minute run | Overall predicted and realised fill rates usually within 1–10 ; skill varies between runs from clearly positive to negative |
The scorecard shows the skill score: 1 − Brier ÷ (base rate × (1 − base rate)). Above zero the model knows more than the overall fill rate alone; at or below zero it does not. The raw Brier score is shown as well, but its meaning depends on the base rate.
Using it
Choose a level
the 15s or 1m column across levels. One level deeper can cost a little price and a lot of fill probability, or the reverse in a thin book.
Join or skip
If the queue is long and the ETA is minutes, a marketable order may cost less than waiting.
Watch a paper order
Drop one at your intended price and see how fast the queue in front of it actually moves before you commit.
Read the rates
A rising rate with a falling trade rate means liquidity is leaving; spreads usually widen next.
Limits
- Without order IDs, queue position is an estimate. Hidden or iceberg size and the exchange's matching rules are not visible in L2.
- depth arrives in 100ms batches; faster queue dynamics are invisible.
- Your real orders are assumed to be at the back of their level when first seen. If you placed one long before opening the view, it may be further forward than shown.
- Everything resets when the symbol or price changes: rates and queue positions do not carry across buckets.
- The model warms up for 45 seconds. Probes start only after that, so early guesses are never scored.
See also
Related articles
Related to Queue & Fill Probability
- 3D Book Towers
Trading / Order Book / Views
The book as a city of towers: one tower per price level for the latest fourteen slices of the book, older slices fading back.
- 3D Depth Canyon
Trading / Order Book / Views
The depth chart extruded through time. Cumulative bid and ask depth form two valley walls, and the mid runs along the valley floor.
- 3D Liquidity Terrain
Trading / Order Book / Views
The recorded book as a lit landscape: time across, price in depth, resting size as height. Walls are mountains, thin books are plains.
- 3D Ridgeline
Trading / Order Book / Views
Every price level as its own ridge of resting size through time, as in the book terrain chart: far ridges behind, near ridges in front, newest on the right.
- 3D Trade Cloud
Trading / Order Book / Views
Every print as a pillar at its time and price, its height the trade size, coloured by the aggressor, over the mid path.
- Book vs Tape Profile
Trading / Order Book / Views
What is resting at each price beside what has actually traded there — intent against action.
- Butterfly
Trading / Order Book / Views
Bid level N against ask level N, fanned out from a central spine — a level-by-level comparison of the two sides.
- Concentration
Trading / Order Book / Views
Lorenz curve and Gini coefficient of each side — how few levels hold the liquidity.
- Depth Bands
Trading / Order Book / Views
Liquidity within 5 / 10 / 25 / 50 / 100 bp of mid, over time — how much depth is actually close.