How to Calculate Profit on a Crypto Trade After Fees
The formula for net profit on a crypto trade after buy and sell fees, a worked bitcoin example, your break-even price and how fees add up over many trades.
To find profit on a crypto trade after fees, subtract everything you paid from everything you received: net profit = sale proceeds − sell fee − (purchase cost + buy fee). Fees apply on both sides, so a trade must rise slightly to break even. With a 0.1% fee each way, that rise is about 0.2%.
The formulas
Purchase cost = quantity × buy price
Sale proceeds = quantity × sell price
Net profit = sale proceeds − sell fee − purchase cost − buy fee
Return = net profit ÷ (purchase cost + buy fee)
Fees are usually a percentage of the trade’s value. Network fees for withdrawals, spreads and slippage come on top. See trading fees explained.
Worked example 1: a winning trade
You buy 0.1 BTC at $60,000 and later sell at $63,000, paying a 0.1% fee on each trade (illustrative).
- Purchase cost = 0.1 × $60,000 = $6,000; buy fee = $6.00
- Sale proceeds = 0.1 × $63,000 = $6,300; sell fee = $6.30
- Net profit = $6,300 − $6.30 − $6,000 − $6.00 = $287.70
- Return = $287.70 ÷ $6,006 ≈ 4.79%
Without fees, the profit would have been $300.

Figure: How fees reduce a $300 gain (0.1% each way, illustrative).
Worked example 2: a losing trade
Same purchase, but you sell at $59,000.
- Sale proceeds = $5,900; sell fee = $5.90
- Net result = $5,900 − $5.90 − $6,000 − $6.00 = −$111.90
Fees make losses slightly larger as well as gains slightly smaller.
Worked example 3: a leveraged perpetual trade
You post $1,000 of margin and open a $10,000 long on a bitcoin perpetual at $60,000, 10x leverage. You close three days later at $63,000. The exchange charges a 0.05% taker fee on the position’s value each way, and funding averages 0.01% every 8 hours, paid by longs. (Illustrative figures.)
- Gross gain = $10,000 × 5% = $500
- Opening fee = $10,000 × 0.05% = $5.00; closing fee = $10,500 × 0.05% = $5.25
- Funding = $10,000 × 0.01% × 9 periods = $9.00
- Net profit ≈ $480.75, about 48% on the $1,000 margin
Fees on leveraged trades are charged on the full position, not on the margin, so they take a larger share of the margin than they seem to.
Worked example 4: buying in stages
You buy 0.1 BTC at $60,000, then another 0.1 BTC at $50,000, for an average cost of $55,000. You later sell 0.1 BTC at $62,000. Against your average cost, the sale made $700 before fees. But if your tax rules treat the first coins bought as the first sold, the taxable gain on that sale is only $200, because it is matched against the $60,000 purchase. The profit you track for trading and the gain you report for tax can differ, so it helps to know which method applies where you live. See how to keep records of your crypto transactions.
Profit on a short position
On a short, the order of buying and selling is reversed: you sell first and buy back later. If you short 0.1 BTC at $60,000 and close at $57,000, the gross profit is 0.1 × ($60,000 − $57,000) = $300. Fees on both sides and any funding payments come off that, just as for a long. If the price rises instead, the loss grows with every dollar the price climbs, with no natural ceiling, which is why stops and position size matter even more for shorts.
Finding your break-even price
Break-even sell price = (purchase cost + buy fee) ÷ (quantity × (1 − sell fee rate))
For example 1: $6,006 ÷ (0.1 × 0.999) ≈ $60,120, about 0.2% above the purchase price. Anything below that is a loss after fees.
How fees add up over many trades
At 0.1% per side, every round trip costs about 0.2% of the amount traded. Twenty round trips a month with the same money costs about 4% of it in fees alone, before any spreads or slippage. Frequent trading needs a real edge just to cover costs; research on active traders shows most do not have one. See common crypto trading mistakes.
Gains and losses are not symmetric
A 50% loss needs a 100% gain to get back to where you started; a 20% loss needs a 25% gain. That asymmetry is why cutting losses early matters more than it seems: the deeper a loss, the harder the recovery, and fees make the climb a little steeper still.
Profit in which currency?
When you trade an altcoin against bitcoin rather than against dollars, your profit can look different depending on how you measure it. A trade that gains 10% in bitcoin terms may lose money in dollar terms if bitcoin fell over the same period. Deciding in advance which currency you measure performance in, and sticking to it, avoids flattering or misleading results.
Judging results over many trades
A single trade says little; performance shows over many. Two numbers matter together: how often you win and how large wins are compared with losses. Expected result per trade = (win rate × average win) − (loss rate × average loss). With a 40% win rate, an average win of $300 and an average loss of $150, each trade is worth about $30 on average before costs. (Illustrative figures.) A high win rate with occasional large losses can still lose money overall, and a low win rate can be profitable if winners are much larger than losers.
What else to include
- Network fees to deposit or withdraw.
- Spread and slippage, which show up as worse prices rather than fees.
- Funding payments on perpetual futures.
- Taxes, which depend on where you live.
Record every cost in a trading journal. For the basics, read what a cryptocurrency exchange is.
This article is educational content and does not constitute financial, investment, legal or tax advice. Digital assets are volatile and you may lose the amount you invest.
Frequently asked questions
Should I include spreads in my profit calculation?
Yes. The spread does not appear as a fee, but it shows up as a worse buying or selling price. Using the prices you actually received, rather than the quoted market price, captures it automatically.
How do I calculate profit on many trades?
Add up the net result of each closed trade, including all fees, and compare the total with the capital you used. A trading journal or spreadsheet that records every fill makes this straightforward. Always keep every fill.