← All postsProduct

Smart order routing: VWAP, TWAP, and beyond

When a fintech mints $5M of AAPL through Flo, the broker doesn't see one $5M order. It sees 47 child orders sliced across 11 venues, optimized to keep your fill price inside 5 bps of arrival.

Flo Team
Flo Finance
5 min read
Smart order routing: VWAP, TWAP, and beyond

A few weeks ago I watched a $5M AAPL mint from a customer clear in 4 minutes 12 seconds. 47 child orders across 11 venues. Realized fill came in 2.3 bps below arrival on a day where realized volatility was 40% above average. The partner's user saw a single token land in a wallet. The broker saw 47 line items hitting the tape. That gap, between what the user sees and what the market sees, is the part of our infrastructure I think about most.

A retail trade goes one place. The broker's best venue at the moment of fill. A $5M institutional mint cannot. Send a $5M market order to a single venue and you eat your own slippage. Smart order routing is what stands between the partner's mint call and the broker. It's the part of the stack that decides whether the partner looks good to their customer.

The naive approach

Send the entire order to the broker's primary venue. Take the fill. Tell the user. Works at $50,000. Doesn't work at $5M. The market reacts, the fill price drifts, and the partner pays 30+ bps of impact on a trade that should have cost 5.

We don't do this.

What we do instead

Every mint above a $250K threshold goes through a routing layer that does the following.

  1. Sizes child orders against current liquidity at each accessible venue. NYSE, Nasdaq, BATS, ARCA, IEX, EDGX, plus dark pools.
  2. Slices time-weighted across a target horizon. Usually 60 to 300 seconds, depending on the order's relative size to ADV.
  3. Selects between VWAP (volume-weighted) and TWAP (time-weighted) based on the volatility regime.
  4. Routes opportunistically into dark pools when the lit book signals adverse selection.
  5. Reconciles every fill back to a single weighted-average price the partner sees.

Why VWAP isn't always right

VWAP is the textbook answer for institutional execution. It works when the day's volume distribution is reasonably predictable. It fails on volatile open and close prints, and it fails when the order is large relative to the residual day's volume. I default to TWAP-with-adaptive-pacing for the first thirty minutes after open and the last fifteen before close, and switch to VWAP in the middle of the session. I might be tuning the cutover wrong; this is the sort of thing I expect to revisit after a few hundred more institutional fills.

The benchmark that matters

I benchmark against arrival price. The mid quote at the moment the partner called mint. We target landing within 5 basis points of arrival on 95% of trades and within 10 bps on 99%.

I benchmark against arrival, not VWAP. The partner doesn't care about VWAP. They care about the price their user saw at the moment of click.

What I don't do

I don't internalize. Every fill goes to a real venue. I don't take principal risk against the partner's flow. The price I report is the price I paid, plus the published fee schedule. That's intentional. If we ever start internalizing, we become a counterparty, and the trust model changes in a way I don't think the category can afford.

Smart order routing is the boring part of execution. Done well, the partner never has to think about it. That's the goal.

Written by Flo Team, Flo Finance
More posts →