Crypto trading bot fees explained: maker, taker, funding & spread

Every order your bot sends pays a toll. Some tolls are printed on the receipt — the exchange's trading fee — and some are hidden in the price you actually get filled at. Added up across thousands of trades, these frictions are the difference between a strategy that compounds and one that bleeds. This guide unpacks each cost, shows the math of a round trip, and explains how to bake fees into a backtest so the numbers you trust are the numbers you'll live with.

On this page
  1. Maker vs taker fees
  2. Fee tiers & discounts
  3. The bid-ask spread
  4. Slippage on market orders
  5. Funding rates on perpetuals
  6. Withdrawal & network fees
  7. Fee drag & the math
  8. Modelling fees in a backtest
  9. FAQ

Maker vs taker fees — the order type that costs you

The first fee every bot pays is the exchange's trading fee, and it usually comes in two flavours. A maker order adds liquidity to the order book: you post a limit order that sits there, waiting, until someone else trades against it. Because you've helped fill the book, exchanges reward you with the cheaper rate — sometimes even a small rebate. A taker order removes liquidity: you send a market order (or an aggressive limit) that immediately matches a resting order. You took liquidity off the book, so you typically pay the higher rate.

The gap between the two is small per trade but enormous in aggregate. This is why a high-frequency bot should be built to prefer maker orders wherever it can — posting passive limits and waiting for a fill rather than crossing the spread with a market order. The trade-off is that a maker order isn't guaranteed to fill; price can run away from your resting bid. A bot that needs certainty of execution pays the taker premium for it, and that premium compounds fast at scale.

Fee tiers, volume discounts and exchange tokens

Most exchanges run a tiered fee schedule. The more 30-day volume you trade, the lower your maker and taker rates fall. Many venues also discount your fees if you hold or pay with the exchange's native token. For a small retail bot none of this moves the needle much, but for an active strategy the effective rate you pay can differ meaningfully from the headline number a new account sees. Always check your actual tier and any token discount before assuming a fee figure — and treat published rates as the starting point, not a fixed constant, because exchanges change them.

The bid-ask spread — a cost on every round trip

Even with zero trading fees, you'd still pay to trade, because of the bid-ask spread. The best price to buy (the ask) is always a little above the best price to sell (the bid). If you buy at the ask and immediately sell at the bid, you lose the spread without the price moving at all. For a bot that opens and closes positions constantly, this gap is paid on every round trip and is often larger than the exchange fee itself — especially on thinly traded pairs. Liquid majors like BTC/USDT have tight spreads; small-cap altcoins can have spreads wide enough to swallow a whole strategy's edge.

Slippage — when the book is too thin for your order

Spread assumes you fill at the top of the book. Slippage is what happens when your order is bigger than the liquidity sitting at the best price, so it eats into worse and worse levels of the order book. You wanted to buy at 100; you fill part at 100, part at 100.2, part at 100.5, and your average price drifts against you. Slippage is worst on market orders, in thin books, during volatile moves, and when your size is large relative to available depth. It's invisible in a naive backtest because backtests assume you always fill at the last printed price — which is exactly why backtested results flatter reality.

Funding rates — the slow drain on leveraged perps

If your bot trades perpetual futures, there's a cost that has nothing to do with opening or closing a trade: the funding rate. Perpetuals have no expiry, so to keep their price tethered to the underlying spot price, the exchange has longs and shorts pay each other a small periodic payment — typically every few hours. When funding is positive, longs pay shorts; when negative, shorts pay longs. Hold a leveraged position on the paying side and these payments quietly drain it over time, completely independent of whether your trade is winning or losing on price. A position that looks flat on the chart can still be slowly bleeding through funding. For any strategy that holds perps overnight, funding is a real line item — we cover the mechanics further in our futures trading bot guide.

Withdrawal and network fees

Finally, the costs at the edges: moving crypto between wallets or off an exchange incurs withdrawal and network (gas) fees. These don't hit every trade, but a strategy that constantly shuffles funds between venues — for arbitrage, say — can see network fees become a meaningful drag, particularly on congested chains. Factor them into any approach that moves coins around rather than just trading within one account.

Why "profitable gross" can mean "losing net"

Here's the uncomfortable truth: fee drag scales with trade frequency. A long-term strategy that trades a few times a month barely notices fees. A scalper trading dozens of times a day pays the round-trip cost dozens of times a day, and that cost has to be cleared before a single cent of profit. The total cost of one round trip is roughly:

round-trip cost ≈ entry fee + exit fee + spread + slippage

Work a quick example in basis points (1 bp = 0.01%). Suppose a scalper pays a 0.1% (10 bp) taker fee on entry and another 10 bp on exit, plus a half-spread of 2 bp each way and a couple of bp of slippage per side. That's roughly 10 + 10 + 4 + 4 ≈ 28 bp — about 0.28% — burned on every single round trip before the strategy has earned anything. A bot doing many such trades a day needs an average gross edge comfortably above 0.28% per trade just to break even, and that's before a losing streak. Switch those takers to maker fills and the picture improves dramatically; that single change is often the line between a viable high-frequency bot and a guaranteed loser.

Fee drag is the #1 silent killer of high-frequency bots

More backtested "winners" die from underestimated fees, spread and slippage than from a broken signal. The faster a strategy trades, the more its survival depends on minimising cost per round trip — not on chasing a bigger edge.

How to model fees in a backtest

The fix is simple in principle: subtract a realistic round-trip cost, in basis points, from every trade in your backtest. Don't model fees as an afterthought — bake them into the trade-level PnL so your equity curve reflects what you'd actually keep. Be conservative: it's far better for live trading to slightly outperform a pessimistic backtest than to underperform an optimistic one.

python · fees.py# Apply a round-trip fee (in basis points) to a single trade
def net_return(entry, exit_, side='long', fee_bps=28):
    gross = (exit_ - entry) / entry            # raw price move
    if side == 'short':
        gross = -gross
    cost = fee_bps / 10_000                  # 28 bps -> 0.0028
    return gross - cost                        # what you actually keep

# A scalper's tiny edge can vanish once fees are charged
print(net_return(100, 100.3))   # +0.30% gross -> +0.02% net
print(net_return(100, 100.2))   # +0.20% gross -> -0.08% net (a loss!)

Use the same fee_bps value for every trade and your backtest finally measures the strategy you'll actually run. The honest follow-up is to confirm it survives live: see backtesting vs forward testing, where the gap between paper and live is almost always fees and slippage you under-counted. And size every trade so a costly streak can't sink you — our trading bot risk management guide and the position-size calculator handle that side.

Fee types at a glance

Fee typeWho pays itTypical scaleHow to reduce it
Taker feeWhoever removes liquidity (market orders)Often around 0.05–0.10% per sideUse limit orders that rest as maker fills
Maker feeWhoever adds liquidity (resting limits)Usually lower than taker; sometimes a rebatePost passive limits; climb the volume tier
Bid-ask spreadEvery round trip, regardless of feeTiny on majors, wide on illiquid pairsTrade liquid pairs; avoid thin books
SlippageLarge or urgent market ordersGrows with size vs. order-book depthSmaller clips, limit orders, deep markets
Funding ratePerp holders on the paying sideSmall but periodic; compounds over timeAvoid holding perps through adverse funding
Withdrawal / networkWhoever moves coins off-venueVaries by chain and congestionBatch transfers; trade within one account
Not financial advice. This content is educational. Trading fees, spreads and funding rates vary by exchange, account tier and market conditions — always verify current figures on your own venue before relying on them. Automated trading carries a real risk of financial loss; never trade money you cannot afford to lose. Review the SEC investor.gov and CFTC resources before trading.

Frequently asked questions

What is the difference between a maker and a taker fee?

A maker order adds liquidity to the order book — a limit order that rests until someone trades against it — and usually earns the cheaper rate, sometimes even a rebate. A taker order removes liquidity by matching a resting order, typically a market order, and usually pays the higher rate. A high-frequency bot saves a lot by preferring maker orders wherever execution certainty allows.

Why does a profitable-looking strategy lose money after fees?

Because fee drag scales with how often you trade. A strategy with a tiny gross edge per trade can be wiped out once you subtract the entry fee, exit fee, spread and slippage on every round trip. The more trades per day, the larger the gross edge you need just to break even — which is why fees quietly kill so many high-frequency bots.

What is a funding rate and why does it cost my bot money?

On perpetual futures, a funding rate is a small periodic payment exchanged between longs and shorts to keep the perpetual's price near spot. If you hold a leveraged position on the paying side of funding, those payments quietly drain the position over time — a cost that never appears in your entry and exit prices.

How do I include fees in a backtest?

Subtract a realistic round-trip cost from every trade, expressed in basis points: entry fee plus exit fee plus a half-spread on each side plus an estimate of slippage. Bake it into trade-level PnL rather than adding it later. A backtest that ignores fees and spread will always look far better than the strategy performs live.

MB

Mustafa Bilgic

Algorithmic trading practitioner · Founder, AutomatedTradeBot.com

Mustafa builds and tests automated trading systems and writes about them without the hype. Every tool on this site is free and runs entirely in your browser. Based in Adıyaman, Türkiye.