Liquidity Detection and Sourcing: Finding Size That Isn't Displayed
The displayed book is the thinnest layer of liquidity. Every deeper layer is accessible, but you pay in the same currency: information. How to find hidden size, choose dark pools on data, and design sweep logic that doesn't leak your hand.
You need to buy 200,000 shares. The lit book shows 5,000 at the offer. The size is clearly out there somewhere: your broker’s sales trader mentioned “lots of interest” at the offer, the dark pool AXE feeds are showing 50,000-share blocks, and the morning’s options activity suggested a large institutional flow.
The question: how do you get those 200,000 shares filled without paying through the nose and without showing your hand to the entire market?
That’s the division of labor between detection and sourcing. Detection answers “where is the size hiding?” Sourcing answers “how do I access it without spooking the market?” Done well, you fill at or near the mid with minimal impact. Done badly, you push the price up 30 cents and still don’t finish. And running through the whole subject is one law of exchange: every layer of liquidity below the displayed book is accessible, but the currency you pay isn’t money — it’s information. Every probe teaches the market a little more about you. This article is about managing that information budget, top to bottom.
Harris (2003, Ch. 22) treats “liquidity beyond the displayed book” as the central problem of modern market microstructure. The displayed book is the thinnest layer; below it sit dark pools, internalizers, and hidden orders. Navigating those layers is the buy-side trader’s job description.
The Five Layers
For a US large-cap, liquidity stacks into roughly five layers, each one larger and harder to reach than the last.
On top sit the lit exchanges — the displayed books on NYSE, Nasdaq, CBOE, IEX, and the rest. It’s the only layer you can see directly, and it’s the thinnest: typically 5-20% of the truly available liquidity at any moment.
Below that, dark pools (ATS). About 35-40 operate in US equities — some large (Goldman’s Sigma X, MS Pool, Citadel Connect), some small — together handling roughly 13-15% of US equity volume. Below them, the wholesalers: retail internalizers (Citadel Securities, Virtu) filling retail market orders against their own inventory. Not institutional flow, but it’s where retail-sized orders go to die quietly.
The fourth layer is the block desks. Major brokers match large institutional orders bilaterally; the trades print to the tape but never touch a displayed book. And at the bottom, hidden orders: icebergs on lit exchanges, hidden orders inside dark pools, plus “reserve” functionality some pools offer that mimics lit icebergs.
Sum the layers and the “real” liquidity in a liquid large-cap can run 5-10x the displayed book at any moment. The buy-side question is always the same: how much of it is accessible, at what price, and at what cost in leaked information.
Dark Pools Are Not One Thing
The 35-40 dark pools differ far more than their names suggest: by operator (bank-affiliated Sigma X and MS Pool, agency venues like Liquidnet and BIDS, independents like Citadel Connect and Virtu), by matching logic (continuous for most, periodic auctions for some, mid-point-only for others), by fee structure (maker-taker, taker-maker, no-fee), by subscriber base — some pools are full of HFT market makers, others carry mostly long-only institutional flow — and by information policy, with some publicly disclosing their matching logic and anti-gaming protections and others saying nothing.
So you don’t pick pools by reputation; you pick them by data, and specifically by four numbers that interlock. Fill rate tells you whether the pool gives you size at all: what fraction of orders routed there actually fill? A low fill rate means the pool’s liquidity is selective — it matches you only when the trade favors its subscribers. Price improvement tells you whether the fills are any good: average improvement versus the NBBO? Most pools advertise mid-point matching; actual fills can land better or worse than mid depending on the pool’s logic. Markouts tell you what happens after the fill: if the price consistently moves against you (negative markout), you’re trading with informed counterparties and the fill itself is bad news. And the leakage test tells you what merely asking costs: if you ping pool X and the lit offer widens 0.5 cents within 100ms, the pool is leaking you.
Most execution platforms compress these four into a per-pool “toxicity score” that feeds straight into the SOR’s routing: toxic pools get less flow, clean pools with good fills get more. That score is the ledger for the information budget this article keeps talking about.
Anti-Gaming: Because the Other Side Really Is Shooting at You
Toxicity is not an abstract risk. Sophisticated market makers actively detect SOR pings and exploit them. The classic attack chain:
- The SOR pings dark pool X for a buy order
- A market maker on the lit exchange detects the ping (latency arbitrage)
- The market maker buys on the lit exchange and sells into the dark pool
- The SOR fills at the marked-up price
This is latency arbitrage, the dark side of fragmented markets. IEX was founded specifically to fight it — the 350-microsecond speed bump is the signature — and other venues have since added their own countermeasures.
On the SOR side, every defense is a variation on “make your behavior unlearnable.” Set a minimum size threshold and don’t ping pools for orders below it (say, 500 shares) — tiny pings are more likely to be the other side’s HFT probes anyway. Randomize timing: never ping all pools simultaneously; stagger with random delays. Randomize sequencing: don’t tour the pools in the same order every time. Route conditionally: a pool whose recent fills came back toxic gets cut off. And use IOC orders with size constraints to probe pool behavior without committing.
None of it is free: the deeper you hide, the more legitimate liquidity you miss. Most SORs accept a 10-15% fill-rate reduction in exchange for less adverse selection — the same information-versus-fills trade, played on defense this time.
The Sweep: Taking a Price Level Clean
When you do commit, the concrete move is often a sweep: orders to multiple venues simultaneously, capturing all available liquidity at a price level in one shot. For a marketable buy, the sweep takes every displayed offer across the lit exchanges up to a price limit, plus hidden offers in dark pools.
There are only four parameters: how many shares per venue (sweep size), the worst price you’ll pay (sweep limit), time-in-force (IOC or day), and routing scope (dark pools and internalizers in or out). For a 50,000-share buy with a $50.05 limit, a typical sweep: 10,000 to NYSE (largest displayed size), 10,000 to Nasdaq, 10,000 to CBOE, 10,000 to an inverted-fee venue (where the taker collects a rebate), plus IOC mid-point pings of 5,000 each to three dark pools, with the remainder held back. If the combined liquidity is there, the order fills; if not, you get partials and the rest comes home.
def sweep(buy_size, max_price, lit_venues, dark_venues):
"""Sweep lit venues and ping dark pools."""
filled = 0
remaining = buy_size
# Lit sweep
for venue in lit_venues:
venue_size = min(remaining, 5000)
fill = venue.send_ioc('BUY', venue_size, max_price)
filled += fill
remaining -= fill
if remaining <= 0:
break
# Dark pool ping
for pool in dark_venues:
pool_size = min(remaining, 2000)
fill = pool.ping_ioc('BUY', pool_size)
filled += fill
remaining -= fill
if remaining <= 0:
break
return filled, remaining
That’s a toy. Real implementations size dynamically off displayed liquidity, randomize pings for anti-gaming, and pick venues toxicity-aware — everything from the previous two sections has to live inside that loop.
Note that ping size is itself information. Ping a pool with 100 shares and you look like a small trader; ping with 50,000 and you’re broadcasting a large order. Hence: break big orders into multiple pings, randomize the timing, use different pools for different slices. The cost is more round trips and more complexity; most institutional algos pay it.
AXE and IOI: Signals the Broker Hands You
Not all hidden liquidity has to be dug up — some of it walks over and introduces itself. An AXE is trader slang for an order a desk is eager to get done; brokers publish indications of interest (IOIs) about the large orders they’re working. One looks like: “BUY 50K XYZ @ 49.95 or better, working 30 min.”
The thing to internalize is that an IOI is a signal, not an offer. It means “if you have contra-side interest at this price or better, we might be able to cross” — a way for the broker to source liquidity without putting the order on a book. For the buy side, IOIs are a free option: most are noise (stale or low-quality) and can be ignored; when several brokers show AXEs on the same side, that’s a directional signal; and when you happen to hold contra-side interest, you can respond and cross at the indicated price.
The risk is that IOIs are sometimes fishing expeditions — the broker has no real order and is probing for contra-side interest. Respond and you’ve leaked yours; the broker may trade ahead of you. An honest IOI ecosystem is valuable and a dishonest one is a waste of time, and telling them apart is almost entirely experience: after a few months you know whose AXEs convert and whose never do.
The Block Desk: The Exit for Real Size
Once an order reaches $10M+ (or roughly 5%+ of ADV), everything electronic starts to run out of road — dark pools plus lit exchanges can’t absorb that size without significant impact. The exit is high-touch: the block desk.
A block desk is a sales team inside a broker that matches large institutional orders bilaterally. The salesperson calls 5-10 large clients — pension funds, sovereign wealth funds, asset managers — and asks: “Would you sell 200,000 shares of XYZ at $50.00?” When a match is found, the trade prints to the tape without touching the lit or dark book; the price is negotiated bilaterally, often at the mid or inside the spread. Both sides save the spread and the impact. Block trades are the closest thing execution has to a free lunch — and the price of admission is trust: both sides have to believe the counterparty is real and the price is fair.
There’s explicit machinery behind the trust. A major broker’s block desk maintains a database of “natural” buyers and sellers — institutional accounts that have shown interest in specific names. A client wants 200,000 XYZ; the salesperson queries the database for natural sellers, calls three to five, gauges interest, matches. The economics: the desk typically charges 1-3 cents per share, comparable to electronic execution, but the buyer gets price improvement and the seller dodges market impact. The desk’s real asset isn’t the matching — it’s the database. A small desk with weak relationships can’t find blocks; a bulge-bracket desk with deep relationships finds them routinely.
So the right buy-side posture is relationships with multiple block desks and flow shared proportionally: give everything to one desk and it can’t match it all; withhold everything and the relationship dies. Block desks have lost market share as electronic trading improved, but above 5-10% of ADV they remain the best execution option available.
The Closing Auction: The Underrated Layer
One more liquidity source gets routinely overlooked: the closing auction.
Most exchanges run a single-price cross at the close. The auction exists precisely to concentrate liquidity for end-of-day mark-to-market and benchmark rebalancing, so its depth dwarfs anything available intraday. You submit an order with a limit price during the pre-close window (cutoff times vary by exchange, roughly within the final ten minutes), the exchange computes the price that maximizes executable volume, and every matching order fills at that one price.
For a 200,000-share order, the closing auction can fill the whole thing at a single price within 0.5 cents of the last continuous trade — no impact, no spread cost, just the closing print. The price you pay is a new source of uncertainty: the imbalance. Exchanges publish buy/sell imbalance data in the final minutes before the close; if a large imbalance sits against you, the clearing price will be ugly. The professional move is to check the imbalance before submitting and set the limit accordingly. And remember that a large order moves the clearing price itself, and the imbalance can flip in the last 30 seconds — the auction isn’t free, it just reshapes the risk.
Conditional Orders: Resting Until Conditions Align
A more advanced tool is the conditional order: instead of a market or plain limit order, you send an order that executes only when specified conditions are met — a time window (only between 10:00 and 15:00), a price condition (only if the mid is above $X), a volume condition (only if ADV exceeds a threshold), a reference-price condition (only at VWAP or better).
It solves the problem of wanting to express a strategy without committing to immediate execution: the order rests at the venue until conditions align, then fills. Most dark pools support conditional orders; lit exchanges support them only patchily. For a buy-side trader working large orders over long horizons, fluency with conditionals is a genuine edge — you’ve written the patience into the order itself instead of relying on a human to hold the line.
HFT: Source of Your Tight Spreads, and Your Most Capable Adversary
Modern liquidity detection has a complicated relationship with high-frequency trading firms, and it can’t be avoided.
HFT firms are the largest providers of displayed liquidity in US equities: they post tight quotes, collect the maker rebate (or pay the taker fee), and earn the spread on most round trips. Lit spreads are tight because they competed them down — which for the buy side is mostly good news. Cheap crossing, immediacy on demand.
The tension is that HFT firms are also the most sophisticated detectors in the market. They see your SOR pings, your order patterns, your algo’s habits, and they trade ahead when they spot a slow institutional order — the latency-arbitrage chain from earlier. The countermeasures are IEX-style speed bumps, smaller and more randomized child orders, and dark pools that explicitly exclude HFT. None is perfect. The buy side’s exposure to HFT detection is a tax on liquidity detection that never shows up in any benchmark.
Their detection toolkit is worth knowing because liquidity-seeking algos use the same one: iceberg refreshes (displayed size gets hit and instantly replaced — an iceberg just surfaced), quote changes, trade prints (the contra side of a print may be a hidden order that just filled), and order-book pressure (a run of small orders hitting the bid suggests an iceberg in the queue). Microsecond-latency seeking is HFT’s home turf; institutional algos don’t compete on raw speed but on statistical pattern recognition — smart detection rather than fast detection.
When This Is Worth Doing at All
Liquidity detection is not a default behavior. It has a clear domain, and four variables draw its boundary.
Order size relative to ADV: above 5%, the displayed book cannot fill you and you must dig; below that, the book suffices and digging just spends information for nothing. Spread width: at a 1-cent spread, mid-point fills save 0.5 cents a share and are worth chasing; at 0.1 cents, the savings are noise — don’t bother. Dark depth: large-cap US names have deep dark liquidity, small-caps essentially none. And time: detection is patient work. With a 5-minute deadline, the market order is the right answer; in a fast market, with spreads blown out and dark pools pulling liquidity, detection simply stops working.
Three examples show how the variables combine. First: large-cap, normal conditions — buy 200,000 shares, ADV 4M. The book shows 8,000 at the offer, two brokers’ AXEs show 50K blocks, pool X shows 30K at mid. The play: post 50,000 passively at the touch, ping pool X for 30,000 (likely mid fill), respond to the broker AXEs for the remaining 120,000. Full fill inside 15 minutes at mid + 0.5 cents average — every layer used, a little information spent at each, none overspent.
Second: mid-cap, wide spread — buy 50,000, ADV 500K, spread 5 cents, book shows 2,000 at the offer, dark AXEs empty. The play: sweep the displayed 2,000, then post 5,000 at the bid to catch sellers coming down, and grind. Maybe 30,000 fills in an hour; the rest is opportunity cost. Mid-caps don’t have many layers to mine — patience is the only lever.
Third: small-cap, post-halt — buy 30,000, ADV 100K; the stock reopens with a 50-cent spread and 500 shares displayed. The play: don’t trade. Wait for the spread to narrow, or work the order slowly across the day. Detection can’t conjure layers that don’t exist.
Failure Modes, and How to Notice You’re In One
The failure modes of this craft all have names. Detected by HFT: your pings get recognized, the market trades ahead, your fills degrade. Adverse selection: the liquidity you found was informed — you fill at mid and the stock moves against you, because the seller knew something. Empty pools: the ping finds no contra-side interest and you’ve burned a round trip. Stale quotes: the book you act on isn’t the book you saw; the levels are gone. And the root failure, information leakage: your routing patterns get read and your intent inferred.
You notice failure through reconciliation, not intuition. Monitor markouts by venue and route less to whoever consistently marks out negative. Investigate fill-rate drops. If overall execution quality decays week over week, recalibrate the detection logic. Update the toxicity scores monthly and drop the toxic pools. Dark fills that consistently beat expectations are an alarm too — it means you’re routing too much there. When selecting a broker, use all of this as the interview: ask for their SOR toxicity data (if they don’t have it, something’s being hidden), ask whether their pool selection prioritizes fill rate or fill quality, ask about block desk access (for large orders it matters more than the SOR), and test with small orders before committing size — never debut a $50M order through an unproven router.
Most shops have this monitoring. Most traders don’t read it carefully enough. The gap between those two sentences is the gap between an information budget that gets accounted for and one that quietly bleeds out.
References
- Harris, L. (2003). Trading and Exchanges: Market Microstructure for Practitioners. Oxford University Press. Ch. 21-22. ISBN: 978-0-19-514470-3.
- Almgren, R., & Chriss, N. (2000). “Optimal Execution of Portfolio Transactions.” Journal of Risk, 3(2), 5-39.
- Bertsimas, D., & Lo, A. W. (1998). “Optimal Control of Execution Costs.” Journal of Financial Markets, 1(1), 1-50.