Net vs gross PnL: the only number that matters
2026-05-15 · ~6 minute read
Almost every “backtest looks great” chart on the internet is a gross PnL chart. Gross PnL is the difference between entry and exit price multiplied by size. It ignores the four largest cost lines on a derivatives account, and those four lines are the difference between “edge” and “edge after costs” — which is the only number worth optimising.
The four lines that turn gross into net
- Exchange fees: maker and taker, applied per fill. A maker-heavy strategy still pays taker on the orders that cross the spread.
- Funding: on perpetuals, you pay or receive funding every interval (typically 8h). A position that is positive on price can be negative on funding for the entire holding period.
- Slippage: the difference between the price your model expected and the price you actually transacted at. On a quoting strategy the “slippage” is the adverse-selection cost on fills.
- Borrow / margin interest: on some venues, non-trivial; on others, zero. Worth checking per venue, not assuming.
The accounting identity
For every closed trade or rolling position window we record:
net_pnl = gross_pnl
- fees_paid (sum of maker_fee + taker_fee per fill)
- funding_paid (sum of funding cashflows over holding period)
- slippage_cost (price_expected vs price_filled, per fill)
- borrow_interest (if any)Each component is recorded per fill, not aggregated, because aggregation throws away the diagnostic information you need when net edge starts drifting. If next quarter is worse than this quarter, you have to know whether fees rose, fills got adverse, or funding flipped.
What a positive net edge actually looks like
For sustained, maker-heavy retail crypto, a realistic net edge sits somewhere in the 0.05–0.25 bps range per order action, after every cost line above. A backtest that shows 5 bps net edge is almost certainly missing one of the four lines or treating an aggressive fill as if it were passive. We size strategies based on the bottom of that range, not the top.
Why this is the discipline that kills bots fastest
Most retail systems plot a green gross-PnL line, scale up capital, and then watch the account underperform the line by an order of magnitude. The fix is not better strategies — it is reporting that surfaces the net number continuously, so a strategy whose net edge crosses zero is shut down within hours, not weeks.
We track net edge per order action, per pair, per venue, in real time. If it crosses below a configured floor, the allocator routes new capital elsewhere; if it stays below the floor, the strategy is retired. The accounting is the kill criterion.