Education
Fill ratio and rejection rate: the two numbers that reveal your counterparty
What they measure exactly, why a low rejection rate can be a bad sign, how both metrics are manipulated, and what to ask for so they mean something.
If you had to evaluate a counterparty with two numbers and nothing else, these would be them. And yet almost nobody asks for them, partly because they're easy to misread: there are setups where a low rejection rate is worse news than a high one.
What each one measures
Fill ratio is the percentage of orders that execute relative to the total sent. If you send 1,000 orders and 970 execute, your fill ratio is 97%.
Rejection rate is its complement from the counterparty side: the percentage of orders it rejects. In the example, 3%.
Up to here it's arithmetic. The usefulness is in the detail that almost never accompanies the figure.
The mistake of reading the number in isolation
A 3% rejection rate sounds acceptable. But not all rejections cost the same.
If your rejections are randomly distributed, the cost is mostly operational: you retry and move on. If they concentrate exactly when the price moves in your favor, the cost is economic and systematic: you're being rejected precisely on the trades that would have worked out for you.
That's the pattern to look for, and it doesn't show up in the average. A random 3% and an asymmetric 3% are completely different businesses with the same number in the deck.
Ask for this: the distribution of rejections segmented by price movement in the decision window, not just the aggregate percentage.
Why a low rejection rate can be a bad sign
Here's the counterintuitive part.
If your counterparty executes against the real market, some rejection is inevitable: the price moves, liquidity gets consumed, the upstream declines. A venue connected to Tier-1 banks rejects something under normal conditions.
A rejection rate persistently close to zero, with spreads better than the underlying market, usually means one of two things: either they're internalizing everything — which is legitimate but you should know it — or the price you see already includes a margin that absorbs the variation.
Neither is necessarily bad. What's bad is not knowing which.
Ask for this: what proportion of my flow executes against the market and what proportion is internalized?
How these metrics get dressed up
It's worth knowing the mechanisms, because they're legal and common:
Counting only accepted orders in the calculation. If the ones rejected for "invalid price" don't enter the denominator, the fill ratio rises on its own.
Excluding high-volatility windows. The average of a calm month says little about how you'll do on an employment print.
Aggregating all clients. A global fill ratio of 98% can coexist with 91% in your specific segment.
Measuring at the wrong point. The ratio between the aggregator and the upstream isn't the same as between your platform and the aggregator. Last-mile rejections may not appear.
None of these practices is fraud. All of them make the number they show you describe a reality that isn't yours.
What makes the metric useful
For these numbers to mean something, they have to come with four things:
- Segmentation by instrument. Your fill in EUR/USD and in an exotic cross have nothing to do with each other.
- Segmentation by session. Explicitly including news windows.
- Breakdown by upstream counterparty. If the aggregator has six sources, you want to know which one rejects.
- Your own flow. Not the aggregate of all the venue's clients.
With those four dimensions, the figure goes from being marketing to being an operational data point you can make routing decisions with.
The real cost of a rejection
A rejection isn't just an order that didn't execute. It's an order that executes later, at a different price.
In a flat market, the difference is negligible. In a moving one, it isn't. That's why the metric that really matters isn't the rejection itself, but the cumulative slippage attributable to rejections: how much the set of retries cost you, in pips.
Almost nobody publishes that number and almost nobody asks for it. It is, by a distance, the most informative of the three.
Ask for this: the average slippage on the orders that required a retry, compared to those that executed on the first attempt.
How to verify it yourself
You don't have to take anyone's word for it. With your own platform's logs you can build these metrics if you record, per transaction:
- Send and response timestamps
- Requested price and executed price
- Whether there was a rejection and how many retries
- The market reference price at that instant
If your counterparty gives you access to logs with that detail, you can audit its figures. If it doesn't, any number it shows you is an act of faith.
A venue with production parity in its sandbox also lets you measure this before signing: send test flow during a real news window and measure. It's the only way to know how it behaves when it matters.
Frequently asked questions
What fill ratio is good? It depends on the instrument, the session and the execution model, so any single figure is suspect. More useful than a threshold is consistency: a fill ratio that's stable between calm and volatile sessions says more than one that's high on average.
Are rejection and slippage the same thing? No. A rejection is your order not executing; slippage is it executing at a price different from the one requested. They're related because a rejection usually produces slippage on the retry, but you can have slippage without rejections and vice versa.
Can I compare the fill ratio of two providers? Only if both measure it the same way: same measurement point, same treatment of rejected orders in the denominator, same period and same instruments. In practice they almost never match, so an honest comparison requires you to measure it yourself with your own flow in a sandbox.
Is a provider that publishes its rejection rate more trustworthy? It's a good sign, but verify exactly what it's publishing. Publishing the global aggregate is easy; publishing it by upstream, by instrument and by session is what proves the data genuinely exists.
For the full evaluation framework: how a broker chooses liquidity. To understand where rejections come from: how liquidity aggregation works.
At Exura Prime rejection rates are available by upstream counterparty where Last-Look applies, and clients — who onboard and execute through us — have exportable logs with timestamps. Talk to the institutional team if you want to measure it in a sandbox before deciding.
