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

58 lines
3.2 KiB
Markdown
Raw Normal View 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".