Files
sentiment-engine/prod/docs/COMMISSION_EXEC_Q1_OMP_20260714.md
2026-07-14 20:00:25 +02:00

3.2 KiB
Raw Blame History

COMMISSION: Q1 — measure the real BingX maker fee (cold-start pack for omp)

From: Fable (integrator) · operator-ordered · 2026-07-14 Why you: PASS agents token-dead until the 22nd, codex until the 21st. You're up. Scope: ONE task. Narrow on purpose. Finish it before touching anything else.

The task in one sentence

Place ONE tiny post-only (GTX) limit order on BingX VST (testnet), get it filled as maker, read back the fee the venue actually charged, and write the number down.

Why it matters (so you know the stakes without needing more context)

The Unified Execution Layer spec (prod/docs/SPEC_UNIFIED_EXEC_LAYER_20260714.md — read §0, §15 tier table, §17-Q1; skim the rest) plans to cut trading fees roughly in half by using maker orders. The taker fee is MEASURED: 5.016 bps over 1,455 live fills. The maker fee is an ASSUMPTION: 1 bp. A ~$91K–$231K savings case rests on that assumption. Your one fill replaces the assumption with a measurement. It is the highest value-per-effort task in the entire program right now.

How (use what exists — do not build new machinery)

  1. Work in /mnt/dolphinng5_predict. Python: /home/dolphin/siloqy_env/bin/python3.
  2. The characterization harness ALREADY places GTX orders on VST: prod/bingx/characterization.py (see also prod/bingx/execution.py, and the methodology in prod/docs/BingX_FILL_CHARACTERIZATION_AND_ADVANTAGES.md). VST credentials/env come the same way that harness gets them — do not invent a credential path.
  3. Symbol: BTCUSDT (tick 0.1, step/min qty 0.0001 — quantize BOTH before submit). Size: minimum viable (≈0.0001 BTC). Place a GTX BUY just below the best bid (it must REST, not cross — GTX cancels itself if it would cross; that's fine, retry a bit deeper). Wait for the market to fill it (VST BTC trades ~5/sec; if it doesn't fill in ~10 min, cancel, reprice nearer the touch, repeat).
  4. When filled, read the fee from the venue: the fill/order record's commission fields (REST order query and/or the user-stream fill event). Compute fee_bps = commission_quote / notional_quote × 10000. Capture the RAW response.
  5. CLEANUP (non-negotiable): cancel any open orders on the symbol; flatten any position with MARKET reduceOnly=true positionSide=BOTH; verify flat. The characterization doc's cleanup discipline applies verbatim.
  6. Repeat for ONE more fill if cheap to do (n=2 beats n=1); do not run a campaign.

Deliverable

prod/docs/BINGX_MAKER_FEE_MEASURED_20260714.md containing: the measured fee_bps (per fill, with raw venue responses quoted), order ids, timestamps, symbol/size/px, and one sentence comparing to the 1 bp assumption and the 5.016 bps taker baseline. Commit it (stage YOUR file only — git add <file>, never git add .). Then: h5i msg send Fable "<the number + doc path>" (exact-case handle: Fable).

Hard rules

  • VST ONLY. If any env var smells like mainnet (DOLPHIN_BINGX_ENV must be VST, ALLOW_MAINNET must be 0), STOP and report.
  • Do NOT touch: any running process, prod/clean_arch/** runtime modules, BLUE, ClickHouse dolphin.*. Your writes: the doc + tiny VST orders, nothing else.
  • If anything is ambiguous, STOP and ask (h5i to Fable) rather than improvise. Unknown is never "probably fine".