Fleeting-Liquidity Censoring & Quote-Age Slippage Playbook

2026-03-24 · finance

Fleeting-Liquidity Censoring & Quote-Age Slippage Playbook

Date: 2026-03-24
Category: research
Scope: How sub-second quote lifetimes and snapshot-censoring bias make live slippage models over-optimistic

Why this matters

Many execution stacks still build features on coarse bars (100ms, 250ms, 1s) or low-frequency snapshots.

That creates a hidden modeling trap:

Result: your model sees a cleaner, more stable book than what your orders actually interact with. Fill probability is overestimated, adverse selection is underestimated, and tail slippage appears as a "sudden regime shift" instead of a measurement problem.


Failure mechanism (operator timeline)

  1. Model training pipeline samples top-of-book every (\Delta) ms.
  2. Venue emits frequent quote updates with many lifetimes (<\Delta).
  3. Snapshot pipeline misses most short-lived states (censoring by observation design).
  4. Estimated spread/depth quality looks better than event-time reality.
  5. Router allocates more passive flow to apparently "good" venues.
  6. Live orders face faster quote fade / queue depletion than model expected.
  7. Requotes and urgency escalation increase realized slippage.

This is measurement-induced model error, not only market drift.


Extend slippage decomposition with censoring term

[ IS = IS_{market} + IS_{impact} + IS_{timing} + IS_{fees} + \underbrace{IS_{censor}}_{\text{fleeting-liquidity observation bias}} ]

Practical uplift regression:

[ IS_{censor,t} \approx a\cdot FLR_t + b\cdot QHD_t + c\cdot AQS_t + d\cdot SMP_t + e\cdot FMR_t ]

Where:


Core production metrics

1) Fleeting Liquidity Ratio (FLR)

[ FLR(\tau)=\frac{#{\text{top-of-book states with lifetime}<\tau}}{#{\text{top-of-book states}}} ]

Use (\tau) aligned with your feature sampling interval (e.g., 50ms, 100ms).

2) Quote Half-life Divergence (QHD)

[ QHD = \log\left(\frac{t_{1/2}^{event}}{t_{1/2}^{snapshot}+\epsilon}\right) ]

Large magnitude means your feature clock is distorting book persistence.

3) Snapshot Miss Probability (SMP)

Approximation under exponential quote lifetime (L\sim Exp(\lambda)):

[ SMP(\Delta) = P(L<\Delta)=1-e^{-\lambda\Delta} ]

Use empirical survival instead of pure exponential when possible.

4) Age-Conditioned Quote Stability (AQS)

[ AQS(a)=P(\text{quote survives next }h\mid \text{current age}=a) ]

If very young quotes have materially lower survival, age must be a first-class feature.

5) Fade-Markout Risk (FMR)

[ FMR=E[\text{markout}{\delta} \mid \text{fill preceded by opposite-side fade}] - E[\text{markout}{\delta} \mid \text{no fade}] ]

Directly links fleeting dynamics to post-fill toxicity.


Modeling architecture

Stage 1: quote-survival model (event time)

Model quote lifetime / hazard with features:

Output: (\hat{S}(h\mid x)=P(L>h\mid x)).

Stage 2: censoring-corrected fill model

Predict fill probability with IPW-style correction:

[ w_i = \frac{1}{P(\text{state observed under sampling policy} \mid x_i)} ]

Fit weighted fill model so short-lived states are not systematically underrepresented.

Stage 3: conditional slippage tail model

Estimate (q_{0.95}, q_{0.99}) slippage conditioned on:

Interaction term worth monitoring:

[ \Delta IS \sim \beta_1,urgency + \beta_2,(1-\hat{S}) + \beta_3,urgency\cdot(1-\hat{S}) ]


Controller states for live routing

GREEN — STABLE_BOOK

YELLOW — FLICKER_RISING

ORANGE — FLEETING_REGIME

RED — TAIL_CONTAINMENT

Use hysteresis + minimum dwell to avoid overreaction.


Engineering and data mitigations

  1. Store event-time L1/L2 updates, not only periodic snapshots
    Without event-time persistence, you cannot estimate quote survival correctly.

  2. Make quote age a mandatory online feature
    "At-touch" is insufficient; "at-touch for how long" is the key stability signal.

  3. Survival-adjust depth before routing
    Replace raw displayed depth with expected-surviving depth over execution horizon.

  4. Clock-policy audit for feature pipelines
    Any resampling/downsampling step should publish induced SMP by symbol/venue.

  5. Tail-first deployment gates
    Promote only if q95/q99 slippage improves in high-FLR windows, not just global average.


Validation protocol

  1. Build paired datasets: event-time truth vs production-sampled features.
  2. Quantify FLR/QHD/SMP per venue and symbol liquidity bucket.
  3. Backtest baseline vs censoring-corrected models on matched windows.
  4. Run canary with survival-adjusted routing penalties.
  5. Accept only if:
    • tail slippage decreases,
    • completion remains stable,
    • no blow-up in opportunity cost.

Practical observability checklist

Success criterion: tail slippage drops specifically during high-flicker periods.


Pseudocode sketch

# event-time microstructure features
x = build_features(book_event_stream)

# quote survival model
s_hat = quote_survival.predict_proba(x)  # P(quote survives horizon h)

# observation-censoring weight
p_obs = observation_model.predict_proba(x)  # probability state is observed under snapshot policy
w = 1.0 / max(p_obs, 1e-4)

# corrected fill + tail risk
fill_p = fill_model.predict_proba(x, sample_weight=w)
slip_q95 = tail_model_q95.predict(x, extra=[1 - s_hat, fill_p])

# routing score (penalize fleeting states)
score = edge_estimate(x) - alpha * slip_q95 - beta * (1 - s_hat)
route(score)

Bottom line

If your execution model is trained on coarse snapshots, you are likely paying a hidden censoring tax: the model learns from stable quotes, but your orders trade against fleeting quotes.

Treat quote lifetime and quote age as first-class modeling objects, and monitor sampling-induced miss probability as an explicit slippage risk factor.


References