When Fees Eat Your Signals: A Daily Cap Formula
You run the backtest on your signal and it's a green wall — 60% annualized, 48% win rate, 1.4 average R/R. You wire it up to a webhook (the pipe that ships TradingView alerts to your own execution server), flip on auto-trading, and after one week of real money the account sits at -3%. You open the statement and see a long list of tiny debits that add up to more than any single winning trade — your fees just outran your strategy.
Nobody warns you up front: a manual trader takes 3–5 setups a day; a bot can take 50. Same strategy, 10× the frequency, 10× the fees — and your backtest almost never accounts for it.
Manual Traders Avoid This Trap; Bots Walk Right Into It
A busy manual daytrader does 3–5 setups a day. At a 0.1% spot taker rate, that's under 2% a week going to fees — still inside most retail traders' pain threshold.
Bots are a different animal. One TradingView alert fires one webhook, and 30–50 alerts a day is normal. At the same 0.1% taker, that's 21%–35% a week bleeding straight to fees. That isn't "a bit of extra cost" — it flattens the entire equity curve.
The Fee You Pay Isn't One Number — It Has at Least Three Layers
Confirm which layer you're looking at first. Mixing numbers from different layers gives you the wrong answer — this is the most common calculation mistake.
| Spot | Perpetual | ||
|---|---|---|---|
| Typical base rate (VIP 0) | taker ~0.08–0.10% | taker ~0.04–0.06% | |
| Maker discount | usually less than half | usually less than half, occasionally negative | |
| Funding rate? | No | Every 1–8 hours, depending on the contract | |
| VIP tier basis | 30-day volume | 30-day volume |
The actual numbers in every one of those layers should come from your exchange's current fee page — for a per-exchange breakdown, see the deep crypto exchange comparison. Perpetuals add one more layer — funding — which strategies that scalp in and out over minutes usually never pay, so we're parking it here for the piece on longer holds.
One Formula That Answers "How Many Signals a Day"
Pin down the notation first. Let e be your strategy's average per-trade PnL (losers included, expressed as a percentage of position size), and let f be the one-way fee rate you actually pay. Each trade opens once and closes once, so you pay the fee twice:
per-trade net PnL = e - 2f
daily net PnL = N × (e - 2f) ← N is the number of signals per dayThis formula has two consequences. First: if e ≤ 2f, no value of N helps. Your strategy's average PnL already can't clear the round-trip fee, so firing more just loses more.
Second: if e is only marginally above 2f, slippage will eat the remainder. Backtests fill at the close; real taker fills tend to come in a spread worse — that's an invisible fee, and like f you pay it on every trade.
Two Worked Examples
The e in the table below is treated as an input you got from your own backtest. Nothing here endorses any specific strategy — this is just showing how to plug the formula in.
| Strategy backtest number | e (per trade) | f (one-way fee) | 2f threshold | Verdict |
|---|---|---|---|---|
| EMA cross, 45% win rate, 1.4 R/R | 0.18% | 0.05% perp taker | 0.10% | Net e = 0.08%, marginal edge |
| Same strategy, moved to 0.10% spot taker | 0.18% | 0.10% spot taker | 0.20% | Net e = -0.02%, don't run it |
| RSI mean-reversion, 55% win rate, 0.9 R/R | 0.08% | 0.05% perp taker | 0.10% | Net e = -0.02%, don't run it |
| Same strategy, switched to maker orders | 0.08% | 0.02% perp maker | 0.04% | Net e = 0.04%, only works if you actually fill |
Worked examples. e comes from your own backtest; f is a rough 2026 August fee range for illustration.
Rows one and two are the same strategy — just moved from perp to spot. Doubling the fee turns edge into loss. That's the point: fee rate isn't a knob you tune after the fact; it decides whether the strategy is deployable at all. Rows three and four make a different point about maker orders — whether you can actually get filled is a separate question.
Three Ways to Cut Frequency
If your e ends up too close to 2f, you have three directions. They're ordered here from easiest to hardest to implement.
- Add a signal-strength filter. Only fire when the indicator meets conditions A, B and C at the same time. This tends to cut more than half your signals, and the remaining ones usually have 1–2× the average edge — because you filtered out the weak ones.
- Add a cooldown. Block re-entry in the same direction for X minutes after a close. This kills the "open-close-open-close on the same bar or two" behavior that just feeds fees. Trivial to implement, and the effect is direct.
- Switch to maker orders. Replace market orders with limit orders parked outside the spread, so you only fill at the maker rate. The downside: unfilled means no trade at all, and gap moves may leave you flat when you wanted in — the strategy logic has to be able to absorb that.
An Honest Note: What This Formula Doesn't Cover
This formula only accounts for the explicit fee. A few invisible costs aren't in it. Before you commit real money, know that you pay these on every trade too.
Slippage: the fill price of a market order isn't the price you saw when you clicked, especially on thinly-traded alts. That gap acts like a fee and you pay it every time.
Funding rate: perpetuals mostly settle every 8 hours (some exchanges have moved to 1 or 4 hours, contract-dependent). Short round-trips never touch it, but if your strategy holds through a funding stamp, that cost is real. See the perpetual funding-rate arbitrage guide.
API throttling and latency: the API (the interface exchanges expose for programmatic calls) rate-limits how many orders you can send per unit of time. Signals fired too densely can be rejected, or delayed into the next bar — at which point you not only miss the expected edge, you may be adversely filled. This one is strategy-design territory; the deeper discussion is in automated-strategy failover design.
FAQ
I trade with a rebate — does this formula still apply?
f. A rebate — where some fills return a portion of the fee — usually has campaign conditions that expire or fall short of the tier, so leave a margin on top of breakeven.Do backtest tools include fees in the annualized return?
Commission and Slippage in the Properties panel, but the default is zero — a green backtest is not a green live account.Would switching to a lower-fee exchange fix it?
How do I estimate e for maker orders?
Get started
TVSBot ships your Pine Script signals through to the exchange — with your own API keys (the read/write credentials exchanges require you to issue first) and risk controls you configure yourself.
Start free