From dcbd65782d67178466492e849ddf78393d93e89b Mon Sep 17 00:00:00 2001 From: Codex Date: Tue, 14 Jul 2026 20:00:25 +0200 Subject: [PATCH] =?UTF-8?q?docs(exec):=20Q1=20commission=20cold-start=20pa?= =?UTF-8?q?ck=20for=20omp=20=E2=80=94=20measure=20real=20BingX=20maker=20f?= =?UTF-8?q?ee?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 (1M context) --- prod/docs/COMMISSION_EXEC_Q1_OMP_20260714.md | 57 ++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 prod/docs/COMMISSION_EXEC_Q1_OMP_20260714.md diff --git a/prod/docs/COMMISSION_EXEC_Q1_OMP_20260714.md b/prod/docs/COMMISSION_EXEC_Q1_OMP_20260714.md new file mode 100644 index 0000000..92312d0 --- /dev/null +++ b/prod/docs/COMMISSION_EXEC_Q1_OMP_20260714.md @@ -0,0 +1,57 @@ +# 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 `, never `git add .`). +Then: `h5i msg send Fable ""` (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".