Fee-Table Version Drift Routing Slippage Playbook
Date: 2026-03-15
Category: research
Focus: Modeling and controlling slippage when execution routers trade on stale fee/rebate assumptions while exchange economics have already changed.
1) Why this failure mode matters
Most execution stacks optimize a net-cost objective like:
expected impact + expected spread + expected fee/rebate
That objective is only valid if fee inputs are correct at decision time.
In live environments, fee truth changes faster than many systems assume:
- exchange fee schedule revisions,
- tier transitions during the month/day,
- flag-level charging differences (displayed/passive/hidden/post-only midpoint, etc.),
- venue-specific pass-through changes at broker level,
- stale config rollout across router vs TCA vs risk engines.
When fee truth drifts but routing logic does not, desk behavior can look “impact-smart” while silently leaking basis points through wrong venue ranking.
2) Mechanism map
2.1 Drift sources
Typical entry paths:
- Version skew: router reads fee table
v_k, settlement/TCA usesv_{k+1}. - Tier-state mismatch: projected tier notional is stale, so marginal fee assumptions are wrong.
- Flag misclassification: child-order type predicts one fee bucket but actual venue execution prints in another.
- Partial rollout: one region/host updates fee config, another does not.
- Calendar boundary bugs: effective-time cutover (month/day/session) applied late or in wrong timezone.
2.2 Cost branch dynamics
Drift rarely appears as one big error. It compounds through routing behavior:
- venue score is mis-ranked,
- order flow concentrates where net edge is overestimated,
- realized fees disappoint,
- residual schedule falls behind,
- late catch-up aggression increases impact cost.
So fee drift becomes both direct fee leakage and indirect impact leakage.
3) Cost decomposition
Let realized total execution cost per parent be:
[ C_{total} = C_{impact} + C_{spread} + C_{fees} + C_{delay} + C_{opportunity} ]
Under fee-drift episodes, separate fee-induced error:
[ C_{total} = C_{baseline} + C_{fee_mispricing} + C_{reroute_distortion} + C_{catchup} ]
Where:
- (C_{fee_mispricing}): direct add/remove fee-rebate miss,
- (C_{reroute_distortion}): wrong venue choice due to stale net-cost ranking,
- (C_{catchup}): urgency tax from schedule deficit created by earlier misrouting.
Expected branch framing:
[ \mathbb{E}[C] = p_A C_A + p_D C_D ]
- (A): aligned-fee regime,
- (D): drift regime.
Goal is reducing both drift probability (p_D) and drift-severity gap ((C_D - C_A)).
4) Feature set for modeling
4.1 Configuration consistency features
router_fee_table_versioncanonical_fee_table_versionversion_age_secondshost_version_entropy(cross-host version disagreement)effective_time_offset_ms(config effective timestamp vs canonical clock)
4.2 Tier-state features
projected_monthly_add_volumerealized_monthly_add_volumetier_distance_bps(distance to next fee tier in expected bps benefit)tier_cross_probability_1htier_projection_error_abs
4.3 Routing behavior features
expected_net_cost_bps(route)vsrealized_net_cost_bps(route)fee_component_weight_in_scorevenue_flow_concentration_hhiroute_flip_rate_after_fee_refresh
4.4 Market interaction features
- local spread/depth/volatility,
- urgency state,
- time-to-close,
- participation deficit.
Fee-drift damage is highest when urgency is already high and route flexibility is low.
5) Operational metrics
5.1 FVG — Fee Version Gap
[ FVG = \mathbb{1}[v_{router} \neq v_{canonical}] \times version_age_seconds ]
Volume-weighted FVG captures how long meaningful flow traded under stale assumptions.
5.2 NCE — Net-Cost Error
[ NCE = realized_net_cost_bps - expected_net_cost_bps ]
Track by venue/flag/session. Persistent positive NCE indicates model/config drift.
5.3 TMS — Tier Margin Stress
[ TMS = \frac{|projected_tier_distance - realized_tier_distance|}{|projected_tier_distance|+\epsilon} ]
Measures instability of tier assumptions embedded in routing.
5.4 FDT — Fee Drift Tax
[ FDT = \frac{C_{fee_mispricing} + C_{reroute_distortion}}{executed_notional} ]
Primary KPI for this regime; monitor p95 and worst-episode values.
6) State machine and controls
ALIGNED
- fee versions synchronized,
- tier model within tolerance,
- full route optimization enabled.
DRIFT_WATCH
Triggered when FVG or NCE exceeds watch thresholds.
- increase uncertainty penalty on fee-sensitive routes,
- reduce fee alpha weight in route objective,
- trigger immediate config consistency check.
MISPRICED_ROUTING
Triggered on confirmed version mismatch or sustained FDT breach.
- freeze fee-optimized routing branches,
- shift to impact/liquidity-prioritized conservative map,
- cap venue concentration,
- enforce short refresh interval + checksum validation.
SAFE_RECONCILE
- apply canonical fee version globally,
- recompute tier state from authoritative ledger,
- gradual return with hysteresis (require stable FVG/NCE window).
7) Practical modeling workflow
- Build a canonical fee ledger
- versioned, timestamped, venue+flag+tier resolved.
- Join execution decisions with fee version used at decision time
- not just settlement-time fee truth.
- Label drift episodes
- aligned / watch / mispriced / reconcile.
- Run counterfactual routing replay
- same market path, corrected fee table.
- Estimate incremental drift cost
- by branch, venue, and urgency bucket.
- Calibrate policy thresholds
- FVG/NCE/TMS triggers that minimize p95 FDT while preserving completion.
Key principle: evaluate policy on tail outcomes, not average fee delta.
8) 30-day rollout plan
Week 1 — Fee truth contract
- define canonical fee schema (venue, flag, tier, effective time, timezone),
- add version checksum to every routing decision log,
- enforce explicit “unknown fee state” value (never silent default).
Week 2 — Shadow diagnostics
- compute FVG/NCE/TMS/FDT without control changes,
- identify top venues and symbols with highest drift tax,
- validate fee-version propagation latency.
Week 3 — Guardrail activation
- activate
DRIFT_WATCHpenalties in small canary slice, - auto-trigger consistency reconciliation on sustained mismatch,
- compare p95 FDT and schedule-completion against control slice.
Week 4 — Full deployment + runbook
- roll out mispriced-routing containment globally,
- add paging for stale-version exposure beyond SLA,
- codify incident playbook: detect → contain → reconcile → postmortem.
9) Common anti-patterns
- Treating fees as static constants in routing objective.
- Logging only settlement fees, not decision-time fee assumptions.
- Assuming one global tier state for all strategy flows.
- Mixing timezone cutovers between exchange calendar and config deployment.
- Optimizing maker rebates while ignoring drift-induced completion catch-up cost.
10) Bottom line
Fee economics are part of market microstructure, not back-office trivia.
If routing uses stale fee truth, “best execution” logic can be directionally wrong even with perfect impact models. A version-aware fee ledger, drift metrics, and containment states convert invisible fee leakage into a controllable risk process.
When fee truth is uncertain, route for robustness first, optimization second.