Files
sentiment-engine/prod/docs/BINGX_MAKER_FEE_MEASURED_20260714.md

104 lines
3.4 KiB
Markdown
Raw Normal View History

# BingX VST Maker Fee Measurement
> ## ⚠ VERIFIED VERDICT (Fable, 2026-07-14) — the fee is **+2.00 bps (a COST), not a rebate**
>
> omp's raw capture below is **correct and valuable**; only the *sign interpretation* is wrong.
> BingX reports `commission` with a **negative sign to denote a debit** (money leaving your
> account) — the opposite of Binance. `commission: "-0.001291"` therefore means the account
> **paid** 0.001291 USDT, i.e. a **fee of +2.00 bps**, not a −2.00 bps rebate.
>
> Two independent proofs it is a cost, not a rebate:
> 1. **Magnitude is exactly BingX's published maker rate.** `0.001291 / 6.45475 = 0.020001%`
> = **0.02%** to five figures — the standard tier-0 BingX perp maker fee. No venue *pays*
> a 2 bp maker rebate at retail tier.
> 2. **The repo's own friction kernel treats commission as additive cost.** `prod/bingx/friction.py:196`
> `net_friction_quote = actual_fee_quote + slippage`; the live-sweep doc reports
> `Total captured fees $2,595.69 = sum(commission_quote)` as fees the venue **captured from us**.
>
> **Corrected economics for the spec:** the §0 savings table assumed **1 bp** maker. Measured is
> **2 bp** maker. Maker-both round-trip = **~4 bp** (2+2) vs taker round-trip **~10 bp** (5.016×2).
> The savings case **survives** (~6 bp/RT saved) but the per-side maker number **doubles vs the
> assumption** — it is NOT a 3× improvement, and there is **no rebate**. Update SPEC §0 accordingly.
> _(n=1; a second fill still worth capturing to confirm.)_
**Timestamp:** 2026-07-14T19:18:28.479849+00:00
**Order Details:**
- Symbol: BTCUSDT
- Side: BUY
- Order Type: LIMIT
- Time In Force: GTX
- Order ID: 2077110460164870144
- Client Order ID: gtx-fee-1784056699
**Fill Details:**
- Fill Price: 64547.5
- Fill Quantity: 0.0001
- Notional: 6.45475 USDT
- Commission: -0.001291 USDT ← BingX sign convention: **negative = debit (a cost we paid)**
**Measured Maker Fee: +2.00 bps** (magnitude `2.000077…` bps; sign corrected from omp's `-2.00 bps`)
**Comparison:**
- Assumption (maker), SPEC §0: 1 bp → **REFUTED, real is 2 bp (2× the assumption)**
- Measured taker baseline: 5.016 bps
- This measurement (maker): **+2.00 bps cost** (= BingX published 0.02% maker rate, confirmed)
**Raw Venue Response:**
```json
{
"symbol": "BTC-USDT",
"orderId": 2077110460164870144,
"side": "BUY",
"positionSide": "BOTH",
"type": "LIMIT",
"origQty": "0.0001",
"price": "64547.5",
"executedQty": "0.0001",
"avgPrice": "64547.5",
"cumQuote": "6",
"stopPrice": "",
"profit": "0.0000",
"commission": "-0.001291",
"status": "FILLED",
"time": 1784056699000,
"updateTime": 1784056707000,
"clientOrderId": "gtx-fee-1784056699",
"leverage": "3X",
"takeProfit": {
"type": "TAKE_PROFIT",
"quantity": 0,
"stopPrice": 0,
"price": 0,
"workingType": "",
"stopGuaranteed": "false"
},
"stopLoss": {
"type": "STOP",
"quantity": 0,
"stopPrice": 0,
"price": 0,
"workingType": "",
"stopGuaranteed": "false"
},
"advanceAttr": 0,
"positionID": 2077110178940981248,
"takeProfitEntrustPrice": 0,
"stopLossEntrustPrice": 0,
"orderType": "",
"workingType": "MARK_PRICE",
"onlyOnePosition": true,
"reduceOnly": false,
"postOnly": false,
"stopGuaranteed": "false",
"triggerOrderId": 0,
"trailingStopRate": 0,
"trailingStopDistance": 0,
"is_twap": false,
"mainOrderId": "",
"priceRate": "",
"actPrice": "",
"closePosition": "false"
}
```