Meetcrypt
Product· by Abdul Waheed

Why Your Exchange PnL Is Wrong (and How to Fix It)

The profit-and-loss number on your exchange dashboard is almost never the number you actually made. Binance, Bitget, Bybit, OKX — they all show you a figure that's good enough for a quick glance and wrong for anything that matters: performance review, tax filing, or deciding how to allocate next month. This isn't a conspiracy. It's a series of design choices that optimise for the order book, not for your books. Here are the four big ones, why they happen, and what a trustworthy number looks like instead.

1. Deposits and withdrawals get counted as performance

The most damaging error. Many dashboard views compute “profit” as roughly current balance minus some earlier balance. Deposit $10,000 into your futures wallet and that view cheerfully reports you up $10,000 — as if depositing money were a trading achievement. Withdraw to take profit and it looks like a loss.

The fix is conceptually simple and operationally annoying: separate capital flows from trading results. Money you put in or took out is not performance. Your real trading PnL is what happened to the capital while it was deployed, with deposits and withdrawals stripped out. Until that separation is made, every other number is contaminated.

2. Funding fees vanish from the headline

On perpetual futures you pay or receive funding every few hours. Over a multi-day hold, funding can quietly become one of your largest cashflows — and many exchange “realised PnL” headlines either exclude it or bury it where you'll never reconcile it against a position. A carry trade that's profitable purely because of funding looks flat; an execution edge that's being eaten alive by negative funding looks fine.

The fix: funding deserves its own ledger. It should be netted as a distinct line, not blended into execution PnL, so you can tell whether your edge comes from being right on direction or from collecting carry. Those are different skills and they fail in different ways.

3. Cross-account transfers don't reconcile

Move USDT from spot to futures, or between sub-accounts, and each leg can be misread — a withdrawal here, a deposit there — with no understanding that they're two halves of one internal move. The result is double-counting, broken cost basis, and (at tax time) phantom gains on money that never left your control.

The fix: detect internal transfers across accounts and exclude them from PnL. A withdrawal from your Binance sub-account and a deposit into your Bitget account, minutes apart, for the same asset and amount, is one transfer — not a sale and a purchase.

4. Mark-price snapshots are inconsistent

Unrealised PnL depends entirely on which price you mark open positions at, and when. Exchanges snapshot marks at moments that don't necessarily line up across products or with anything you'd choose. Compare two screens taken seconds apart and the “profit” can differ. For a casual glance that's fine; for a daily performance series it makes the curve untrustworthy.

The fix: a consistent, UTC-stable marking convention, with unrealised PnL kept in its own column — never silently folded into a realised figure, so a deep open-position drag can't make every breakdown row contradict the headline.

A concrete example

A trader deposits $10,000, makes $2,000 of genuine net realised PnL across 50 trades, and pays $300 in funding holding a few perps. The exchange dashboard shows +$12,000 profit. Every piece of that number is wrong in a different way: the $10,000 is capital, not profit; the $300 of funding isn't reflected against the trades; and the headline conflates all of it. The true result is +$1,700 ($2,000 realised − $300 funding). The gap between $12,000 and $1,700 is the gap between a screenshot and a number you could file taxes on.

What “real” PnL needs to include

Putting the fixes together, a PnL you can trust has five properties:

  1. Capital flows removed — deposits and withdrawals never count as performance.
  2. Fee-adjusted realised PnL — every trade net of both-side fees, derived from raw fills.
  3. Funding as a first-class line — separate from execution.
  4. Transfers reconciled — internal moves detected and excluded.
  5. Unrealised separated from realised — marked consistently, kept in its own column.

For a single closed trade you can get there by hand with the crypto profit calculator. For a portfolio, doing it manually across hundreds of fills and multiple venues is the actual job — and it's the job most people quietly get wrong in a spreadsheet.

How Meetcrypt computes it

Meetcrypt rebuilds your PnL from the ground up. Connect Binance and Bitget with read-only API keys and it pulls your full fill history, derives a weighted-average cost basis, and reports fee-adjusted realised PnL, funding (netted separately), reconciled transfers, and marked unrealised — each on its own line, so the headline reconciles to every breakdown row and matches your wallet movement to the dollar. Deposits don't masquerade as profit. Funding doesn't hide. Transfers don't double-count.

See the full feature breakdown, or connect an account and get a number you can actually trust.

Educational information only — not financial advice.

Related on Meetcrypt