Files
sentiment-engine/prod/docs/BINGX_MAKER_FEE_MEASURED_20260714.md
Codex 2022dc9fe2 exec(Q1): correct maker-fee sign — +2.00 bps COST not rebate (BingX neg=debit); + omp navigation map
omp's raw VST capture is correct (2.00 bps = exactly BingX 0.02% published maker rate).
Sign was inverted: BingX reports commission negative for a DEBIT, so -0.001291 USDT is a
fee PAID, not a rebate. Refutes SPEC §0 '1 bp maker' assumption (real = 2 bp); maker-both
RT ~4 bp vs taker ~10 bp — savings case survives, no rebate. Adds EXEC_NAVIGATION_MAP_FOR_OMP.md
to bound omp's searches to prod/bingx/ (was grepping Nautilus framework internals).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-14 22:12:15 +02:00

3.4 KiB
Raw Blame 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:

{
  "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"
}