Liquidity-Seeking Algorithms

A liquidity-seeking algorithm decides where, when, and how to expose a child order when the best execution venue is uncertain. It differs from a simple router that always takes the best displayed price and from a schedule that follows a fixed participation curve. Its job is to search for executable liquidity while controlling spread cost, queue risk, information leakage, fees, and completion risk.

The critical distinction is between displayed liquidity and accessible liquidity. A large best offer might disappear before a child order reaches it; a midpoint venue might contain hidden liquidity but offer no queue transparency; an apparently cheap maker rebate can be outweighed by adverse selection.

Define the decision and its constraints

At each decision point, the policy chooses an action \(a\): venue, order type, limit price, size, and lifetime. It observes state \(s\): consolidated and venue quotes, depth, recent flow, queue estimate, fees, fill history, remaining parent quantity, and deadline. The action should maximize expected net value subject to hard restrictions:

\[ \max_a E[\text{price improvement}+\text{rebate}-\text{impact}-\text{markout} -\text{fallback cost}\mid s,a]. \]

ConstraintExampleReason
Limit priceNever buy above limitClient protection
ParticipationAt most 10% venue volumeReduce footprint
ExposureMax resting sharesControl stale risk
Venue eligibilityApproved venues onlyOperational/regulatory
Message rateCancel/replace ceilingAvoid abuse and throttling
DeadlineEscalation routeCompletion governance

These constraints belong outside an estimated value model. A model can be uncertain; a limit-price breach is unacceptable.

Estimate accessible liquidity

A venue score should be conditional on the proposed order, not an average historical fill rate. Useful components include probability of fill within lifetime, expected quantity, expected price improvement, fee/rebate, and signed post-fill markout.

def expected_passive_value(fill_prob, size, improvement_bps,
                           rebate_bps, markout_bps, fallback_bps):
    fill_value = size * (improvement_bps + rebate_bps - markout_bps)
    miss_value = size * fallback_bps
    return fill_prob * fill_value - (1.0 - fill_prob) * miss_value

The sign convention should make a larger score better for both buy and sell logic. Model fill probability by queue position, price level, order lifetime, venue, spread, depth, volatility, and recent trade/cancel intensity. With only aggregated market data, queue rank is latent; use conservative assumptions and calibrate against actual order reports. The mechanics are closely related to inventory-risk market making.

Hidden liquidity and midpoint venues

Dark pools and midpoint books can provide price improvement and reduce displayed footprint, but a fill can reveal that the counterparty was informed. Evaluate each venue using conditional outcomes: fill probability is not enough. A high fill rate paired with unfavorable five-second markouts is evidence of adverse selection.

Avoid naïvely pinging every venue with tiny orders. It can create signaling costs, consume message budgets, violate venue rules, and produce a misleading backtest if historical hidden fills are assumed observable. Use minimum sizes, throttles, and cooldowns, and log every exposure decision.

Venue conditionCandidate responseMetric to monitor
Deep lit queue, low toxicityRest passivelyQueue-adjusted fill probability
Tight spread, urgent parentTake displayed liquidityEffective spread and impact
Midpoint fill improves priceProbe within limitsPost-fill markout
Rejections/cancels riseReduce order lifetimeReject rate and stale exposure
Price moves through limitCancel/escalateLimit compliance

Explore safely and avoid selection bias

Routing models need data on actions not always chosen. Pure exploitation creates a feedback loop: an underused venue has little data and stays underused. Controlled exploration can solve this, but only inside low-risk slices and with randomization logged at decision time. Contextual-bandit methods are possible, provided off-policy evaluation accounts for the probability that each action was selected.

Historical fills are selected outcomes. Comparing markouts only for filled passive orders ignores the opportunity cost of nonfills and the fact that difficult states may route aggressively. Include the fallback action and matched controls. Randomized experiments with small allocation weights are more reliable than retrospective claims of venue superiority.

Architecture and real-time controls

Separate market-data normalization, feature generation, value estimation, policy constraints, order state, and TCA. The order-state service must be idempotent and reconcile acknowledgments, fills, cancel confirmations, and exchange busts. A delayed cancel can leave more resting exposure than the policy believes.

ComponentRequired audit record
Feature serviceInput timestamp and data version
Value modelModel version and predicted outcome
PolicyCandidate actions and rejected constraints
RouterChild ID, venue response, latency
TCABenchmark, fills, fees, residual markout

Kill switches should respond to stale market data, crossed quotes, abnormal rejects, participation breaches, or order-state reconciliation loss. Default to a safe schedule or pause rather than continuing with stale estimates.

Evaluate the whole parent order

Route-level fill statistics can improve while parent-order implementation shortfall worsens because missed passive shares are forced across later. Evaluate the full parent against a benchmark, including fees and opportunity cost. Segment by urgency, size/ADV, venue mix, liquidity, and volatility; compare with a baseline from execution algorithms.

Use transaction cost analysis to close the loop, then revise estimates only with point-in-time data. A liquidity seeker is an adaptive decision system, so reproducible state and action logs are non-negotiable.

Key takeaways

  • Liquidity seeking optimizes net liquidity—not displayed size or fill rate alone.
  • Score venues using fill, price improvement, fees, markouts, and the cost of fallback execution.
  • Keep hard client, participation, message, and exposure limits outside learned routing models.
  • Explore venue alternatives only through logged, bounded experiments that support causal evaluation.
  • Judge success at the parent-order level with benchmark-consistent TCA and complete order-state audit trails.
#liquidity seeking #smart order routing #execution #market microstructure #Python