Слайс ішінде: сіздің жоспарлаушыңыз бен биржа арасындағы child-order тактикасы
Almgren-Chriss траекториясы сізге бір санды береді: келесі бес минутта 4.2 BTC сатыңыз. VWAP кестесі дәл сол типтес санды басқа негіздемемен береді. Екеуі де одан кейін не болатыны туралы ештеңе айтпайды — сол 4.2 BTC бір нарықтық ордер ретінде кітапқа тиеді ме, maker комиссиясын жинап touch деңгейінде тұрады ма, 0.3 BTC көрсетілім артында жасырынады ма, әлде ауытқып жатқан баға белгісін қуалап он бір рет қайта бағаланады ма. Осы екінші шешім деңгейі — тактика деңгейі, және комиссия басым крипто кітаптарында ол әдетте жоғарыдағы жоспарлаушы таңдауынан гөрі слайс басына көбірек PnL қозғайды. Жоспарлаушының интервал бюджеттері TWAP пен жақсы баптанған Almgren-Chriss арасында бүкіл parent ордер бойынша ықпалдың бірнеше базистік пунктіне ғана ерекшеленеді; ал сіз maker ретінде жасай алатын слайстарда taker комиссиясын төлеу немесе абайсыз қайта бағалау арқылы кезек позициясын жоғалту сағатына сонша шығынға түседі. Бұл мақала әркім қолданатын, бірақ дерлік ешкім жазбаша тіркемейтін деңгей туралы — әрбір child ордердің кітапқа қалай тиетінін шешетін күй машинасы туралы.
Екі деңгей, бір тар интерфейс
Lehalle мен Laruelle-дің Market Microstructure in Practice (2-ші басылым, 2018) кітабы әрбір орындау deski келетін нәрсені формализациялайды: уақыт бойынша көлемді бөлетін стратегиялық деңгей (жоспарлаушы) және әр бөлуді тірі кітапқа қарсы өңдейтін тактикалық деңгей (микротрейдер). Бұл бөліну эстетикалық емес — екі деңгей әртүрлі сағаттарда және әртүрлі деректерде өмір сүреді. Жоспарлаушы минуттармен ойлайды, волатильділік пен көлем болжамдарын тұтынады және вариациялық есепті шешеді. Тактика деңгейі миллисекундтан секундқа дейінгі уақытпен ойлайды, L2 дельталарын және кезек бағаларын тұтынады және кішкентай тоқтату есептерінің тізбегін шешеді.

Олардың арасындағы интерфейс тар болуы керек. Төмен қарай, слайс бойынша:
- бюджет — осы интервалда орындалатын көлем (Almgren-Chriss-тің -і немесе VWAP-тың көлем қисығының өсімі);
- терезе — слайс ұзақтығы;
- шұғылдық — Almgren-Chriss үшін табиғи кандидат , ол тәуекелден бас тартуды, волатильділікті және өтімділікті бір қарқынға сығады; VWAP жоспарлаушысы үшін бұл әдетте жолақ қашықтығы ("біз мақсатты қисықтан 1.8% артта қалдық").
Жоғары қарай: уақыт белгілері мен комиссиялары бар толтырулар, орындалмаған қалдық және интервал келу ортасына қатысты өлшенген слайс деңгейіндегі орындау шығыны. Соңғысы маңызды: жоспарлаушының ықпал параметрі қарқынымен өтімділікті талап етудің қанша тұруы керек екенін бағаны бұрыннан белгілейді. Тактика деңгейінің бүкіл жұмыс сипаттамасы бір жолда: толтыруларды -модельдік құннан жақсырақ жағдайда жүзеге асыру, parent ордердің бар екенін ашпай. Егер сіздің өлшенген слайс шығыныңыз тұрақты түрде модель құнынан жоғары болса, сіздің калибрленген -ыңыз төмендей алады, жоспарлаушы жылдамдайды, және бүкіл стек жақсарады. Ал слайс шығынын кесте құнынан бөлек өлшей алмасаңыз, екі деңгейді де баптай алмайсыз — сізде бір бұлыңғыр сан және екі тетік бар.
Қалдық саясаты да келісімшарттың бөлігі. Слайс орындалмаған көлеммен аяқталғанда, тактика деңгейі мәжбүрлі түрде аяқтайды (қалдықты кросстау — deadline шұғылдығы кезіндегі әдепкі) немесе оны қалған слайстар бойынша қайта амортизациялау үшін жоспарлаушыға қайтарады (низкий- кестенің басында қолайлы, deadline жақын жерде улы — өйткені қайта амортизация үнсіз орасан зор соңғы слайсқа айналады).
Эскалация сатысы: алдымен пассив, deadline бойынша агрессив
Бұл саладағы ең ескі нәтиже — Harris (1998), "Optimal dynamic order submission strategies in some stylized trading problems" (Financial Markets, Institutions & Instruments 7(2)): мәмілені deadline-ге дейін аяқтауы керек өтімділік трейдері үшін оңтайлы стратегия динамикалық — уақыт арзан болғанда лимиттік ордерлермен кітапта тұру, deadline жақындаған сайын нарыққа қарай қайта бағалау және соңында кросстау. Кез келген production тактика қозғалтқышы осы пішіннің ұрпағы: touch-та post ету, ескіру, эскалация, кросстау. Заманауи комиссия кестелері мен кезек динамикасы қосатыны — әр өтудің дәл қашан атқарылатынының арифметикасы.
Кросстау үшін break-even
Бірлікке шаққандағы жұмыс, ағымдағы ортаға қатысты бағалар, сатып алу үшін. Қазір кросстау жарты spread плюс taker комиссиясына тұрады:
Bid-те терезесі бойынша post ету ықтималдығымен толады; толтыру жарты spread-ті табады және maker комиссиясын төлейді (рибейт болса теріс). Толтыру болмаса, терезе соңында, баға сізге қарсы орта есеппен жылжығаннан кейін кросстау керек — қатаң оң, өйткені толтырусыздық пен қолайсыз дрейф бір оқиға: bid-іңіз соғылмайды, өйткені нарық одан алшақтап кетеді. Күтілетін post ету құны:
Post ету кросстаудан жақсырақ, егер
мұндағы — сыйлық: taking орнына making арқылы аласыз алатын толық round-trip — spread плюс комиссия айырмашылығы. Бұл — орындаудың maker-taker экономикасын басқаратын дәл сол break-even, бір слайсқа дейін сығылған.
Сандар, BTCUSDT перпетуалы: орта $100,000, spread бір тик s = \0.10f_m = $20f_t = $50\Pi = 0.10 + 50 - 20 = $30.10 \approx 3\sigma_{\text{day}} = $3{,}000\delta(\tau) \approx 0.6,\sigma_{\text{day}}\sqrt{\tau/86400}$ алайық (0.6 — сіз калибрлеуіңіз керек, сенбеуіңіз керек қолайсыз таңдау шегерімі):
- с: \delta \approx \19p^* = 19/49 \approx 0.39$. Тек 10 секунд ішінде кемінде 39% толтыру күтсеңіз ғана post етіңіз.
- с: \delta \approx \47p^* = 47/77 \approx 0.61$.
- 2 б.п. комиссия орнына 1 б.п. maker рибейтімен (f_m = -\10\Pi = $60.10p^* \approx 0.24$-ке дейін төмендейді.
Осыдан екі құрылымдық факт шығады. Біріншіден, сияқты өседі, ал тұрақты болып қалады, сондықтан : шыдамдылықтың қатаң мерзімі бар, ал ескіру таймері эвристика емес, екі қисықтың қиылысу нүктесі — сіздің бағаланған -ыңыз (алдыңғы кезек кеміген сайын қанығатын, ойыс) -ға қарсы (өсіп келе жатқан). Екіншіден, сіз сауда жасайтын комиссия деңгейі баспалдақты физикалық түрде жылжытады. Taker комиссияларын қысқартатын деңгей жаңартуы сіздің оңтайлы тактикаңызды агрессивтірек етеді — көбісі мұны тек VIP қайта деңгейленуден кейін толтыру статистикасы өзгергенде ғана байқайды.
Cont пен Kukanov, "Optimal order placement in limit order markets" (Quantitative Finance 17(1), 2017; arXiv 2012), мұны бір кезеңде қатаң етеді: нарықтық және лимиттік ордерлер арасында бөлінген бірлікті орындаудың күтілетін құнын (бір немесе бірнеше алаңда) шығын үшін айыппұлмен минимизациялау. Бір алаңдық шешім анық және newsvendor құрылымына ие: оңтайлы лимиттік ордер өлшемі кезектен шығу үлестірімімен басқарылады — алдыңғы кезек күтілетін ағыннан аз болғанда өлшемді агрессивті түрде post етіңіз, ал құйрық тәуекелін нарықтық ордерлермен жабыңыз. Олардың көп алаңдық кеңеюі стохастикалық жуықтаумен шешіледі және кез келген smart order router-дің пассивті бөлу логикасының интеллектуалдық өзегі болып табылады. Тактика қозғалтқышы үшін практикалық түсінік: жоғарыдағы break-even-дегі тұрақты емес — ол кезек позициясы мен дренаж қарқынының функциясы, сондықтан тактика деңгейі кезек позициясы бағалаушысын бірінші дәрежелі кіріс ретінде тұтынуы керек.

Шұғылдық параметрі осы бүкіл сатыны сығады. Жоспарлаушыдан жоғары дегеніміз сипаттамалық уақыт қысқа: терезелер кішірейеді, өседі, және қозғалтқыш тікелей кросстауға өтеді — дұрыс, өйткені жоспарлаушы қор тәуекелі комиссия үнемдеуінен басым екенін бұрыннан жариялаған. Төмен пассив фазаны созады. Тактика деңгейі шұғылдықты нарық туралы өз көзқарасынан ешқашан қайта шығармауы керек; бұл — жоспарлаушының жұмысы, ал оны қайталау екі келіспейтін контроллер жасайды.
Кезек позициясын жандырмай қайта бағалау
Post еткен соң, баға белгісі ауытқиды. Оны аңғырттықпен қуалау — болдырмау, жаңа touch-та қайта орналастыру, қайталау — тактика қозғалтқыштарының post етуді ақтаған сол толтыру ықтималдығын үнсіз жоятын жолы. Кезек позициясы — өлшенетін долларлық құны бар актив (Moallemi мен Yuan, 2016, оған баға қояды: өтімді FIFO кітаптарындағы кезектің алдындағы позициялар spread-тің елеулі бөлігіне тұрады), және әрбір қайта бағалау шешімі — мәміле: ағымдағы кезек позицияңызды сатып, басқа баға деңгейінің артында біреуін сатып алу. Мәміле тек жаңа деңгейдің құны ескісінен плюс хабарлама шығындарынан асқанда ғана жасауға тұрарлық. Бұл әрбір алаңның amend-і сіздің кезектегі орныңызға нақты не істейтінін білуді талап етеді — ал жауап керемет біркелкі емес.
CME Globex ең таза семантиканы құжаттайды: ордер көлемін азайту уақыт басымдығын сақтайды; көлемді арттыру немесе бағаны өзгерту сізді кезектің артына жібереді. Бұл — сілтемелік модель: көлем-төмен тегін, қалғанының бәрі — қайта кезекке тұру.
Binance спот тарихи түрде тек POST /api/v3/order/cancelReplace ұсынды — атомды көрінетін, айқын транзакциялық емес болдырмау-плюс-жаңа. Екі режим: STOP_ON_FAILURE (әдепкі — болдырмау сәтсіз болса, жаңа ордер жоқ) және ALLOW_FAILURE (болдырмау сәтсіз болса да жаңа ордер орналастыру — сәлем, кездейсоқ қос экспозиция). Операция ішінара сәтті болуы мүмкін, HTTP 409 арқылы сигналданады, сондықтан сіздің OMS-іңіз екі аяқты да тәуелсіз түрде салыстыруы керек; және жаңа ордер әрқашан жаңа кезек өмірін бастайды. Содан кейін 2025 жылы Binance Order Amend Keep Priority (PUT /api/v3/order/amend/keepPriority) шығарды: көлемді орнында азайту, уақыт басымдығын сақтау, нөлдік орындалмаған-ордер-саны құнымен. CME семантикасы, он бес жылдан кейін — және тек көлем-төмен жартысы.
Binance USDT-M фьючерстерінде нағыз modify эндпойнты бар (PUT /fapi/v1/order), бірақ ұсақ шрифтті оқыңыз: тек LIMIT ордерлер, price де, quantity да жіберілуі керек, және "модификацияланған ордерлер сәйкестендіру кезегінде қайта реттеледі" — құжаттама тіпті таза көлем азайтулары үшін де басымдықты сақтауға уәде бермейді. Әрбір фьючерс модификациясын, сізге бір хабарламаны үнемдеп, ордер ID-ін сақтап қалатын кезек ысырабы ретінде қараңыз. Білуге тұрарлық бір өткір қыр: GTX (тек-post) ордерін кросстайтын бағаға модификациялау ордерді болдырмаудың орнына тоқтатады — мұны тексермейтін peg іске асыруы кейде өзін жоқ қылып amend жасайды.
OKX POST /api/v5/trade/amend-order ашады (newPx, newSz, amend сәтсіздігінде автоболдырмау үшін cxlOnFail бар). Бұл — бір хабарлама, ордер ID-ін сақтайды және асинхронды түрде растайды — sCode = 0 "сұраныс қабылданды" дегенді білдіреді, ал нақты нәтиже ордерлер каналында amendResult ретінде келеді. Ашық құжаттама нақты көрсетпейтін нәрсе — кезек басымдығының тәртібі. Бұл құжаттама олқылығын оптимизммен толтырмаңыз. Оны өлшеңіз: тыныш деңгейде екі маркер ордерін post етіп, біреуінің көлемін төмендетіп amend жасаңыз және бірнеше жүз сынақ бойынша қайсысы бірінші толатынын бақылаңыз. Сол деректер қолыңызда болғанша, консервативті болжам — кез келген баға өзгерісі барлық жерде қайта кезектейді, көлем-төмен басымдықты тек айқын құжатталған жерде ғана сақтайды — жалғыз қорғалатын болжам.

Саясат салдары:
- Гистерезис, пег емес. Touch тыныш бағаңыздан тиктен көп жылжыған кезде ғана қайта бағалаңыз. Жолақ ішінде дрейф — шу, ал сіздің кезек позицияңыз бір тиктен қымбат баға жақсартуынан құндырақ. Ақылға қонымды бастапқы жолақ — қысқа мерзімді волатильділікпен масштабталған 1–3 тик; дұрыс жолақ шекті қайта бағалауды EV-бейтарап етеді: , мұндағы — Moallemi-Yuan стиліндегі кезек құны, ал — сіздің қарқын-шектеу көлеңке бағаңыз. Amend/cancel-replace операциялары екі Binance алаңында да ордер-қарқын бюджетін тұтынады; әрбір тикте пег жасайтын тактика қозғалтқышы жүйеңіздің қалғанын хабарлама сыйымдылығынан айырады.
- Amend down, ешқашан cancel-repost down емес. Жоспарлаушы слайс бюджетін ұшу кезінде қысқартқанда (көлем құрғап бара жатқанын көрген POV жоспарлаушысы, ішінара толтырулардан кейінгі Almgren-Chriss қайта шешімі), басымдықты сақтайтын жол бар жерде оны қолданыңыз. Бұл — бүкіл деңгейдегі жалғыз тегін түскі ас.
- Қайта бағалаудағы асимметриялық шұғылдық. Нарыққа қарай (қуалау) қайта бағалау сіздің кезегіңізді нашар бағада қалпына келтіреді — ол тек эскалация логикасынан, өз таймерінде іске қосылуы керек. (Нарық сізге келгендегі) алшақ қайта бағалау — сыйлық, оны тек пассив жолақ арқылы алыңыз, өйткені сіздің ағымдағы деңгейіңіз бәрібір толуға жақын.
Айсберглер, көрсетілім өлшемі және не сіздің ниетіңізді ашады
Көрсетілім өлшемі — үшінші шешім, және бұл нағыз екі жақты мәміле, тегін жасырын түйме емес. Эмпирикалық жазба:
- Frey мен Sandås ("The Impact of Iceberg Orders in Limit Order Books", 2009 жұмыс құжаты; Quarterly Journal of Finance, 2017), Xetra деректерінде: айсберг ордерлер жіберілген көлемнің 9.3%-ын және орындалған көлемнің 15.9%-ын құрады, әдеттегі лимиттік ордерлердің 12–20 еселенген мөлшерінде болды, және — түйіні — басқа қатысушылар айсбергті анықтағанда, олар сәйкес нарықтық ордерлермен жауап береді. Жасырын өлшем, бір рет анықталғаннан кейін, ағынды тартады: жасырын өтімділік ізденісі екі бағытта да жұмыс істейді.
- Bessembinder, Panayides және Venkataraman ("Hidden liquidity: an analysis of order exposure strategies in electronic stock markets", JFE 94(3), 2009), Euronext Paris бойынша, мұнда жасырын ордерлер сынама көлемінің 44%-ын құрады: жасыру орындау шығынын төмендетеді, бірақ сонымен қатар толық орындалу ықтималдығын да төмендетеді және аяқтау уақытын ұзартады. Ашық болу толтыруларды сатып алады және оларды ықпалмен төлейді; опция теория болжағандай дәл қолданылады — агрессивті ордерлер қарсы тараптарды тарту үшін ашылады, шыдамды өлшем жасырынады.
- Esser және Mönch ("The navigation of an iceberg", Finance Research Letters 4(2), 2007) шың өлшемін оптимизация ретінде қарастырады: үлкенірек көрсетілім жылдамырақ толады, кішірек көрсетілім азырақ ашады, ал оптимум ішкі.
Алдымен механика, өйткені олар оптимизацияны байланыстырады: нативті айсбергтерді қолдайтын дерлік әрбір алаңда (Binance спот icebergQty арқылы, OKX өзінің iceberg алгоритмдік ордерлері арқылы), көрінетін шыңның әрбір толықтырылуы сол бағада кезектің артына кіреді. Сондықтан айсберг "жасырын өлшемі бар бір ордер" емес — ол автоматты түрде іске қосылатын, әрқайсысы толық кезек-күтуін төлейтін кіші ордерлердің тізбегі. Жоғарыдағы комиссия break-even-де мұның маңызы бар: шың бойынша тиімді — сіздің бастапқы позицияңыздікі емес, кезектің артындағы толтыру ықтималдығы. Терең кезектер кіші шыңдарды екі рет жазалайды — баяу толтырулар және қосымша толықтырулардың қолайсыз таңдау құны.
Содан кейін сигналдау мәселесі. Frey мен Sandås-тың өз анықтау әдісі ескерту хикаясы: олардың жиілікшіл детекторы екі ең көп таралған іске асыру салғырттық үлгісіне негізделеді — тұрақты шың өлшемі және орындалатын мәміленің уақыт белгісіне сәйкес келетін толықтыру уақыт белгілері. Осы детекторды жүргізетін кез келген қатысушы (ал крипто алаңдарда көбісі жүргізеді — биржаның өз сәйкестендіру метадеректері бұл орналастырылған ағын үшін тіпті оңайырақ етеді) сіздің жасырын өлшеміңізді бірнеше толықтыруда қайта құрастырады. Мен оны нақты өмірде қаншалықты жиі көретініме қарай реттелген leak векторлары:
- Тұрақты немесе дөңгелек көрсетілім өлшемдері (0.5 BTC, әр уақытта).
- Толық шыңды орындаудан кейінгі лезде, детерминистік толықтыру — сол-уақыт-белгісі қолтаңбасы.
- Детерминистік эскалация таймерлері: әрбір слайстың дәл 30 секундында кросстау, және лента метроном көрсетеді.
- Тіркелген қайта бағалау кідірісі мен жолағы — сіздің amend қарқыныңыз сандық саусақ іздер мен трейдерді сәйкестендіру тақырыбы болып табылатын ордер өлшемдеріңіз сияқты сәйкестендіргіш саусақ ізі.
Анықталудың құны гипотетикалық емес. Van Kervel мен Menkveld ("High-frequency trading around large institutional orders", Journal of Finance 74(3), 2019) HFT-лар алдымен институционалдық метаордерлерге қарсы жайғасатынын көрсетеді — сіздің пассив тактикаңыз тұтынатын өтімділікті ұсына отырып — содан кейін оның тұрақтылығы ақпаратты ашқаннан кейін ордермен бірге сауда жасауға ауысады, қалдықты back-run жасап, parent-тің құнын елеулі түрде арттырады. Олардың институттары анықтау тәуекеліне қарсы спекулятивті пайданы саудалау арқылы жауап берді. Сіздің тактика деңгейіңіз дәл сол таңдаудың іске асырылатын жері: көрсетілім өлшемін кездейсоқтандырыңыз (волатильділікпен масштабталған базаның біркелкі 30–70%-ы жақсы жұмыс істейді), әрбір таймерді ±20–30%-ға jitter жасаңыз, кейде толықтырудың күтуіне мүмкіндік беріңіз, және екі child ордерге ешқашан бір өлшемді, бір таймер фазасын және бір кідіріс профилін ортақтастырмаңыз. Мұның ешқайсысы өлшенетін толтыру сапасына тұрмайды; барлығы сіздің ағыныңызға детектор баптайтын кез келген адам үшін шу деңгейін көтереді.
Минималды тактика қозғалтқышы
Жоғарыдағы бүкіл деңгей слайс бойынша шағын күй машинасына сығылады: IDLE → POSTED → (қайта бағалау циклі) → CROSSING → DONE, кірудегі break-even қақпасымен, post еткен кездегі гистерезис жолағымен және deadline эскалациясымен. Төмендегі нұсқа әдейі минималды — алаң адаптерлері жоқ, айсберг басқаруы жоқ — бірақ ол оқиғаға негізделген және жанама әсерсіз, сондықтан ол толтыру-симуляция сатысындағы rung-4 кезек-хабардар симуляторына тікелей түседі: симулятор on_tick/on_fill шақырады және әрекеттерді post → GTX/post-only, cross → IOC, cancel_replace/amend_down → жоғарыдағы матрицадан алаңның семантикасы ретінде түсіндіреді.
import math
from dataclasses import dataclass
from enum import Enum, auto
class State(Enum):
IDLE = auto(); POSTED = auto(); CROSSING = auto(); DONE = auto()
@dataclass
class Fees:
maker: float # $ per unit; negative = rebate
taker: float # $ per unit
@dataclass
class Cfg:
tick: float
sigma_1s: float # $ per sqrt(second), from your live vol estimator
adverse_frac: float = 0.6 # E[adverse move | no fill] ~ 0.6 * sigma; calibrate
reprice_band: float = 2.0 # ticks of touch drift tolerated before repricing
escalate_frac: float = 0.7 # cross the remainder at this fraction of the window
class SliceTactic:
"""One instance per scheduler slice. Drive it from a fill simulator or OMS."""
def __init__(self, side: str, qty: float, window: float, fees: Fees, cfg: Cfg):
self.side, self.qty, self.window = side, qty, window
self.fees, self.cfg = fees, cfg
self.filled, self.state, self.px, self.t0 = 0.0, State.IDLE, None, None
def p_star(self, spread: float, tau: float) -> float:
"""Break-even fill probability for posting over a window tau."""
delta = self.cfg.adverse_frac * self.cfg.sigma_1s * math.sqrt(tau)
prize = spread + self.fees.taker - self.fees.maker
return delta / (prize + delta)
def p_fill(self, queue_ahead: float, drain: float, tau: float) -> float:
"""Crude queue-drain estimate; swap in your calibrated fill model."""
if drain <= 0: return 0.0
return min(1.0, drain * tau / max(queue_ahead + self.qty, 1e-9))
def on_tick(self, t, bid, ask, queue_ahead, drain):
if self.state == State.DONE: return []
if self.t0 is None: self.t0 = t
left = self.qty - self.filled
elapsed, remain = t - self.t0, self.window - (t - self.t0)
touch = bid if self.side == "buy" else ask
if elapsed >= self.cfg.escalate_frac * self.window and left > 0:
self.state = State.CROSSING # deadline: pay up, finish
return [("cross", left)]
if self.state == State.IDLE:
if self.p_fill(queue_ahead, drain, remain) >= self.p_star(ask - bid, remain):
self.state, self.px = State.POSTED, touch
return [("post", touch, left)] # GTX / post-only
self.state = State.CROSSING # posting is -EV here
return [("cross", left)]
if self.state == State.POSTED:
if abs(touch - self.px) / self.cfg.tick > self.cfg.reprice_band:
self.px = touch # hysteresis breached:
return [("cancel_replace", touch)] # accept the queue reset
return []
def on_fill(self, t, fill_qty):
self.filled += fill_qty
if self.filled >= self.qty - 1e-9:
self.state = State.DONE
return [("slice_done", self.filled)]
return []
def on_budget_cut(self, new_qty):
"""Scheduler revised the slice down: amend-down keeps queue priority
where documented (CME, Binance spot amend/keepPriority)."""
self.qty = new_qty
left = new_qty - self.filled
return [("amend_down", left)] if left > 0 else [("cancel",)]
Үш адал ескерту. Мұндағы p_fill — орынбасар қатынас; production-да ол толтыру-симуляция мақаласындағы бумаланған, тірі калибрленген модель болуы керек, өйткені бүкіл post/cross қақпасы тек сол бағаның сапасы шамасында ғана жақсы. adverse_frac мақаладағы ең қиын шаманы жасырады ( режимге тәуелді және дәл post ету ең тартымды болғанда шарықтайды); оны өз толтыру-жоқ нәтижелеріңізден, волатильділік режимі бойынша бумаланған түрде бағалаңыз. Ал жоғарыдағы қозғалтқыш cancel-replace арқылы шартсыз қайта бағаланады — алаңды ескеретін нұсқа көлем-төмен өзгерістерін басымдықты сақтайтын жол арқылы бағыттауы және әрбір әрекетті хабарлама бюджетіне қарсы есептеуі керек.
Кез келген параметрге сенбес бұрын оны replay таспасына қарсы симуляторда іске қосыңыз. Маңызды эксперимент: жоспарлаушыны бекітіп, escalate_frac және reprice_band параметрлерін сканерлеп, слайс шығынын -модельдік құнға қарсы сызып шығу. Беттің оңтайлы параметрлердің кең жолақтары бар үстірті бар, және екі жар қабағы бар: эскалацияны кештетіп өткізу (импульске кірген орындалмаған қалдықтар) және қайта бағалауды тым құмарлықпен жасау (барлық кезек құны жанып кетеді). Сіз жар қабақтарыңыздың қайда екенін production сізге тапқанша білгіңіз келеді.
Не есте сақтау керек
- Екі деңгей, бір келісімшарт. Жоспарлаушы қанша және қашанға дейін екенін шешеді; тактика қалай екенін шешеді. Интерфейс — төмен қарай бюджет, терезе, шұғылдық; жоғары қарай толтырулар мен интервал келуіне қатысты слайс шығыны. Шығынды деңгейге жатқыза алмасаңыз, екеуін де баптай алмайсыз.
- Post/cross қақпасы — арифметика, түйсік емес. болғанда болса ғана post етіңіз. Тар крипто кітаптарында сыйлық — комиссия айырмашылығы, сондықтан комиссия деңгейіңіз тактикаңызды белгілейді — әр қайта деңгейленуден кейін сатыны қайта баптаңыз.
- Ескіру таймерлері — екі қисықтың қиылысу нүктесі — бойынша өсетін қолайсыз таңдауға қарсы қанығатын толтыру ықтималдығы — фольклорлық тұрақтылар емес.
- Кезек позициясы — актив; оны жұмсамас бұрын әрбір алаңның amend семантикасын біліңіз. CME: көлем-төмен басымдықты сақтайды. Binance спот: cancelReplace әрқашан қайта кезектейді, 2025-тің amend-keepPriority-і оны көлем қысқартулары үшін сақтайды. Binance фьючерстері: әрбір модификация қайта кезектейді. OKX: құжатталмаған — өлшеңіз, ал сол уақытта ең жаманын болжаңыз.
- Айсберглер — кезек-артындағы ордерлер тізбегі, ал салғырттары оқылады. Тұрақты шыңдар мен сол-уақыт-белгісі толықтырулары — жарияланған анықтау қолтаңбасы; өлшемдер мен таймерлерді кездейсоқтандырыңыз, әйтпесе back-run болуға дайын болыңыз.
- Күй машинасын алдымен толтыру симуляторыңызға жіберіңіз. Тактика деңгейі — стектің backtest пен production ең қатты алшақтайтын бөлігі — дәл сол себепті ол кейін жалғанатын емес, симулятордың ішінде болуы керек.
Пайдалы сілтемелер
- Harris, L. — Optimal Dynamic Order Submission Strategies in Some Stylized Trading Problems, Financial Markets, Institutions & Instruments 7(2), 1-76 (1998)
- Cont, R., Kukanov, A. — Optimal Order Placement in Limit Order Markets, Quantitative Finance 17(1), 21-39 (2017)
- Frey, S., Sandås, P. — The Impact of Iceberg Orders in Limit Order Books (2009)
- Bessembinder, H., Panayides, M., Venkataraman, K. — Hidden Liquidity: An Analysis of Order Exposure Strategies in Electronic Stock Markets, Journal of Financial Economics 94(3), 361-383 (2009)
- van Kervel, V., Menkveld, A. — High-Frequency Trading around Large Institutional Orders, Journal of Finance 74(3), 1091-1137 (2019)
- Moallemi, C., Yuan, K. — A Model for Queue Position Valuation in a Limit Order Book (2016)
- Lehalle, C.-A. — Market Microstructure Knowledge Needed for Controlling an Intra-Day Trading Process (2011)
- Binance Spot API — Order Amend Keep Priority
- Binance Spot API — Trading endpoints (cancelReplace semantics)
- Binance USDT-M Futures API — Modify Order
- OKX API v5 — Amend order
- CME Group — Order Functionalities (modification and time priority)
Citation
@article{soloviov2026childordertactics,
author = {Soloviov, Eugen},
title = {Inside the slice: child-order tactics between your scheduler and the exchange},
year = {2026},
url = {https://marketmaker.cc/blog/child-order-execution-tactics},
description = {The tactics layer between execution schedulers and the exchange: passive-then-aggressive escalation with maker-taker break-even math, amend vs cancel-replace queue semantics across venues, iceberg anti-signaling, and a per-slice Python state machine for fill simulators.}
}
Authors
Trading-systems engineer
Trading-systems engineer building bots since 2017: cross-exchange arbitrage (connected up to 30 venues), cointegration-based pairs arbitrage across spot and futures, scalping, news and sentiment-driven strategies, trend algorithms, and portfolio management and balancing algorithms. Also builds sub-millisecond order execution, big-data warehouses, backtesting engines, AI agents, and trading interfaces (incl. open-source profitmaker.cc). Stack: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, architecture.