NOONOO TRADINGStart in the bot

Fill Rate — Why Counting Only Filled Orders Can Distort Performance

Limit orders offer lower fees and your chosen entry price. However, not every submitted order fills. Most people then calculate performance using only completed trades. At that moment, the record can become better or worse than the full picture; the direction of the distortion depends on which trades went unfilled.

Two Ways to Count Fill Rate

Fill rate is the proportion of submitted orders that actually execute. The calculation is one division, but the result changes substantially depending on the numerator and denominator.

Order Count vs. Quantity

One day's limit-entry orders:
  40 submitted · 26 filled · 14 canceled
  Order-count fill rate = 26 ÷ 40 = 65%

Counting quantity for the same day:
  Total submitted quantity 4.00 contracts
  Total filled quantity 2.08 contracts
  Quantity fill rate = 2.08 ÷ 4.00 = 52%

─────────────
Why the difference?
  · Partial fills.
  · Even if only 0.04 of 0.10 fills,
    it counts as one filled order.

→ The larger the orders, the more the numbers can diverge.

An order-count fill rate of 65% and quantity fill rate of 52% describe the same day differently. The first asks how often you entered; the second asks what percentage of planned size you actually held. For strategies whose performance depends on position size, use quantity-based fill rate. See partial fills for why they occur.

Switching to Market Orders Gives 100% Fill Rate in This Example

The easiest way to raise fill rate is to use market orders. The central lesson of this metric is that doing so is not automatically the answer.

The Same Entry, Two Methods

Margin $40 · 20× leverage → Notional $800
Assumed fees: Taker 0.05% · Maker 0.02%

Market order (taker)
  One way: 800 × 0.05% = $0.40
  Round trip = $0.80
  Assumed fill rate 100%

Limit order (maker)
  One way: 800 × 0.02% = $0.16
  Round trip = $0.32
  Fill rate 65%

─────────────
Saving per trade = 0.80 − 0.32 = $0.48
26 filled trades × 0.48 = $12.48

On fees alone, limit orders are clearly better. Saving $12.48 a day becomes substantial over a month, and the difference grows with trade count. See trading frequency and fee drag for that cumulative effect. The problem is that the calculation looks only at the 26 filled orders. The remaining 14 disappear from it entirely.

Filled Orders Are Not a Random Sample

This is the real reason fill rate belongs in performance analysis. A buy limit placed below the current price fills only if price falls to it. Filled trades therefore automatically include more cases where price initially moves against the intended direction.

The Same 100 Signals, Executed Two Ways

If every signal were entered at market:
  55 wins / 45 losses → Win rate 55%

If only 65 limit orders filled:
  Among 65 fills: 30 wins / 35 losses
  → Win rate 46%

The 35 unfilled orders:
  25 would-be wins / 10 would-be losses
  → Hypothetical win rate 71%

─────────────
The mechanism:
  Trades that immediately move in your direction
  never fall to the limit and remain unfilled.
  = Potential winners are filtered out first.

The numbers are hypothetical illustrations, but the selection mechanism is real: price reaching your limit carries information that the instrument moved against your intended direction at that moment. The idea that getting filled is itself information is also discussed in the limit-order queue.

This explains why “fees fell after switching to limits, but performance worsened” is a common outcome. The strategy may not have worsened; the sample of trades changed.

Compare Savings with Missed Opportunities

Both figures must be placed in the same table to judge the outcome. Looking at only one side always favors limits.

One-Day PnL Comparison

What limits gained:
  Fee savings +$12.48

What limits missed:
  Among 14 unfilled orders,
  10 would have won if entered at market.
  Assumed average +$12 each
  = +$120 forgone.
  (But four losses of −$9 were avoided: +$36.)

Net missed opportunity = 120 − 36 = −$84

─────────────
Total:
  +12.48 − 84 = −$71.52
  Missed opportunity is 6.7 times the fee saving.

The reverse can also happen. If most unfilled trades would have lost, limits filtered out losses, making a low fill rate an advantage. Only records can tell you which case applies.

What Must Be Recorded to Measure Unfilled Orders?

Unfilled orders often leave no trace in trading history because that history contains only fills. Record them separately.

Fields for Each Order

At submission:
  · Time, direction, and limit price.
  · The best bid and ask at that moment.
  · Submitted quantity.

Outcome:
  · Filled, partially filled, or canceled.
  · Seconds until execution.
  · Filled quantity.

If canceled, also record:
  · Price 10 minutes after cancellation.
  · Price 60 minutes after cancellation.

─────────────
The question these records help answer:
  “Was the trade I did not enter
   a good opportunity?

The final two price records are central. Without post-cancellation prices, the guide notes that the counterfactual outcome cannot be assessed and fill rate remains just a number. See trade sample size for how many observations are needed to make comparisons meaningful.

Also record the quotes at submission. Otherwise, you cannot reconstruct how aggressive your limit was. The same limit price can have very different fill difficulty depending on whether the spread was wide or narrow. The cost of that width is explained in spread costs.

What Has Changed When Fill Rate Moves?

Fill rate varies with market conditions. If it changes suddenly, separate the possible causes.

Starting from a 65% Fill Rate

If it rises to 85%:
  · Higher volatility sweeps through more prices.
  · Your limit becomes less favorable.
  · Spreads widen.
  → More fills, but worse entries.

If it falls to 40%:
  · The market moves in only one direction.
  · The book becomes thinner.
  · You increased order size.
  → Signals occur, but you cannot enter.

─────────────
What to examine together:
  Fill rate + Average waiting time for fills.
  The guide associates both changing with market factors,
  and fill rate alone changing with your settings.

A falling fill rate after increasing size is a common trap. If capital increased and you doubled quantity but performance worsened, execution rather than the strategy may be responsible. See order size and market impact.

Unfilled orders clustering in a particular time window are also a clue. Practical causes are listed in unfilled limit orders, while Post Only, Reduce Only, and IOC explains how order options affect fills.

Where Backtests and Live Trading Diverge

Historical tests often assume an order fills when price touches its limit. In reality, reaching that price does not fill your order unless the resting quantity ahead of you is consumed.

What Gets Inflated in Testing

Test assumption:
  Price touches the limit → 100% filled.

Live trading:
  Price touches, but:
    · It immediately reverses.
    · Quantity remains ahead of you in the queue.
  → 65% filled.

─────────────
If the missing 35% is concentrated in winners,
tested and live results diverge structurally.
(The strategy itself need not be the cause.)

One way to narrow the gap is to use conservative fill assumptions in testing: require price to move one tick beyond the limit instead of merely touching it. Other commonly overlooked assumptions are covered in backtesting. Trusting a win rate calculated from a filtered sample creates the same kind of problem discussed in signal accuracy and base rates.

Summary

Fill rate = Filled ÷ Submitted; counts and quantities differ.
Use quantity-based measurement when partial fills are common.
The example assumes market orders raise fill rate to 100%.
That is not automatically the answer because of fee differences.
Filled orders are not a random sample.
Trades moving immediately in your favor are often the first to remain unfilled.
Limit-order performance can therefore look worse.
Compare savings and missed opportunities in the same table.
Record prices after cancellation to assess the outcome.
Record quotes at submission too.
Separate fill-rate changes into market factors and your settings.
Use conservative fill assumptions in testing.

The central point is that fill rate describes the sample of trades as well as execution. A 65% fill rate means 35% is absent from the performance record. Without understanding those missing trades, it is difficult to interpret the win rate of the remaining 65%.

Caution

The fill rates, fee rates, win/loss counts, and PnL amounts are hypothetical examples illustrating the mechanism, not actual measurements from an exchange or account. Maker and taker fees, partial-fill handling, queue-priority rules, and the available history for unfilled orders vary by exchange and account tier. Check the documentation for your exchange and measure directly with small amounts. Leveraged trading can lose all principal, and investment decisions and their consequences remain your responsibility.

NOONOO TRADING invites you to follow live trading in our free chat.

Start in the bot

📈 OKX trading fee discount for new registrations

Register for the OKX Fee Discount →