DEV Community

Jack Chen
Jack Chen

Posted on

The crossover taker share: why the cheaper fee table is often the more expensive venue

Every "Exchange A vs Exchange B fees" comparison does the same thing: it puts two maker/taker pairs side by side and declares the smaller maker number the winner. That comparison is only valid for a trader who never sends a market order.

What you actually pay is one blended number:

effective rate = total fees paid / total notional traded
Enter fullscreen mode Exit fullscreen mode

Tier, token discount, fee share — everything else is a lever on that one number. And the blend has a property the fee tables never print: two schedules cross.

Measure it, don't estimate it

If you have your fills, compute it directly instead of trusting the sticker:

def effective_rate(fills, maker, taker):
    """fills: [(notional, is_maker), ...]"""
    fees = sum(n * (maker if m else taker) for n, m in fills)
    volume = sum(n for n, _ in fills)
    return fees / volume

fills = [(50_000, True), (30_000, False), (20_000, False)]
print(f"{effective_rate(fills, 0.0002, 0.0005):.4%}")  # 0.0350%
Enter fullscreen mode Exit fullscreen mode

Where the schedules cross

Two representative standard-tier schedules:

venue maker taker
A 0.0200% 0.0500%
B 0.0160% 0.0600%

B has the better maker sticker — 20% lower. Set the two blends equal and solve for taker share t:

A = (0.000200, 0.000500)
B = (0.000160, 0.000600)

blend = lambda s, t: s[0] * (1 - t) + s[1] * t
(mA, kA), (mB, kB) = A, B
t_star = (mA - mB) / ((mA - mB) + (kB - kA))
print(f"{t_star:.2%}")  # 28.57%
Enter fullscreen mode Exit fullscreen mode
taker share A effective B effective cheaper
0% 0.0200% 0.0160% B
10% 0.0230% 0.0204% B
28.6% 0.0286% 0.0286% tie
55% 0.0365% 0.0402% A
80% 0.0440% 0.0512% A

Below 28.6% taker, B's better maker rate wins. Above it, A wins and the gap widens fast. At 55% taker on $3,000,000/month: A costs $1,095, B costs $1,206 — $1,332 per year handed over for picking the venue with the "cheaper" fee table.

Why this bites

Your taker share is not what you think it is. Count the is_maker flag in your own fill log rather than your recollection. Stop-markets that trigger, liquidations, and every get-me-filled click are taker fills, and traders who describe themselves as "mostly limit orders" routinely land in the 40–60% band once those are counted. That is on the far side of most crossovers.

Where this breaks

Three honest limits:

  • t* assumes fixed schedules. Cross a volume tier on either venue and it moves — recompute monthly, not once.
  • Funding and slippage are excluded, and both are usually larger than the 0.4bp being argued over. A venue that wins on t* can still lose on a thinner book.
  • If your taker share swings month to month, the cheaper venue swings with it. At that point the fee table isn't the deciding variable at all, and you should optimise order routing instead of venue choice.

The full derivation of the blend, plus the three levers (tier, token discount, fee share) that stack on top of it, is written up at effective fee rate explained. The schedules used above come from a small public repo I keep: crypto-exchange-fee-data.

I run an independent site on this topic and am not affiliated with any exchange. Figures are representative standard-tier examples, not guarantees — check your own tier. Not financial advice.

Top comments (0)