Order-Book Refill Asymmetry and the One-Sided Healing Tax Slippage Playbook
Date: 2026-03-13
Category: research
Audience: small quant execution teams running intraday parent orders across fragmented lit venues
Why this playbook exists
Many slippage models already account for:
- spread,
- participation rate,
- volatility,
- queue position,
- short-horizon toxicity.
But a recurring production miss is this:
after local depth is consumed, the book does not heal symmetrically.
For buy execution, ask-side depth may refill slowly while bid-side depth recovers quickly (or vice versa for sells). If your scheduler assumes symmetric recovery, it keeps firing as if liquidity regenerated normally and pays a hidden convex cost.
This document treats side-specific refill asymmetry as a first-class slippage state.
Core idea
For each venue v, estimate side-specific refill half-lives after depletion shocks:
tau_ask(v): time for ask depth to recover to a reference fraction after ask depletiontau_bid(v): time for bid depth to recover after bid depletion
For a buy parent order, define a one-sided healing ratio:
OHR_buy(v) = tau_ask(v) / (tau_bid(v) + eps)
For sells:
OHR_sell(v) = tau_bid(v) / (tau_ask(v) + eps)
When OHR >> 1, the execution side heals much slower than the opposite side. That regime amplifies impact and raises late-stage catch-up risk.
Failure mechanism
- Strategy executes in clipped child slices near touch.
- Each slice depletes execution-side depth.
- Opposite side refills quickly, execution side refills slowly.
- Model still prices next slice with symmetric or average resiliency.
- Realized marginal cost per next slice rises nonlinearly.
- Deadline pressure forces late aggression, creating a second slippage jump.
This is the One-Sided Healing Tax (OHT).
Cost decomposition
Total Slippage = Base + IIT + OHT + DCT
- Base: spread + baseline impact under normal resiliency.
- IIT (Immediate Impact Tax): direct price concession from child slices.
- OHT (One-Sided Healing Tax): extra cost from asymmetric refill on execution side.
- DCT (Deadline Catch-up Tax): late aggression cost caused by earlier under-healing.
OHT is often misattributed to "random volatility" unless refill asymmetry is explicitly measured.
Key metrics
1) Side Refill Half-Life (SRH)
For side s in {bid, ask} after a depletion event:
SRH_s = min t { Depth_s(t) >= alpha * Depth_s(pre-shock) }
Use alpha like 0.7 or 0.8 and track by venue/time bucket.
2) One-Sided Healing Ratio (OHR)
OHR = SRH_exec_side / (SRH_opp_side + eps)
Primary asymmetry indicator.
3) Refill Failure Streak (RFS)
Count of consecutive child intervals where execution-side depth fails to recover above threshold before next child dispatch.
4) Marginal Slice Cost Slope (MSCS)
Slope of realized slippage vs cumulative child index during a parent order under fixed urgency bucket.
Rising MSCS with high OHR is a strong OHT signature.
5) Recovery-Adjusted Executable Depth (RAED2)
RAED2 = displayed_exec_depth * P(recover_before_next_slice)
Displayed depth discounted by near-term refill probability.
6) Catch-up Convexity Indicator (CCI)
CCI = late_window_slippage_per_share / early_window_slippage_per_share
High CCI means early under-healing forced expensive endgame behavior.
State machine
BALANCED_HEAL
- OHR near 1
- RFS low
- marginal costs stable
FRAGILE_HEAL
- OHR drifting higher
- intermittent refill misses
- cost slope begins rising
ONE_SIDED_HEAL
- sustained OHR above threshold
- persistent RFS
- strong MSCS acceleration
NO_HEAL
- refill collapse on execution side
- depth stays thin across multiple child intervals
- high reject/chase risk
SAFE
- defensive mode when OHT budget is breached or deadline risk spikes
Control policy
In BALANCED_HEAL
- normal participation schedule
- standard passive/mid/aggressive mix
In FRAGILE_HEAL
- reduce child burst size
- extend inter-child spacing modestly
- require stronger edge for repeated same-side depletion
In ONE_SIDED_HEAL
- cap consecutive same-venue aggressive clips
- rotate to venues with lower OHR
- use probabilistic pause windows to allow refill recovery
- penalize tactics with high expected next-slice depletion
In NO_HEAL
- hard throttle participation on affected side/venue
- prefer completion-preserving alternatives (cross-venue routing, schedule smoothing)
- tighten kill-switch thresholds for late-stage aggressive catch-up
In SAFE
- enforce OHT budget stop
- trigger operator alert + episode capture
- switch to conservative completion policy with explicit tail-loss cap
Decision objective (asymmetry-aware)
For action a:
J(a) = E[C(a)] + l1 * OHT_risk(a) + l2 * DeadlineRisk(a) + l3 * VenueConcentrationRisk(a)
where:
OHT_risk(a) = f(OHR, RFS, expected_next_slice_depletion, refill_uncertainty)
This makes action choice robust when visible depth overstates true near-term replenishment.
Data contract (minimum)
Per child-order decision:
- venue, side, child size, tactic
- pre/post-touch depth on both sides
- depletion event flag + magnitude
- refill trajectory samples over fixed horizons (e.g., 50ms/100ms/250ms/1s)
- dispatch interval and next child timestamp
- fill/reject/cancel outcomes
- short-horizon markouts (100ms/1s/5s)
- parent residual qty/time
- state machine transitions
Without refill trajectories, OHT cannot be separated from generic impact noise.
Calibration loop
Intraday
- update OHR and RFS in rolling windows by venue/side
- refresh state classification every few minutes
Daily
- re-estimate SRH distributions by symbol bucket, venue, session segment
- evaluate MSCS and CCI drift
Weekly
- retrain OHT-risk mapping to q95/CVaR outcomes
- update control thresholds and hysteresis gaps
Practical implementation pattern
Depletion-event detector
- define side shock when local depth drop exceeds threshold within short window.
Event-study refill curves
- maintain rolling side-specific refill curves by venue/time bucket.
Asymmetry overlay in scheduler
- convert OHR into a dynamic urgency penalty/discount.
Venue-level OHR scoring
- route marginal slices to lower-OHR venues when possible.
Tail-budget governance
- monitor OHT share of total slippage and enforce SAFE transitions.
Common failure modes
Using only total depth
- ignores which side is actually failing to refill.
Average resiliency modeling
- side asymmetry disappears in pooled estimates.
No coupling to dispatch cadence
- refill speed matters only relative to next-slice timing.
Late aggression without OHT attribution
- DCT rises but root cause (asymmetric healing) stays hidden.
Venue aggregation blindness
- consolidated metrics hide one venue repeatedly causing OHT spikes.
Dashboard minimum
- OHR heatmap by venue × side × time bucket
- RFS and MSCS trajectories per active parent order
- OHT share (%) of total slippage
- CCI distribution by symbol liquidity bucket
- state occupancy (BALANCED/FRAGILE/ONE_SIDED/NO_HEAL/SAFE)
- top OHT episodes with replay links
Research anchors to revisit
- Obizhaeva & Wang (resiliency and transient impact intuition).
- Bouchaud-style propagator literature (impact decay dynamics).
- Queue-reactive order-book models (state-dependent flow and refill behavior).
- Empirical LOB resiliency studies on refill speed after liquidity shocks.
Use these as priors; calibrate with your venue-specific refill telemetry.
Practical takeaway
When execution-side depth heals slower than the opposite side, repeated slices become progressively more expensive even if spread and displayed depth look “normal.”
Treating refill asymmetry as a live state variable is a direct path to lower tail slippage.
One-line implementation mantra
Do not trade displayed depth; trade recovery-adjusted depth on the side you actually consume.