Appearance

Personalize your experience

Mode
Accent Color
Direction
Queue & Fill Probability

Queue & Fill Probability

Order Book View

If 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.

Connecting to Binance BTC/USDT…
Connecting to Binance BTC/USDT…
Real time (Binance): the model learns for about 45 seconds (purple bar under the header), then checks itself against probe orders. Hover a level to plot its curve; click it to drop a paper order.

Anatomy

Queue ahead
Size displayed at the level: what a new order joins behind (√ scale bar).
Heat cells
P(fill) within 1s, 5s, 15s, 1m and 5m. fade where the model has had little for that level.
ETA
time to fill: when P(fill) first reaches 50%. ">5m" means it does not within five minutes.
◆ paper order
Placed by clicking a level. It never , but moves forward exactly as a real order would.
▲ mine
Your real working orders, picked up automatically and assumed to sit at the back of their level when first seen.
· probe
Orders the view places at each every 3 seconds to test itself.
P(fill) over time
fill probability on log time for both touches and the hovered level or newest tracked order. The dot marks its ETA.
Model vs real fills
diagram and scorecard from scored probes.
Learned rates
Inputs in use now: trade rate λ, print rate, rate, mid volatility σ.
Tracked orders
through the queue, size still ahead, ETA and P(fill ≤ 15s); predicted vs actual time once .

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.

  1. 1
    Attribute prints
    A 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.
  2. 2
    Split size changes
    Between 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.
  3. 3
    Learn rates
    Per 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.
  4. 4
    Move virtual orders
    consume 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.
  5. 5
    Estimate
    Combine queue depletion with the chance price reaches or through the level (below).
  6. 6
    Self-check
    Score 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).

analytics/queue/queueModel.ts
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

Queue ahead
Size displayed at the level: what a new order joins behind (√ scale bar).
Heat cells
P(fill) within 1s, 5s, 15s, 1m and 5m. fade where the model has had little for that level.
ETA
time to fill: when P(fill) first reaches 50%. ">5m" means it does not within five minutes.
◆ paper order
Placed by clicking a level. It never , but moves forward exactly as a real order would.
▲ mine
Your real working orders, picked up automatically and assumed to sit at the back of their level when first seen.
· probe
Orders the view places at each every 3 seconds, once warmed up, to test itself.
P(fill) over time
fill probability on log time for both touches and the hovered level or newest tracked order. The dot marks its ETA.
Model vs real fills
diagram and scorecard from scored probes.
Learned rates
Inputs in use now: trade rate λ, print rate, rate, mid volatility σ.
Tracked orders
through the queue, size still ahead, ETA and P(fill ≤ 15s); predicted vs actual time once .

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.

  1. 1
    Attribute prints
    A 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.
  2. 2
    Split size changes
    Between 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.
  3. 3
    Learn rates
    Per 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.
  4. 4
    Move virtual orders
    consume 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.
  5. 5
    Estimate
    Combine queue depletion with the chance price reaches or through the level (below).
  6. 6
    Self-check
    Score 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).

analytics/queue/queueModel.ts
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

CheckResult
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 runOverall 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.

!
Caution:Treat the probabilities as a guide, not a guarantee. On BTC/USDT the model's overall fill rate tracks reality, but its ranking of individual orders is not yet reliably better than the base rate. cluster: one fills many probes at once, so outcomes are not independent and the score swings over a few minutes. Check the skill score in the for the market you are trading before leaning on it.

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

  • 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.

Browse all knowledge base articles →