The gross-to-net bridge
Use a formula whose rows can be traced back to the export:
The sign of funding depends on the contract, settlement, position side, and rate. Rebates are negative costs. Slippage is already embedded when actual fill prices are used; do not subtract an estimated slippage number again. Deposits, withdrawals, and internal transfers are external cash flows, not trading profit.
Why the numbers on one exchange disagree
| Number | Question it answers | Common omission |
|---|---|---|
| Unrealized P&L | What would the open position show at the current/mark price? | Closing fees, future funding, and execution price |
| Realized/closed P&L | What price result was crystallized? | May exclude fees or funding depending on screen |
| Trade-history result | What did each execution contribute? | Funding and account-level transfers |
| Wallet/account change | How did equity move? | Mixes trading with deposits, withdrawals, transfers, and rewards |
Worked example
A trader closes a perpetual position with $420 of realized price P&L. Opening and closing fees total $34. The position paid $18 of funding over three settlements and received a $4 maker rebate already included in the fee ledger.
Net P&L = $420 − $34 − $18 = $368. Do not add the $4 again if the $34 is already the net fee total. If the account also received a $1,000 deposit, the wallet rose by $1,368—but trading performance is still $368.
Partial close example
A trader opens 2 BTC and closes 0.5 BTC, 0.5 BTC, then 1 BTC. The exchange can show three realized-P&L rows, six or more fills, and one completed position. Allocate entry and exit fees to the executed quantities, add funding only for settlements while size was open, and calculate the lifecycle result once. Summing a position summary and its fill-level P&L would double-count the same economic result.
The minimum reconciliation ledger
| Field | Source | Validation |
|---|---|---|
| Executed quantity and price | Fill/trade history | Sum partial fills; do not substitute order quantity |
| Realized price P&L | Closed position or calculated fills | Confirm whether the field is gross or already net of costs |
| Trading fee and asset | Execution/fee ledger | Convert only with a documented rate and timestamp |
| Funding amount and time | Funding ledger | Match only to size open at settlement |
| External cash flow | Deposit/withdrawal/transfer ledger | Exclude from trading performance |
Linear and inverse contracts need different currency handling
A USDT-margined contract usually reports price P&L, fees, and funding in a quote stablecoin, while a coin-margined inverse contract can settle them in the base asset. Do not add 0.0012 BTC of fees directly to a USDT profit number. Preserve the native amount and asset, then convert it using a documented price and timestamp that matches the reporting policy. Keep both values so a later reviewer can reproduce the conversion.
The same rule applies when a fee discount uses a platform token. The economic cost is the quantity of that token removed at the execution time, not zero merely because the contract’s settlement asset did not change.
Reconcile from source rows, not screenshots
- Export executed fills or closed positions for the exact UTC window.
- Export fee and funding rows for the same account, contract, and window.
- Separate external flows: deposits, withdrawals, transfers, staking, rewards, and conversions.
- Group partial fills into a proved position lifecycle without deleting the underlying executions.
- Calculate gross price P&L, then bridge each cost line to net P&L.
- Compare the result to ending equity after adjusting for external flows and open-position value.
The mistakes that create fake precision
- Using order price instead of actual fill price.
- Treating a transfer into the futures wallet as profit.
- Ignoring fees paid in a different asset.
- Assigning account-level funding to the wrong strategy.
- Subtracting slippage twice: once through fills and again as an estimate.
- Comparing a closed-trade report to equity while another position is still open.
Three control totals before review
First, execution quantity opened must equal quantity closed plus the verified remaining open size. Second, net trade P&L must equal gross result minus the cost ledger without duplicated rebates or fees. Third, account change must equal net trading result plus external flows and the change in open-position value. If one control fails, keep the batch unreconciled and locate the missing event instead of adjusting a trade manually.
How to classify the unexplained remainder
When the bridge is close but not exact, classify the difference before changing any trade. A stable difference per execution usually points to an omitted commission. A difference that appears only across settlement timestamps usually points to funding. A difference denominated in another asset often comes from fee-token conversion. A large round-number difference is commonly a transfer, deposit, reward, or manual adjustment. Preserve the unexplained amount as a reconciliation exception until its source row is found.
Worked period bridge
| Component | Amount | Running result |
|---|---|---|
| Gross realized price P&L | +$1,280 | $1,280 |
| Trading fees | −$146 | $1,134 |
| Funding paid | −$38 | $1,096 |
| Funding received | +$11 | $1,107 |
| Fee-token conversion difference | −$7 | $1,100 net trading result |
| External deposit | +$2,000 | $3,100 account change |
The deposit explains wallet growth but does not improve trading performance. If the actual account change is $3,094, keep the remaining $6 as an exception until a missing fee, conversion, or valuation row is identified.
Set a reconciliation policy before seeing the answer
Define whether the batch must agree exactly in native asset units or may use a documented conversion tolerance. A percentage tolerance alone is weak because it grows with account size. Prefer exact quantity agreement for fills and native fees, plus a small fixed reporting-currency tolerance only for independently converted assets. Never hide an unexplained difference inside “slippage” when actual fill prices are already present.
The TSB route: import → reconcile → review
Open TSB Journal → Import trades and preserve each exchange file as its own batch. Review the detected source, then reconcile execution count, fees, funding, external flows, and account currency. Once the financial layer agrees, add setup and decision tags and use Daily Review to compare process outcomes rather than only gross winners.