Guide · Performance and tax maths
How to Calculate Crypto Profit, ROI and Fees Correctly
Most traders calculate a result as “sell price minus buy price, times the number of coins”. That figure is gross profit, and it is almost always higher than what actually reached the account. This guide walks through the correction step by step.
Step 1: Start from the amount you actually invested
Record the fiat value you put in, not the nominal size of the position. If you deposited $1,000 and paid a $10 deposit fee, your invested capital is $1,010, not $1,000.
Units bought = investment ÷ buy price. At a $100 buy price with $1,010 invested, you hold 10.10 units.
Step 2: Calculate gross exit value
Gross exit value = units × sell price. Selling those 10.10 units at $120 gives $1,212.00.
Step 3: Subtract the fees on both legs
This is where most manual calculations go wrong. Spot exchanges charge on the way in and on the way out. Applying a 0.1% fee to both:
- Entry fee: $1,000.00 × 0.1% = $1.00
- Exit fee: $1,212.00 × 0.1% = $1.21
Net proceeds = $1,212.00 − $1.21 = $1,210.79. Net profit = $1,210.79 − $1,010.00 = $200.79. The naive calculation, using $1,000 in and $1,200 gross out (a $100 buy price and a $120 sell price on ten units), produces $200. The difference looks trivial here, but it scales linearly — and it grows sharply once you trade frequently.
Step 4: Express it as ROI
ROI = net profit ÷ invested capital × 100. Here, $200.79 ÷ $1,010 = 19.88%, not the 20% that the price move alone suggests.
You can run these numbers directly through the ROI calculator on our home page; it performs exactly this sequence.
Step 5: Account for the costs the calculator cannot see
The four numbers above cover exchange commissions. They do not cover:
- Slippage. On a thin order book, your average fill price differs from the quoted price. On a size that is large relative to available liquidity, 0.2% to 1% is realistic.
- Network and withdrawal fees. Moving an asset on-chain costs a fixed fee that is unrelated to the size of the position.
- Funding payments. If the position was a perpetual futures position held for any length of time, funding paid or received must be added or subtracted.
- Spread on the pair. Trading a small altcoin against another altcoin instead of against a stablecoin can quietly cost another 0.3% to 1%.
Turning ROI into an annualised figure
A 19.88% return is meaningless without a time frame. Divide the holding period into a year to compare strategies:
Annualised return = (1 + ROI) (365 ÷ days held) − 1
A 19.88% gain over 90 days annualises to roughly 109%. A 19.88% gain over 400 days annualises to about 18%. The first is exceptional; the second is ordinary. Always state the period alongside the percentage.
Keeping records that survive a review
If you are subject to capital gains reporting, the figures you need are: date acquired, fiat value at acquisition, date disposed, fiat value at disposal, and fees paid on each side. Most exchanges will export this. Note fees separately rather than netting them into the price — accountants and tax software generally expect them as distinct line items, and reconstructing them later is painful.
The three habits that matter
- Log the invested amount including deposit costs, not just the trade size.
- Apply fees to both legs of every round trip.
- Write down the holding period whenever you calculate a return.