Fill-Time × Markout Copula Slippage Playbook

2026-03-01 · finance

Fill-Time × Markout Copula Slippage Playbook

TL;DR

A common execution mistake is modeling these separately:

  1. Will my passive child fill (and when)?
  2. If it fills, will post-fill markout hurt me?

In live markets, they are strongly coupled: the fills that come easiest are often the most toxic.

A practical upgrade is to build a joint model:

Then route by joint tail risk (not average fill or average markout alone).


1) Why independent models underprice slippage tails

Typical stack in production:

Failure mode:

Root cause: negative dependence between “easy fill” and “good post-fill outcome” is ignored.


2) Joint-variable framing

For each candidate child order at decision time (t):

Instead of modeling (T) and (M) independently, estimate

[ F_{T,M\mid X}(u,v\mid X_t) ]

via Sklar decomposition:

[ F_{T,M\mid X}(u,v\mid X_t)=C_{\theta(X_t)}\big(F_{T\mid X}(u\mid X_t),F_{M\mid X}(v\mid X_t)\big) ]

where (C_{\theta}) is a copula (Gaussian, t, Clayton, Gumbel, etc.).


3) Marginal A: fill-time survival (with censoring)

Passive children are naturally right-censored (many never fill before timeout).

Use discrete-time hazard or Cox/AFT-style survival:

[ h_k(X_t)=P(T\in(k,k+\Delta]\mid T>k, X_t) ]

[ S(k\mid X_t)=\prod_{j\le k}(1-h_j(X_t)) ]

Operational outputs:

Key features:


4) Marginal B: markout distribution (not mean-only)

Model (M\mid X_t, T\le H) with quantiles or heavy-tail likelihood (Student-t).

Example multi-quantile head:

for multiple horizons (5s/30s/120s).

Why quantiles matter:


5) Copula choice and interpretation

The copula captures dependence after removing marginal effects.

Practical guidance:

Condition (\theta) on regime features (volatility, cancellation stress, auction proximity) so dependence is state-aware.


6) Joint execution objective

For a buy parent, define child expected cost:

[ \mathcal{J}(a_t)= E\big[c_{\text{fill}}(T,M,a_t)\cdot\mathbf{1}{T\le H}\mid X_t\big] +E\big[c{\text{miss}}(a_t)\cdot\mathbf{1}_{T>H}\mid X_t\big] ]

with tail constraint:

[ \mathrm{CVaR}_{95}(\text{child cost}\mid X_t)\le B_t ]

where (B_t) is remaining slippage budget per child/parent state.

Interpretation:


7) Action policy mapping (deployable)

Candidate actions: {join, improve, midpoint, take_small, pause}.

At each step:

  1. score each action with joint (\mathcal{J}(a_t)),
  2. reject actions violating CVaR budget,
  3. apply hysteresis and minimum dwell time,
  4. execute best feasible action.

Example controller states:

Transition triggers should include copula-tail diagnostics, not just spread/depth.


8) Calibration protocol (anti-self-deception)

  1. Chronological split only.
  2. Fit survival marginal with censoring-aware loss.
  3. Fit markout quantiles on filled subset (with selection correction if needed).
  4. Fit copula on PIT-transformed residuals.
  5. Validate by regime buckets (symbol, TOD, volatility, participation).
  6. Replay baseline vs copula-policy event-by-event.

Required diagnostics:


9) Online monitoring metrics

Track these in production:

If joint-tail breach rate rises, downgrade to safer controller state and tighten participation.


10) Minimal implementation blueprint

Data contract (per decision)

Runtime loop

  1. Build features.
  2. Infer marginals (F_T, F_M).
  3. Infer copula (\theta) and joint tails.
  4. Compute feasible actions under budget.
  5. Send child.
  6. Log full tuple for TCA + retraining.

Safety rails


11) Expected impact

Typical outcomes when deployed carefully:

What it will not do:


Closing

Execution quality is not a one-dimensional fill problem.

When fill timing and post-fill toxicity co-move, independent models systematically understate risk. A copula-based joint framework gives a practical path to price that dependence explicitly and route with tail-aware discipline.


References