Skip to content

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 assettotal_commission is the simple sum, in that asset.
  • Mixed assetscommission_asset becomes "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.