Maker vs taker fees for trading bots: the real break-even math
A bot can predict direction correctly and still lose because its edge is smaller than the round-trip friction. Maker and taker labels are only the first line of that bill. Fill probability, queue position, spread, adverse selection, partial fills, and urgency decide whether the “cheaper” order was actually cheaper.
Maker and taker describe the execution
An order is generally maker when it rests on the order book and adds liquidity before another participant trades against it. It is taker when it immediately matches liquidity already resting on the book. This is an execution outcome, not just an order-type name.
| Order behavior | Likely role | Main tradeoff |
|---|---|---|
| Market order | Taker | High fill certainty, uncertain price |
| Marketable limit crossing the spread | Taker | Price cap plus immediate execution if depth exists |
| Passive limit resting at bid or ask | Maker if filled after resting | Better price, uncertain timing and queue position |
| Post-only limit | Maker or no fill | Prevents taking but can reject during a price move |
Always read the venue's current fee schedule and API rules. Rates can vary by product, monthly volume, account tier, region, token discounts, and whether the order is maker or taker. Do not hard-code a marketing-page number into a strategy. Store fee rates in configuration, timestamp changes, and reconcile charged fees from actual fills.
If order behavior is unfamiliar, start with market vs limit orders and the bid-ask spread.
Calculate the complete round-trip hurdle
One basis point (bp) is 0.01%. Expressing each cost in basis points makes unlike components comparable:
net edgenet_edge_bps = gross_edge_bps
- entry_fee_bps
- exit_fee_bps
- spread_cost_bps
- slippage_bps
- impact_bps
- funding_or_borrow_bps
Suppose a hypothetical signal expects an 18 bp gross move. Entry is expected to take at 5 bp, exit is expected to make at 2 bp, half-spread and slippage total 4 bp across the trip, and other costs add 1 bp. The estimated net edge is:
worked example18 - 5 - 2 - 4 - 1 = 6 basis points net
That 6 bp is not guaranteed profit; it is the expectation left before model error and adverse selection. Stress the taker exit, a wider spread, and a partial fill. If an urgent stop changes the exit from 2 bp maker to 5 bp taker and adds 3 bp of slippage, the net edge falls to zero in this example.
For a dollar view, multiply basis points by notional divided by 10,000. A 7 bp round-trip cost on $20,000 of notional is 20,000 × 7 / 10,000 = $14. Turnover repeats that cost, which is why small-edge, high-frequency retail bots are especially sensitive.
Post-only saves a fee only if the trade still works
A post-only order tells the venue not to execute immediately as taker. If it would cross, the venue commonly rejects or cancels it according to its rules. The bot then needs a policy: reprice, wait, cross as taker, or abandon the signal. An uncontrolled reprice loop can create excessive messages, lose queue priority repeatedly, and run into rate limits.
Passive orders also face adverse selection. A buy at the bid is most likely to fill when sellers are willing to hit it; sometimes that is because the fair price is moving down. The fee was low, but the price immediately moved against the position. Measure markout after 1 second, 10 seconds, and the strategy's normal holding horizon to see whether maker fills are systematically toxic.
If a valid signal moves away while a passive order waits, the bot saved the fee and earned nothing. Compare expected outcomes across filled, partially filled, missed, and chased orders rather than comparing fee percentages alone.
Queue position is usually unknown from candle data. A backtest that credits a full maker fill whenever a bar touches the limit is optimistic. The market may have traded only a small quantity ahead of your order, or the touch may have occurred before the simulated order arrived.
Match the order policy to the strategy
| Strategy situation | Typical priority | Policy to test |
|---|---|---|
| DCA or slow rebalance | Cost over milliseconds | Patient limits with a deadline and bounded reprice |
| Grid trading | Repeatable passive execution | Post-only rungs plus partial-fill accounting |
| Fast momentum entry | Opportunity decay | Marketable limit with a maximum acceptable price |
| Risk-reducing exit | Exposure reduction | Fill certainty inside a slippage guard |
| Thin-market arbitrage | Both-leg certainty | Model leg risk; a cheap unfilled leg is not an arbitrage |
Do not force the entry and exit to use the same role. A bot may enter passively when it can wait, then exit aggressively when a risk limit fires. Encode urgency as part of the order intent so the execution layer knows when it may cross.
Backtest a policy, not one fee constant
- Load the fee schedule that applied at each test date if historical rates are material.
- Classify each simulated order from its price behavior, not its label.
- Apply fees to actual filled notional, including partial fills.
- Model spread and side-aware slippage separately from the venue fee.
- Use optimistic, base, and conservative maker-fill assumptions.
- Stress every passive exit as taker when its deadline or stop is reached.
- Compare the backtest with paper and small live fill records.
The broader methodology is in backtesting fees and slippage. Log requested role, actual liquidity flag, charged fee, queue wait, fill ratio, cancellation reason, and post-fill markout. Those observations turn a guessed fee model into an evidence-based one.
Frequently asked questions
What is the difference between maker and taker fees for a trading bot?
A maker order rests on the book and adds displayed liquidity before it fills; a taker order executes against liquidity already available. Venues often charge different rates, but classification depends on how the order actually executes, not simply on whether the bot selected a limit or market order.
Is a limit order always charged a maker fee?
No. A marketable limit order can immediately cross the book and execute as taker. A post-only instruction is designed to prevent immediate taking, but it may be rejected or cancelled when it would cross, so the bot needs an explicit reprice or skip policy.
How do I calculate a trading bot's fee break-even move?
Add the effective entry and exit fees, expected spread crossing, slippage, market impact, and any funding or borrow cost, then adjust for partial-fill and missed-fill behavior. That total round-trip cost in basis points is the minimum gross edge the strategy must exceed before profit.
Should a trading bot always use maker orders to save fees?
No. A maker order can miss the trade, fill only when price is moving adversely, or leave partial exposure. Taker execution may be rational for urgent exits or signals whose opportunity decays quickly. Choose the order policy that maximizes expected net outcome, not the lowest fee line in isolation.