Conditional-Venue Invitation / Firm-Up Race Slippage Playbook
Date: 2026-04-08
Category: research
Scope: Modeling the slippage tax from treating dark / conditional invitations like deterministic fill opportunities instead of latency-sensitive race conditions with duplicated liquidity, venue-specific priority, and hold-time opportunity cost
Why this matters
Conditional liquidity feels wonderfully cheap right up until it starts lying to your scheduler.
On paper, the story is attractive:
- rest conditional interest across several dark / block venues,
- avoid displaying size,
- get invited only when liquidity is plausibly there,
- firm up,
- and cross with limited footprint.
The trap is that an invitation is not a fill. It is not even a firm executable resting state in the same sense as a lit passive order. It is a time-sensitive branch:
- the contra may be visible to multiple venues at once,
- your own order may have duplicated itself across venues,
- the invite can arrive in a cluster rather than alone,
- the venue may require a rapid firm-up decision,
- and while you are deciding, the lit market and your parent deadline keep moving.
That creates a distinct slippage regime:
- the strategy sees apparent block opportunity,
- delays or reroutes other execution while considering the invite,
- but the invite either loses a race, times out, fragments, or converts into a toxic late fill,
- and the parent later pays catch-up cost in the lit market.
The expensive mistake is usually not:
“we forgot conditional venues can miss.”
It is this:
“we treated an invite like soft completion, rather than as a stochastic option with decay, overlap, and opportunity cost.”
Once that confusion enters the scheduler, everything downstream bends the wrong way:
- urgency relaxes too early,
- alternate routes get paused too long,
- venue scores get biased toward duplicated rather than unique liquidity,
- and TCA overstates how much real optionality the dark stack provided.
Failure mode in one line
The strategy receives one or more conditional invitations, overestimates their probability of becoming a timely useful fill, delays competing execution paths, then pays slippage when the firm-up race fails or completes too late.
Market-structure facts that matter operationally
1) Conditional interest is not the same thing as a firm resting order
Public venue descriptions make the boundary explicit:
- a conditional order is effectively an indication of interest,
- the contra side triggers an invitation or firm-up request,
- and execution happens only if both sides return firm orders in time.
Operational meaning:
your model needs at least two stages, not one:
- invite arrival, and
- invite conversion to usable fill.
If those are collapsed into a single event, fill probability will be overstated and delay cost understated.
2) Conditional venues reduce displayed footprint, but create race conditions
BestEx Research’s 2024 conditional-order analysis is the most practical public statistic here:
- in roughly 140K invitations,
- about 41% were race conditions,
- where invitations from at least two venues arrived within 50 milliseconds.
That means a large share of conditional opportunities are not independent observations. They are clustered manifestations of the same latent liquidity event.
If your venue model credits each invitation equally, it will confuse duplicated liquidity with incremental liquidity.
3) First-arrival logic and short-wait logic can both fail
BestEx’s discussion also highlights the central implementation dilemma:
- if you always firm the first invite, you may commit to the venue that loses the race to the contra,
- if you wait a few milliseconds to choose the most preferred venue among clustered invites, the contra may already have committed somewhere else.
So the problem is not just venue ranking. It is a joint policy over:
- ranking,
- wait window,
- parent urgency,
- and the market cost of pausing alternative execution during that window.
4) Venue rules are heterogeneous, which breaks one-size-fits-all invite handling
Public venue guides and Form ATS-N-era summaries make clear that dark venues differ materially in:
- size priority vs price priority,
- whether firm orders outrank conditional indications,
- minimum execution size rules,
- midpoint-only vs broader pegging behavior,
- and toxicity / tiering / counterparty controls.
So “invite quality” is not portable across venues. An invite from venue A and an invite from venue B may represent very different realities:
- different probability of true unique liquidity,
- different probability of conversion,
- different expected fill size,
- and different post-fill markout risk.
5) Conditional opportunity competes with lit opportunity in real time
A conditional invite does not exist in a vacuum. While your stack is:
- waiting for more invites,
- deciding which venue to firm,
- or holding back lit routing to avoid crossing yourself,
three clocks continue to run:
- the market clock,
- the parent deadline clock,
- and the alpha / urgency decay clock.
So even a non-fill has cost. That cost is not merely “missed block liquidity.” It is also:
- spread drift while waiting,
- depth deterioration,
- schedule deficit,
- and lost optionality to complete elsewhere.
6) Unique liquidity matters more than gross invitation count
A venue that sends many invitations is not necessarily valuable. If most of its invitations arrive in the same cluster as other venues, it may be contributing little unique optionality.
The right question is not:
“Which venue sends more invites?”
It is:
“Which venue adds fill opportunities I would not have gotten anyway, net of hold-time cost?”
7) Minimum fill size changes the economics, not just the average execution size
Conditional venues often support MES / minimum quantity style constraints. That is not a cosmetic parameter. It changes:
- how many invites qualify,
- how much duplicated liquidity becomes reachable,
- whether you over-filter usable blocks,
- and whether you waste time waiting for large crosses that rarely complete.
An MES that is too low increases noise and potential information leakage. An MES that is too high can turn the conditional stack into an elegant machine for missing trades.
8) Semi-manual or OMS-integrated workflows can create hidden latency regimes
Some conditional ecosystems historically relied on desktop alerts, blotter sweeps, or OMS-assisted firm-up workflows. Even when the execution is automated today, desks often have residual architectural asymmetry:
- some flow is direct and low-latency,
- some flow still passes through broker logic or control layers,
- and some venues are faster only for specific workflow types.
If you pool all of that together into one venue-level conversion rate, you will average away the real branch that matters.
Observable signatures
1) Invitation volume looks healthy, but realized conditional completion is poor
You see lots of conditional activity in logs:
- invites arrive,
- firm-up messages go out,
- venue hit rates look superficially busy,
but parent-level completion from the conditional stack is consistently underwhelming.
That often means the system is measuring contact, not usable liquidity.
2) Simultaneous invite clusters frequently end with no fill anywhere
This is the cleanest race-condition smell. If several venues invite within a tight window and nothing executes despite apparent two-sided interest, your policy is likely losing coordination races.
3) Lit catch-up cost spikes after conditional hold episodes
Look for sequences like:
- parent pauses or slows lit routing,
- one or more conditional invites arrive,
- no useful fill occurs,
- then the strategy must reaccelerate in a worse lit book.
That is the core hold-time tax.
4) Venue win rates look good in isolation but bad in cluster-conditioned analysis
A venue may appear strong when measured on raw fill rate, yet perform poorly when you evaluate only cases where multiple venues invited at once.
That usually means the venue is good at showing up, not good at winning.
5) Fill quality worsens with longer firm-up latency
Conditional fills that arrive after longer decision / response delay often have worse economics:
- shorter remaining alpha horizon,
- more adverse lit drift,
- and higher chance the fill is simply late rather than useful.
6) Parent deadlines are quietly consumed by dark indecision
The stack may look disciplined because it is not crossing the spread immediately. In reality it may be spending scarce deadline budget on repeated conditional maybes.
7) Large minimum quantities produce beautiful dashboards and ugly opportunity loss
A desk can talk itself into feeling safe because average fill size rises. But if reachable liquidity collapses and catch-up aggression rises later, the MES policy is too ambitious for the regime.
Mechanical path to slippage
Step 1) The strategy posts conditional interest across several venues
This is rational and often desirable. The point is to source block liquidity without advertising full intent.
Step 2) One or more invitations arrive
The invites may be:
- single and isolated,
- clustered across venues,
- or mixed with changing lit conditions and shrinking deadline budget.
Step 3) The scheduler implicitly gives the invite too much credit
Common hidden assumptions:
- “an invite means likely fill,”
- “a cluster means multiple chances,”
- “waiting a few more milliseconds is cheap,”
- or “dark opportunity outranks current lit urgency.”
That is where the branch usually becomes mispriced.
Step 4) The strategy commits, waits, or reorders other routes
Examples:
- lit aggression is paused,
- one venue is firmed while others are ignored,
- or the strategy waits briefly for more invite information.
Step 5) The race resolves badly
Possible bad outcomes:
- the chosen venue loses the race,
- the unchosen venue would have filled,
- the invite expires,
- the fill size is too small to matter,
- or the fill lands only after the parent has lost timing value.
Step 6) The parent re-enters the lit market behind schedule
Now the true slippage appears:
- the spread may be wider,
- depth thinner,
- toxicity higher,
- and urgency steeper.
Step 7) TCA blames “market conditions” instead of the conditional decision policy
If the system does not explicitly attribute hold-time and race-loss cost, the desk learns the wrong lesson. It thinks:
- the market got unlucky,
- the venue was fine,
- or the dark stack remains obviously accretive.
In reality, the scheduler may have overpaid for optionality that was mostly duplicated and decayed too quickly.
Core model
Treat conditional execution as a stochastic option-pricing problem with overlap.
At minimum, model four layers separately.
1) Invite arrival model
Estimate:
- probability of invite arrival,
- expected invite size,
- and expected time-to-invite,
conditioned on:
- symbol,
- spread,
- lit depth,
- time of day,
- urgency,
- parent residual,
- venue,
- and MES.
This layer measures contact frequency, not value.
2) Invite-cluster / duplication model
Given an invite, estimate:
- probability other venues also invite within a small window,
- cluster width in milliseconds,
- and whether the observed opportunity is likely unique or duplicated.
This is the layer many desks skip. Without it, raw invite count creates a false sense of optionality.
3) Firm-up conversion model
For each candidate venue and wait policy, estimate:
- probability the invite becomes a fill,
- expected fill size conditional on conversion,
- and conversion decay as a function of response latency.
This layer should be conditioned on cluster context:
- single invite vs clustered invite,
- venue rank within cluster,
- relative arrival order,
- MES,
- and current market motion.
4) Hold-time opportunity-cost model
Estimate the expected cost of delaying or suppressing alternate execution while the conditional branch is alive.
This is often the missing term. A useful mental decomposition is:
Expected conditional decision cost
= fill-path cost
+ race-failure / no-fill cost
+ hold-time lit drift cost
+ deadline compression cost
- spread saved when the conditional fill succeeds usefully
If your model has no explicit hold-time term, it will overuse conditional waiting in the exact regimes where it should be ruthless.
Features worth logging
You cannot fix this branch with fill data alone. Log the full invitation decision process.
Invitation and cluster features
- invite timestamp at highest available precision
- venue ID
- side
- requested / potential size
- minimum execution size
- cluster ID linking invites within N milliseconds
- relative arrival order within cluster
- cluster width in milliseconds
- number of venues in cluster
- whether the venue was unique or part of a cluster
Decision-latency features
- time from invite receipt to local decision
- time from decision to firm-up submission
- total invite-to-firm-up latency
- whether the system waited for additional invites
- configured wait threshold at the time
Market-state features
- spread
- top-of-book depth
- microprice / imbalance
- quote age
- short-horizon return before and after invite
- lit sweep intensity
- volatility regime
- time-to-parent deadline
Outcome features
- did the chosen venue fill
- fill size
- partial vs full conditional completion
- whether another venue in the same cluster filled instead
- whether no venue filled
- post-decision lit drift while waiting
- subsequent lit catch-up cost
- short-horizon markout after conditional fill
Architecture features
- broker / router path used
- automation mode vs semi-manual mode
- venue-specific gateway / stack latency
- strategy class
- MES policy source
Highest-risk situations
1) Block-seeking flow sprayed across many conditional venues
The more venues you contact, the more duplicated-liquidity and coordination-race risk you create.
2) Fast markets where waiting is expensive
When spreads, imbalance, or short-horizon drift are unstable, even a brief conditional hold can become costly.
3) Deadline-sensitive parent orders
If the parent already has little slack, the scheduler should be much less willing to spend time on ambiguous conditional optionality.
4) Names with fragmented dark liquidity but low unique-liquidity share
Some symbols generate plenty of invites that are mostly the same opportunity wearing different venue badges.
5) MES policies set by habit rather than regime
A fixed minimum quantity across all symbols and urgency states is almost guaranteed to be wrong somewhere.
6) Venue comparisons based on gross fills rather than cluster-conditioned wins
This can systematically overroute to venues that are noisy participants in races rather than genuine sources of unique block liquidity.
Regime state machine
SEARCHING
Trigger:
- parent eligible for conditional sourcing,
- no live invite currently active.
Actions:
- keep conditional interest posted where appropriate,
- track unique-liquidity priors by venue,
- preserve lit baseline schedule.
SINGLE_INVITE_CANDIDATE
Trigger:
- one invite arrives with no immediate competing invite.
Actions:
- score expected saved spread vs hold-time cost,
- consider urgency and deadline,
- decide whether to firm immediately or keep lit path active.
CLUSTERED_INVITES
Trigger:
- multiple invites arrive within the cluster window.
Actions:
- do not count invites as additive liquidity,
- apply venue win-rank conditioned on cluster context,
- enforce a very small or zero wait window unless regime explicitly justifies delay.
FIRMUP_PENDING
Trigger:
- one venue chosen and firm-up submitted.
Actions:
- freeze soft progress credit at zero until actual fill,
- limit how much lit routing is paused,
- start hold-time accounting immediately.
RACE_AMBIGUOUS
Trigger:
- competing invites remain live,
- or chosen venue has not converted within expected latency budget.
Actions:
- shorten patience,
- re-open alternate routing,
- downgrade expected conditional value sharply.
MISSED_CROSS_RECOVERY
Trigger:
- no useful fill occurred,
- or another venue won while the chosen venue did not.
Actions:
- attribute miss to race-loss branch,
- restore lit aggression based on updated deadline deficit,
- log counterfactual winning venue if observable.
DELAYED_FILL_LOW_VALUE
Trigger:
- fill occurs, but only after material hold-time erosion.
Actions:
- preserve the fill for inventory,
- but attribute reduced economic value separately from clean conditional success.
SAFE_COMPLETED
Trigger:
- conditional fill arrives within value-preserving latency budget.
Actions:
- update progress normally,
- refresh venue priors,
- release suppressed alternate routing.
Control rules that actually help
1) Never give invitation credit as completion credit
An invite is an option, not progress. Do not let parent-completion logic relax just because an invitation arrived.
2) Score venues on unique liquidity and cluster-conditioned win rate
Raw invite rate and raw fill rate are both misleading. A strong venue is one that either:
- provides unique invites,
- or wins cluster races often enough to justify routing preference.
3) Make the wait window regime-aware and tiny by default
If you ever wait for more invite information, make that wait depend on:
- urgency,
- market motion,
- and empirical cluster economics.
A static “wait a few milliseconds” policy is usually just superstition with a config file.
4) Keep lit routing partly alive unless the conditional edge is clear
Do not fully freeze alternate execution paths for weak conditional signals. Preserve some ability to keep schedule risk under control.
5) Measure delayed fills against a value budget, not only execution success
A fill that arrives after the parent already lost timing value is not the same as an on-time fill. Model that difference explicitly.
6) Tune MES using total economic value, not average fill size
The right MES is the one that maximizes:
- useful block completion,
- net saved spread,
- and reduced catch-up cost,
not the one that produces the prettiest average conditional print size.
7) Separate venue policy from architecture latency
Do not punish a venue for your own slow path, and do not reward a venue simply because one workflow variant reaches it faster.
8) Attribute race-loss cost explicitly in TCA
If a missed conditional race merely disappears into generic implementation shortfall, the policy will never improve.
TCA / KPI layer
Track these explicitly.
IRC — Invite Race Clustering
Fraction of invites that arrive in multi-venue clusters.ULS — Unique Liquidity Share
Share of invites that are not accompanied by competing invites inside the cluster window.FWC — Firm-Up Win Conversion
Fraction of firmed invites that become economically useful fills.RLM — Race Loss Misses
Cases where a different invite in the same cluster would have been the better or winning choice.HDC — Hold Delay Cost
Estimated bps lost from delaying alternate execution while the conditional branch was active.DFP — Delayed Fill Penalty
Additional cost from fills that happened, but only after material alpha / deadline decay.MES-EV — MES Economic Value
Net economic value by minimum-execution-size policy bucket.
The big reporting rule:
evaluate conditional venues both:
- unconditionally, and
- conditional on cluster context.
Otherwise you will systematically overrate duplicated-liquidity venues.
Validation approach
1) Reconstruct invitation clusters from raw timestamps
Use a small configurable window such as 10–50 ms depending on your stack and data quality. Then analyze outcomes by:
- single invite,
- two-venue cluster,
- three-plus venue cluster.
2) Run counterfactual policy replay
Compare at least:
- first-arrival policy,
- fixed small-wait policy,
- venue-ranked immediate policy,
- and urgency-aware mixed policy.
3) Evaluate on economic value, not just dark fill rate
A higher dark fill rate can still be worse if it requires too much hold time or produces low-value delayed fills.
4) Stratify by urgency and deadline slack
A policy that helps patient block flow can be disastrous for deadline-constrained flow. Do not average those together.
5) Learn venue priors at the cluster level
Estimate which venues tend to:
- provide unique liquidity,
- win races,
- or produce late low-value fills.
6) Measure post-hold lit re-entry cost
This is where many models undercount the tax. Explicitly compare lit execution after failed conditional episodes against baseline lit execution without the hold.
Common anti-patterns
1) Counting invitations as evidence of additive liquidity
Multiple invites in a 20 ms burst are often one opportunity, not many.
2) Ranking venues by raw fill rate alone
That rewards duplicated-liquidity venues and ignores race context.
3) Optimizing only on average conditional fill size
Large average fills can hide severe opportunity loss and delayed catch-up cost.
4) Treating no-fill as zero-information
A failed firm-up is highly informative about:
- venue competitiveness,
- cluster dynamics,
- and whether the waiting policy is overconfident.
5) Using one wait policy for all names and regimes
The correct waiting tolerance in a sleepy mega-cap midday is not the correct waiting tolerance near a stressed close.
6) Blending different workflow latencies into one venue score
If one path is automated and another is human- or OMS-mediated, one venue-level average will tell you almost nothing useful.
Minimal implementation sketch
- Log every invite with high-precision timestamps and cluster IDs.
- Build a cluster detector to separate unique from duplicated opportunities.
- Train venue-level conversion models conditioned on cluster context and response latency.
- Add a hold-time opportunity-cost model tied to spread drift, deadline slack, and urgency.
- Replace raw invite-count venue ranking with expected-value ranking:
- saved spread if fill succeeds in time,
- minus probability-weighted hold and race-loss costs.
- Update TCA so missed races and delayed fills are first-class categories, not generic noise.
Bottom line
Conditional venues are valuable precisely because they let you search for large hidden liquidity without fully exposing intent. But that benefit comes with a specific modeling obligation:
an invite is an expiring option, not a soft fill.
If the execution stack forgets that, it will:
- overcount duplicated liquidity,
- underprice waiting,
- mis-rank venues,
- and pay catch-up slippage after race failures that look mysterious in ordinary TCA.
So the correct question is not:
“Did the venue invite us?”
It is:
“Given cluster overlap, response latency, venue rules, and current urgency, what is the expected economic value of acting on this invite relative to keeping the lit path alive?”
That is the difference between a conditional stack that genuinely sources block liquidity and one that merely manufactures stylish excuses for being late.
References
- BestEx Research — An Empirical Analysis of Conditional Orders: Which ATSs Prevail in Race Conditions and Offer Unique Liquidity? https://www.bestexresearch.com/insights/an-empirical-analysis-of-conditional-orders-which-alternative-trading-systems-prevail-in-race-conditions-and-offer-unique-liquidity
- euvenueguide — Dark Venues / Conditional Venues overview: https://www.euvenueguide.com/dark-venues
- Jeff Bacidore — Are Dark Pools All the Same? Form ATS-N Says "No": https://www.bacidore.com/post/are-dark-pools-all-the-same