Commissions#
Binance reports commission per fill, in the asset it was charged in. HookTrader captures both.
Per-leg#
Each trade leg records:
commission— numeric, in whatever asset was charged.commission_asset— the asset string (e.g.USDT,BNB,BUSD).
Per-trade aggregation#
The trade's total commission aggregates across all legs. The aggregation behaves differently depending on whether all legs share the same asset:
- All legs same asset —
total_commissionis the simple sum, in that asset. - Mixed assets —
commission_assetbecomes"MIXED"and the frontend refuses to display a single net PnL number for the trade.
Why MIXED matters for PnL#
Net PnL = gross PnL − total commission. Subtracting USDT from BNB is meaningless without a conversion rate at fill time (and we'd be making one up). Rather than mislead you with an averaged-out USDT figure, the dashboard shows:
- Gross P&L — sum of realised P&L across close legs (Binance reports this in USDT for USDⓈ-M perpetuals, exact).
- Fees — broken out by asset.
- Net P&L — blank with a "MIXED" badge.
You can still see each leg's commission in the trade detail view if you need to reconcile manually.
How a trade ends up MIXED#
The most common cause: BNB fee discount on some fills but not others.
Binance applies the BNB discount per-fill, and only if your BNB balance is sufficient at the moment of the fill. If your BNB balance runs out mid-trade, later fills are charged in the position's quote asset (typically USDT) and you've now got two different commission_asset values across the same trade.
To avoid this:
- Either keep a comfortable BNB buffer in the sub-account at all times (and accept the discount).
- Or disable the BNB fee discount entirely so every leg pays in USDT consistently.
Either way, no PnL is lost — it's purely an accounting display issue. The legs themselves are exact.
Gross PnL is exact#
Realised P&L per leg comes directly from Binance's fill reports, not computed by HookTrader. Even on partial fills, even after scale-ins, even on emergency closes — the gross PnL row is what Binance actually paid into your wallet.
The trade-level total realised P&L is just the sum across legs, which is why the "missing leg" edge cases discussed in Partial fills can result in an understated total realised P&L.
Funding payments#
Funding is not included in the realised P&L or commission totals. It's a separate Binance accounting flow that hits your wallet directly. If you want to attribute funding to specific trades you'll need to reconcile externally — HookTrader doesn't track it today.