Retired Tools

Perpetual futures PnL calculator (with fees)

Perpetual futures PnL calculator (with fees)

Spot PnL is straightforward: buy at one price, sell at another, the difference minus the fee is your gain. Perpetual futures are not spot. Fees apply at both entry and exit, leverage means the gain is computed against a notional that's larger than your margin, and the percent ROI you actually feel depends on which denominator you use — which most calculators get wrong by silently picking one. The widget below names both: ROI as a percent of the notional position size (the standard ledger view) and ROI as a percent of the margin you actually posted (the ROI you actually feel).

Type the prices the way you actually transacted — your buy price and your sell price — and direction handles itself. For a LONG: you bought into the position then sold to close. For a SHORT: you sold to open then bought to close — same two prices, just in the opposite chronological order. PnL math is the same regardless of order. All four numbers — gross PnL, total fees, net PnL, and the two ROI figures — update as you type.

Perp PnL calculator

$
$
$
×
%
Net PnL
Type entry + exit to compute the trade outcome.
Gross PnL
Move × position size
Total fees
Both sides — entry + exit
ROI on margin
PnL ÷ posted margin
ROI on notional
PnL ÷ position size
Pre-funding math. If the position is held across an 8-hour funding boundary, the funding payment (paid by longs to shorts when funding is positive, vice-versa) is on top — not modeled here. For typical retail BTC perps in normal hours, funding adds ±0.01-0.03% per 8h to the loss/gain.

Why a perp PnL is not just (exit − entry) × size

Three reasons spot calculators miss for perpetual futures.

Fees are computed against the notional, not the margin. A 10× leveraged $5,000 notional position has $500 of margin posted, but the 0.06% taker fee at entry is computed against the full $5,000 — so the entry fee is $3, not $0.30. At the exit it's against the slightly different exit notional. Doubling the leverage doubles the fee paid (in dollars) for the same margin amount. The fee-as-percent-of-margin scales linearly with leverage, even though the fee-as-percent-of-notional doesn't.

The same dollar move means a very different ROI depending on the denominator. A $300 gain on a $5,000 notional is +6% on the notional. The same $300 gain on $500 of posted margin is +60% on the margin. Both are technically correct numbers; they answer different questions. The notional ROI tells you how big the underlying move was; the margin ROI tells you what your account experienced. Most retail platforms display only one of them, usually the one that looks better given the current trade.

Funding rates apply on top. Every 8 hours, perpetual contracts settle a funding payment between longs and shorts based on the current funding rate. A long position held across funding when the rate is positive pays the rate to shorts; when negative, receives from shorts. For a typical retail BTC perp at average funding (~0.01% per 8h), a position held for 24 hours pays or receives roughly 0.03% of notional. This calculator doesn't model funding — see the annualized funding cost tool for that — but it's part of the real net PnL on any position held across funding boundaries.

How to read the four numbers

The widget surfaces four numbers because they each answer a different question:

  • Net PnL (headline): The single number that hits your account. Gross gain on the position, minus fees paid both sides. The number you'd see settle on the exchange's PnL ledger.
  • Gross PnL: What the position's price move would have produced if fees were zero. Useful as a sanity check — if your strategy works pre-cost but the net is barely positive, the cost floor is close.
  • Total fees: Both sides combined, computed against the actual notional at each side. Compare against the gross PnL — if fees exceed roughly 30% of the gross gain, the trade is structurally cost-heavy and a different fee tier or a bigger move would change the math meaningfully.
  • ROI on margin: What your account experienced. The headline ROI most calculators show.
  • ROI on notional: What the underlying move was. The honest "how big was this move" number that's invariant to leverage.

The two ROI figures should differ by a factor exactly equal to the leverage you used. If they don't, something is wrong with the inputs.

A concrete example

Defaults: $5,000 notional, 10× leverage, BTC long from $60,000 to $63,000, 0.06% taker fee per side.

  • Position size in coins: $5,000 / $60,000 = 0.0833 BTC
  • Move per coin: $63,000 − $60,000 = +$3,000
  • Gross PnL: 0.0833 × $3,000 = +$250
  • Fee at entry: $5,000 × 0.06% = $3.00; fee at exit: 0.0833 × $63,000 × 0.06% = $3.15; total fees: $6.15
  • Net PnL: $250 − $6.15 = +$243.85
  • Margin posted: $5,000 / 10 = $500
  • ROI on margin: $243.85 / $500 = +48.77%
  • ROI on notional: $243.85 / $5,000 = +4.88%

The same trade unleveraged (1× spot, no fees) would have produced +5% — close to the leveraged notional ROI by design. The leverage doesn't change what the move was; it changes the slice of capital that experienced it.

For the deeper take on how fees compound across many trades and turn an apparent edge into a flat result, see the post on the minimum edge that survives commissions and slippage — it covers why high-turnover strategies often lose to costs even at high win rates.

FAQ

Which ROI should I actually pay attention to?

Both, for different decisions. ROI on margin tells you what your account experienced — useful for sizing decisions and account-level performance review. ROI on notional tells you how big the underlying price move was — useful for comparing trades across leverage levels (a +10% move is +10% whether you took it leveraged or not). Most retail platforms hide the distinction by showing only one; the better discipline is to know both.

What about funding rate cost?

Not modeled here — the calculator handles entry/exit fees only. For positions held across one or more 8-hour funding boundaries, funding adds (or subtracts) typically 0.005-0.03% of notional per 8h on BTC perps in normal conditions. Larger during sustained trends. The standalone funding-cost tool runs that math; for short-duration trades that don't cross a funding mark, it's zero.

Why does the entry fee differ from the exit fee?

Because the exit notional differs from the entry notional — the position size in coins is fixed once you open, but the dollar value of those coins changes as price changes. At a $60k entry and $63k exit, 0.0833 BTC is worth $5,000 and $5,250 respectively, so a 0.06% fee is $3.00 at entry and $3.15 at exit. Small in absolute terms, but real. Tools that hardcode the entry-side fee as a proxy for both ends underestimate by a small but consistent amount on winning trades.

Can I model maker rebates (negative fees)?

The fee field accepts zero but not negative values right now. For maker-rebate exchanges (rare in crypto perps; more common in equities), enter the fee as zero and add the rebate manually to the gross PnL — the result is the same. We can add explicit rebate support if there's demand.

Does this work for inverse contracts (coin-margined)?

Approximately, but not exactly. Inverse contracts are margined in the underlying coin (e.g., BTC-margined BTC perps), so the PnL math involves a 1/price term that this calculator doesn't include. For USDT-margined perps (the dominant retail format on Phemex, Binance, Bybit, OKX), this calculator is exact. For inverse, treat the result as a close approximation and verify against your exchange's calculator.

Sibling tools

  • Position size calculator — decides the position size before you ever enter; the PnL calculator shows what that position would do.
  • R-multiple calculator — translates the dollar PnL into an R-multiple so it's comparable across trades of different size.
← All tools