The taker fee is not a flat rate. Per share it is a parabola peaking at 50¢ and falling toward both tails. But expressed as a percentage of your stake it becomes monotonically decreasing — the same fee, two bases, two opposite intuitions. Mixing them up will flip the sign of a strategy's expected value.
p(1−p) maxes at 0.25 when p = 0.5 and falls to zero at both ends.
So the per-share fee is a downward parabola with its peak dead centre.
| Fill price | Per share | Per 100 shares |
|---|---|---|
| 0.50 | 1.75¢ | $1.75 |
| 0.70 | 1.47¢ | $1.47 |
| 0.90 | 0.63¢ | $0.63 |
| 0.95 | 0.33¢ | $0.33 |
What leaves your account is stake = p × shares, so:
| Fill price | Per share | % of stake | |
|---|---|---|---|
| 0.10 | 0.63¢ | 6.30% | worst as a share of money |
| 0.50 | 1.75¢ | 3.50% | worst per share |
| 0.90 | 0.63¢ | 0.70% | |
| 0.95 | 0.33¢ | 0.35% | cheapest on both bases |
Both have p(1−p) = 0.09, so both pay 0.63¢ a share. But one cost you 10¢ of capital
and the other 90¢ — the same fee spread over very different bases.
So "50¢ is dearest" is only true per share. If your question is "what fraction of my money was taken", the answer is the cheaper you buy, the harder you are hit, linearly.
| Your question | Base |
|---|---|
| How much more edge do I need to break even? | per share — payout is $1 a share, so edge is per share too |
| What fraction of this money went in fees? | % of stake |
| Does my gross edge cover costs? | per share — both sides must match |
"My edge is 2%, the fee is only 1.75%, so I profit" is probably wrong: that 2% is very likely percentage points per share, while 1.75% may be a share of stake. They cannot be subtracted.
Everything on this site uses percentage points per share (pp): at p≈0.5 the fee is 1.75pp. Confirm both sides share a base before subtracting — this is not pedantry, it is an error that flips signs.
It is not in the documentation. I recovered it by reconciling real fills: take one market-making wallet's flow for a full day, predict the rebate the formula implies, and compare with what landed the next day.
| Amount | |
|---|---|
| Predicted from the formula | $45.23 |
| Received next day | $46.58 |
| Agreement | 97% (the gap is 43 minutes at the start I did not capture) |
An independent second check: a fill with a notional of $18 cost $18.6552 —
a fee of $0.6552, which 0.07 × (1−0.48) × 18 reproduces to the cent.
The CLOB config exposes maker_base_fee / taker_base_fee showing 1000.
That is a raw configuration field, not a rate. Do not compute with it.
Same family as the rest of the API traps: a field existing is not the same as it meaning what you assume.
Makers pay nothing and, when filled, receive about +0.25¢/share (20% of the taker's fee). It looks free. It is the venue buying liquidity — and what the maker pays instead is adverse selection: getting filled is usually the moment you would rather not have been.
How large? On crypto up/down: 47 same-shape wallets, median −0.74¢/share. A 0.25¢ rebate does not cover it. "Zero fees" is the entry ticket, not the profit.
| Consequence | Note |
|---|---|
| Trading the tails costs less per share | 0.33¢ at 0.95 is a fifth of the cost at 50¢ |
| But tails are usually priced better too | cheap to trade is not the same as easy to beat |
| Buying very cheap is taxed hardest | 6.3% of stake at 0.10 — casino territory |
| Post rather than take when you can | saves the entire fee; costs you fill certainty |
| Compute the cost line before the strategy | if gross edge cannot clear 1.75pp + spread + slippage, nothing else matters |
I verified the last one with real money: a taker line ran 41 hours against a cost line of about 2.55pp while its observed gross edge was 1.56pp — a certain loss on every window. Full ledger in the autopsy.
The fee is a parabola peaking at 50¢; as a share of stake it is a straight line that hits cheap buys hardest. Both statements are true, and using the wrong one turns a losing strategy into a winning number — so match the bases before you subtract.
p(1−p) peaks at 0.25 for p=0.5; pure algebra, check it yourself.fee ÷ (p × shares); p cancels.maker_base_fee/taker_base_fee show 1000, unrelated to the measured rate.