Iceberg Refresh Priority Illusion Slippage Playbook

2026-04-08 · finance

Iceberg Refresh Priority Illusion Slippage Playbook

Date: 2026-04-08
Category: research
Scope: Modeling the slippage tax from treating reserve replenishment as if queue priority survived the refresh

Why this matters

A hidden-liquidity signal is not the same thing as a queue-priority signal.

That sounds obvious until a live execution stack starts leaning on reserve / iceberg behavior. Then a very common mental shortcut appears:

That shortcut is often wrong.

Public venue documentation makes the key boundary explicit:

Operationally, that means the hidden parent may still exist, but the displayed queue edge you thought you were leaning on may have reset.

This is a distinct slippage regime:

The expensive mistake is not:

“we failed to detect hidden liquidity.”

It is:

“we detected hidden liquidity and then over-credited it as if displayed priority were continuous.”

That turns a useful iceberg signal into a queue-position hallucination.


Failure mode in one line

The strategy observes repeated same-price reserve replenishment, mistakes it for continuous queue edge, overestimates passive fill probability after each refresh, and later pays catch-up slippage when the refreshed displayed clip does not fill like the old one.


Market-structure facts that matter operationally

1) Same price continuity does not imply same displayed time priority

The crucial distinction is between:

Those are not interchangeable.

A level can keep reappearing at the same price while the newly displayed clip repeatedly returns with fresh time priority. If your model collapses those three concepts into one variable, passive-fill estimates will be too optimistic.

2) Venue docs explicitly separate displayed and hidden priority

Across public docs, the broad pattern is consistent even if exact matching rules differ:

So the right question is not merely:

“is there more hidden size behind this level?”

It is:

“if more size reloads, what priority does the new displayed slice actually get?”

3) MBP feeds make the illusion worse

With market-by-price feeds, you often see:

That means a reserve-refresh event can look like “depth resilience” even when your own passive order effectively got pushed back in the actionable queue each time.

4) Randomized display refresh can further break naive inference

Some venues allow randomized disclosed refresh size. That is useful to remember because many simple iceberg detectors depend on fixed-clip repetition.

When randomization exists, you can have both:

So an execution model that relies on repeated identical clip sizes can under-detect the reserve while still overestimating the value of posting behind it.

5) Hidden support can be real while passive opportunity is deteriorating

This is the subtle branch that hurts production systems. The level may genuinely absorb aggressive flow for a while, yet your own next passive child may still fill more slowly because:

So “strong absorption” and “good passive queue economics” can diverge sharply.

6) This is mostly a miss-cost and deadline-convexity problem, not a spread-capture problem

The slippage tax usually shows up as:

In other words, the damage often arrives one step later:

not at the moment you detect reserve, but at the moment you realize you trusted the refill too much.


The core modeling distinction

Model three separate latent objects:

  1. Hidden reserve presence
    Is there likely undisplayed size behind the level?

  2. Refresh / replenish behavior
    Does the level tend to reload after consumption?

  3. Displayed-priority continuity
    After reload, does the newly visible clip behave like a queue continuation for passive-fill purposes, or like a fresh arrival?

Most desks model (1), some model (2), and many quietly assume away (3). That is where the slippage leak lives.


Observable signatures

1) Same-price replenishment continues, but passive fill latency suddenly worsens

The book keeps “coming back,” yet your own resting order fills slower than the model expects.

That pattern often means:

2) Refill count looks bullish for passive execution, but realized completion lags

A naive controller may interpret multiple refills as safety:

If completion remains behind schedule despite strong refill statistics, refresh-priority loss is a suspect.

3) Fill-probability residuals turn sharply negative after each reload event

If you compute expected vs realized passive-fill probability conditional on local flow and depth, look for repeated negative residuals immediately after a displayed tranche is exhausted and reloaded.

That is one of the cleanest production diagnostics.

4) MBP-inferred queue position improves on paper but not in reality

In compressed feeds, the visible level may look “stable enough” that your queue-position model thinks little changed. But if post-reload realized fill ordering repeatedly disappoints, the model is probably treating price-level continuity as queue continuity.

5) Late-session or deadline-sensitive catch-up bursts cluster after repeated refill episodes

The cost is usually not one giant bad print. It is a sequence:

6) Markout after delayed catch-up looks worse than the model budgeted

Because the controller kept waiting for passive fills that never arrived quickly enough, the eventual aggressive switch occurs later, often into higher toxicity or lower resilience.


Mechanical path to slippage

Step 1) The strategy detects hidden support at the working level

Signals may include:

So far, so good.

Step 2) The model upgrades passive-fill expectations

This is the dangerous jump. The controller starts to assume:

Step 3) The displayed tranche exhausts and a new one appears

If venue semantics give the new displayed slice fresh time priority, the market has changed in a way that MBP-style state may not represent clearly.

Step 4) The controller underestimates queue reset cost

The strategy behaves as if the reloaded display were a continuation of prior opportunity. But your passive child may now be effectively farther back than the model thinks.

Step 5) Schedule progress decays quietly

Nothing dramatic may happen in a single instant. Instead:

Step 6) Deadline or toxicity pressure forces catch-up

Now the desk pays the real bill:


Modeling framework

A useful decomposition is:

[ P(\text{passive fill in }\Delta t)=f(H_t, R_t, Q_t, V_t, U_t) ]

where:

The key upgrade is making (Q_t) explicit.

A simple latent-state version

Let:

Then effective actionable queue support is:

[ D^{actionable}_t = D^{disp}_t + w_H H_t - \lambda_Q Q_t ]

where:

The point is not exact elegance. It is to force the model to stop giving full passive credit to hidden reserve when refresh semantics break displayed continuity.

Queue-reset premium

Define a conditional miss-cost term:

[ QRP_t = P(Q_t=1 \mid \mathcal{F}_t) \cdot C^{miss}_t ]

where (C^{miss}_t) is the estimated cost of underfilling now and catching up later.

This term belongs in live slippage control every bit as much as temporary impact or adverse-selection penalties.


Features that matter online

Maintain rolling features around the working level:

  1. Refill Event Count (REC)
    Number of replenishment signatures in the lookback.

  2. Post-Refresh Fill Residual (PFR)
    Realized passive fills minus model-expected fills immediately after a refill.

  3. Reload Gap (RG)
    Time between visible tranche depletion and next displayed replenishment.

  4. Clip Consistency / Randomization Score (CCS)
    Whether visible refill sizes repeat tightly or vary within a venue-like randomization band.

  5. Consumed-to-Displayed Ratio (CDR)
    Aggressive flow consumed at the level relative to displayed depth.

  6. Queue Survival Residual (QSR)
    How actual queue survival differs from what a no-refresh-loss model predicted.

  7. Hidden Support Strength (HSS)
    Your existing iceberg / reserve-presence score.

  8. Venue Priority Semantics Flag (VPS)
    Venue-specific prior about whether refresh tends to imply fresh displayed time priority and/or distinct reserve priority treatment.

  9. Modeled Depth Visibility (MDV)
    MBO vs MBP vs broker-internal synthetic visibility; MBP should increase uncertainty.

  10. Completion Pressure (CP)
    Residual-vs-clock gap, which controls how costly a passive miss is right now.


Slippage decomposition

Extend the shortfall model:

[ IS = Spread + TempImpact + Delay + Fees + MissCost + QRP ]

where:

[ MissCost_t = P(\text{passive underfill} \mid \mathcal{F}_t) \cdot C^{catchup}_t ]

and

[ QRP_t = P(\text{refresh-priority loss} \mid \mathcal{F}_t) \cdot C^{catchup}_t ]

These two are related but not identical:

This distinction matters for diagnostics and policy tuning.


Controller design

State A — ABSORBING_BUT_FRESH

Hidden support present, no strong evidence yet that queue continuity broke.

State B — RELOADING

Refills are happening, but each new display should be treated cautiously.

State C — RELOAD_TRAP

Repeated refill events + negative post-refresh fill residuals.

State D — DEADLINE_PROTECT

Residual-vs-clock gap is widening after repeated passive disappointments.

Use hysteresis and minimum dwell time so the controller does not flip state on every micro-event.


Practical policy rules

A compact policy overlay:

[ PassiveBias_t = PassiveBias_{base} - a \cdot P(Q_t=1) ]

[ Clip_t = Clip_{base} \cdot (1 - b \cdot P(Q_t=1)) ]

[ CatchupWeight_t = CatchupWeight_{base} + c \cdot P(Q_t=1) \cdot CP_t ]

High-level meaning:


Backtest / replay design

To test this properly, avoid the usual trap of replaying only depth snapshots.

You want event labels that approximate:

Minimum viable replay labels

For each candidate episode, record:

Key counterfactual

Compare two policies:

  1. Naive refill-trusting policy
    Hidden support boosts passive confidence with little or no priority-loss penalty.

  2. Refresh-aware policy
    Hidden support helps, but post-refresh queue continuity is discounted.

Success is not just lower average spread cost. It is lower p90/p95 catch-up pain and fewer deadline squeezes.


Monitoring KPIs

Track by venue, liquidity bucket, and urgency bucket:

A particularly useful KPI is:

Refill Trust Gap (RTG)

[ RTG = E[\text{expected passive fill after refill} - \text{realized passive fill after refill}] ]

If RTG is persistently positive, your controller is over-trusting reserve refresh.


Common mistakes

1) Treating hidden reserve as if it were displayed queue rank

Reserve can support price without supporting your passive seniority. Those are different assets.

2) Training on MBP-only data without an uncertainty premium

If you cannot directly observe queue continuity, your model should widen uncertainty, not collapse it.

3) Measuring only immediate spread capture

The real cost often appears later as delayed completion and catch-up impact.

4) Assuming all venues refresh the same way

Even when the broad pattern is similar, venue-specific semantics matter enough that a single global rule is dangerous.

5) Ignoring urgency interaction

A mild queue-reset penalty is manageable when the clock is loose and expensive when the deadline is near.


Minimal pseudocode

features = featurize(level_events, trades, queue_model, urgency_state)
hidden_score = hidden_model.predict(features)
refresh_loss_prob = refresh_priority_model.predict_proba(features)

passive_fill_prob = fill_model.predict({
    **features,
    "hidden_score": hidden_score,
    "refresh_loss_prob": refresh_loss_prob,
})

if refresh_loss_prob < th1:
    state = "ABSORBING_BUT_FRESH"
elif refresh_loss_prob < th2:
    state = "RELOADING"
elif urgency_state.completion_pressure < cp_crit:
    state = "RELOAD_TRAP"
else:
    state = "DEADLINE_PROTECT"

params = policy_map[state]
submit_child_orders(params)
log_decision(features, hidden_score, refresh_loss_prob, state, params)

Bottom line

Reserve replenishment is valuable information. But if your slippage stack turns that signal into unconditional passive confidence, it will eventually pay for a false assumption:

same price does not mean same queue.

A robust model should separately estimate:

When those three get untangled, iceberg signals stop behaving like magical liquidity promises and start behaving like what they really are:

useful, partial information with venue-shaped limits.