58 lines
3.2 KiB
Markdown
58 lines
3.2 KiB
Markdown
|
|
# 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".
|