为什么不能给所有 PnL 字段一个固定答案
交易平台的持仓页、成交历史、资金流水和接口可能服务于不同用途。即使都出现 PnL 字样,也可能分别表示未实现盈亏、平仓盈亏、账单收入类型或汇总后的账户结果。
产品版本、账户模式和导出格式变化也可能调整列名。因此,与其依赖一个笼统结论,不如查看同一文件是否同时提供 Commission、Funding Fee 或独立账单类型。
如何判断手续费是否已经单列
先选取一小段只有一两笔成交的时间范围,记录页面平仓盈亏、成交手续费和资金流水变化。若 Realized PnL 与平仓价格差对应,而 Commission 另有记录,就应分列计算。
如果账单中还有返佣、手续费抵扣或其他币种费用,也应作为独立项目保留;不要为了让余额对上而随意把它们并入 Realized PnL。
合并两份文件时怎样避免重复扣费
成交文件可能包含每次 fill 的手续费,资金流水又可能包含对应的 Commission 账单。合并时应优先使用稳定的交易标识、账单标识、币种、金额和毫秒时间进行匹配。
若没有可靠标识,不应自动把相同金额全部视为重复。更安全的做法是标记为待核对,并降低结果可信度。
避免口径歧义的重构方式
重构净结果 = Realized PnL − Commission + Funding Fee 净额 − 其他费用Funding Fee 净额为收入减支出;若导出文件用正负号表达方向,应保留原始符号后再求和。
同一笔交易的两个数字
Realized PnL 为 300 USDT,Commission 为 78 USDT,Funding Fee 净支出 24 USDT,不计其他成本时重构净结果为 198 USDT。
本文所有金额与费率都是用于说明计算方法的匿名示例,不代表真实账户,也不代表当前费率。你的实际费率取决于交易所公开费率表和你自己的账户等级,请以官方页面为准。
币安账单里,哪些字段属于费用,哪些属于盈亏
币安 U 本位合约的导出文件把价格结果和费用拆在不同的记录类型里。把它们混成一列,就会得出“已实现盈亏已经扣过手续费”的错误结论。
| 账单类型 | 对应的英文字段 | 在净结果中的处理 |
|---|---|---|
| 已实现盈亏 | REALIZED_PNL | 价格层面的结果,尚未扣除任何费用 |
| 交易手续费 | COMMISSION | 开仓与平仓分别发生,需要整段求和后扣除 |
| 资金费用 | FUNDING_FEE | 按结算事件单独计入,正负号都要保留 |
| 手续费返还 | COMMISSION_REBATE | 冲减手续费,不要计入价格盈亏 |
| 保险与清算费 | INSURANCE_CLEAR | 只在强平时出现,属于费用而非盈亏 |
| 资金划转 | TRANSFER | 改变余额但不属于交易结果,核对时单列 |
同一笔交易,在两个文件里为什么是两个数字
假设在币安 U 本位合约开多 1 BTC,开仓成交额 60,000 USDT,平仓成交额 60,300 USDT,全程吃单。
成交历史(Trade History)里,这笔交易的 Realized PnL 显示为 +300 USDT。这是价格差的结果,不包含手续费。
资金流水(Transaction History)里,同一时间范围会额外出现两条 COMMISSION 记录,以及持仓跨过结算时点产生的 FUNDING_FEE 记录。只有把这些记录一并扣除,才是这笔交易真正留在账户里的钱。
- 已实现盈亏(REALIZED_PNL):+300 USDT
- 开仓手续费(COMMISSION):−30 USDT
- 平仓手续费(COMMISSION):−30.15 USDT
- 资金费用(FUNDING_FEE)净支出:−12 USDT
- 账单净结果:300 − 30 − 30.15 − 12 = 227.85 USDT
成交历史里的 +300 和账户实际增加的 227.85 都不是错的,它们只是两个口径。对外说“这笔赚了多少”时,应该用后者。
确认这 5 项,再说这笔赚了多少
- 已实现盈亏取自成交历史,费用取自资金流水
- 开仓和平仓两次手续费都已计入
- COMMISSION_REBATE 冲减在手续费一侧
- FUNDING_FEE 保留正负号,没有被取绝对值
- TRANSFER、充值和提现已排除在交易结果之外
按这三步分离盈亏与费用
- 1
确认导出文件的产品类型和时区
确认是 USDⓈ-M、COIN-M 还是其他产品,并记录导出时使用的时区。
- 2
按收入类型分别汇总盈亏、手续费和资金费用
保留原始正负号和费用币种,先按类型求和,再统一换算。
- 3
用余额变化抽样复核重构结果
抽取一个交易较少的日期,将重构结果与账户流水逐项对照。
混淆两个文件时最常见的错误
- 把 Unrealized PnL 当成已经进入余额的收益。
- 看到 Realized PnL 就默认已扣除 Commission 和 Funding Fee。
- 把同一笔 Commission 在成交文件与资金流水中各扣一次。
- 把资金流水里的 REALIZED_PNL 和成交历史里的已实现盈亏相加,等于把同一笔结果算了两遍。
字段命名变化带来的边界
- 接口字段可能随版本更新
- 返佣和抵扣可能单独入账
- 税务口径不等于交易平台账单口径
- 币安不同时期导出的字段名称并不完全一致,旧文件需要按含义而非列名匹配
常见问题
Realized PnL 一定不含手续费吗?
不能跨页面和导出格式一概而论。应检查同一数据源是否把 Commission、Funding Fee 单独列出,并用一小段账单做余额核对。
返佣应该从手续费中直接扣除吗?
如果返佣以独立账单入账,建议单独列为费用返还,不要改写原始手续费。这样能保留毛手续费与净费用两个口径。
没有订单 ID 还能去重吗?
可以结合时间、合约、金额、币种和记录类型做保守匹配,但无法确认时应保留不确定性,不能为了得到一个整齐数字强行删除记录。
