Post-Only Reject Cascade + Maker-Fallback Slippage Playbook

2026-03-05 · finance

Post-Only Reject Cascade + Maker-Fallback Slippage Playbook

Date: 2026-03-05
Category: research
Domain: execution microstructure / slippage modeling

Why this matters

Many desks treat post-only as “free spread capture.” In live markets, that assumption breaks when books move during gateway/venue latency:

This reject → retry → queue reset → panic take loop creates hidden slippage that standard maker/taker fee models miss.


Core idea

Model post-only execution as a branching process rather than a single passive fill path.

At each child-order decision, expected cost should include:

  1. Accept branch (post-only accepted and resting)
  2. Reject branch (would-cross protection, price moved, or venue rule mismatch)
  3. Fallback branch (switch to taker, midpoint, or pause)

Optimize across branches under a tail-risk budget (p95/CVaR), not average bps alone.


Slippage decomposition

For one child order at decision time (t):

[ EC_t = P(A)\cdot C_A + P(R)\cdot C_R + P(F|R)\cdot C_F ]

Where:

Key hidden term:

[ C_R \approx \Delta p_{latency} + QueueResetTax + RetryControlCost ]

Most implementations underestimate (\Delta p_{latency}) and ignore queue reset tax.


Practical state variables

Use a compact feature set that can be maintained in real time:

Market microstructure

Execution path

Cost + risk


New desk-level metrics

  1. PORS (Post-Only Reject Score)
    Weighted reject intensity: [ PORS = w_1\cdot RejectRate + w_2\cdot RejectBurst + w_3\cdot DriftDuringRetry ]

  2. QRT (Queue Reset Tax)
    bps loss attributable to lost queue priority after retries.

  3. MII (Maker Illusion Index)
    Difference between naive maker edge and branch-aware expected edge: [ MII = Edge_{naive\ maker} - Edge_{branch\ aware} ]

  4. FCR (Forced Cross Ratio)
    Fraction of initially passive intents that ended as taker fills after reject cascades.


Regime state machine

1) MAKER_OK

Action:

2) FRICTION

Action:

3) REJECT_STORM

Action:

4) SAFE

Action:

Use hysteresis to avoid state flapping.


Control policy (production sketch)

At each decision step:

  1. Estimate (P(A), P(R), P(F|R))
  2. Estimate branch costs (C_A, C_R, C_F)
  3. Compute branch-aware expected cost + risk penalty
  4. Pick action from {post_only, post_only_buffered, midpoint, taker, pause}
  5. Enforce hard guards:
    • max retries/order
    • max reject burst/window
    • max tail-budget burn rate
    • max forced-cross ratio

Calibration workflow

Data contract

Per attempt (not just per fill):

Modeling sequence

  1. Reject probability model (classification, calibrated)
  2. Retry-drift model (quantile regression)
  3. Queue reset tax model (survival/fill-hazard delta)
  4. Fallback cost model (impact + spread + markout)
  5. Joint branch simulator for policy evaluation

Prefer quantile loss + calibration checks over MSE-only reporting.


Backtest and replay safeguards

Promotion criteria example:


Failure modes to watch

  1. Fee illusion: rebate-focused routing that ignores reject cascades
  2. Over-retry loop: retries increase urgency cost faster than expected
  3. Venue drift mismatch: one venue enters reject storm earlier than others
  4. Clock integrity issues: bad timestamps hide retry latency cost
  5. Policy thrash: no hysteresis between maker and taker modes

2-week implementation plan

Week 1

Week 2


Bottom line

Post-only is not a binary “maker good” switch; it is a conditional strategy with path-dependent failure costs.
A branch-aware slippage model that explicitly prices reject cascades turns passive execution from fee theater into controllable risk-adjusted edge.