Négy szám, mindet a saját paper-trading rendszerünkön mértük, egy stratégián, 1 perces BTCUSDT perpetual jelekkel, 31 nap és 1,418 megbízás alatt. A gyertyazárástól a tőzsdei megbízás-visszaigazolásig eltelt idő mediánja: 195 ms. 99. percentilis: 2,970 ms. Medián a legnagyobb realizált volatilitású percek 1%-ában: 840 ms. A késleltetési érték pedig, amely az előző év nagy részében a backtest konfigurációjában szerepelt: 0.
Ebből a négy számból három unalmas. Mindenki tudja, hogy a nulla téves, előbb-utóbb mindenki lecseréli valamire, és ez a valami szinte mindig egy érzésre kiválasztott állandó. 100 ms, 250 ms, „legyünk óvatosak, legyen 500”. A tényleg fontos szám a 840, mert azt mutatja, hogy a késleltetés a piaci állapottól függ, és azokban a piaci állapotokban szökik fel, amikor a jelzésed szerint épp találtál valamit.
Mire megy el a 195 milliszekundum
Íme a teljes időkeret, az egyes szakaszokat külön mérve, minden továbbítási ponton monotón órából származó időbélyeggel. A gép egy AWS-példány az ap-northeast-1 régióban, ugyanabban a régióban, ahol a tőzsde végpontjai vannak; ennél jobb helyzetben egy nem kolokált, lakossági jellegű rendszer aligha lehet.
| Szakasz | p50 | p95 | p99 |
|---|---|---|---|
| Gyertyazárás → a WS kline-closed esemény beérkezése | 128 ms | 402 ms | 1,940 ms |
| Feldolgozás + feature-állapot frissítése | 3 ms | 9 ms | 28 ms |
| Döntés: modell kiértékelése + kockázati ellenőrzések | 11 ms | 22 ms | 60 ms |
| Megbízás beküldése → tőzsdei visszaigazolás | 47 ms | 180 ms | 1,100 ms |
| Teljes folyamat (mért, nem összeadott) | 195 ms | 690 ms | 2,970 ms |
Két dolgot érdemes megjegyezni, mielőtt rátérünk az érdekes részre. Először is: a mediánok nem adódnak össze. 128 + 3 + 11 + 47 = 189, a mért teljes folyamat mediánja pedig 195. A percentiliseket nem lehet összeadni; ha a késleltetési becslést az egyes szakaszok p99 értékeinek összegéből állítod össze, 3,128 ms-ot kapsz, miközben a tényleges p99 2,970. Itt elég közel járunk, de ha a szakaszok korrelációja más irányú, az eredmény nagyon félremehet. Mérd a teljes útvonalat.
Másodszor, nézd meg a felső sort. A medián időkeret kétharmada azzal telik, hogy a tőzsde közölje veled: lezárult a gyertya. Nem a hálózat, nem a kódod, nem a megbízás-irányítás okozza. A tőzsde gyertyába összesíti az ügyleteket, megállapítja, hogy véget ért a perc, majd kiküldi az adatot. A küldés előtt sor áll, és ezt a sort az adott adatfolyam összes többi feliratkozójával közösen használod.
A 840
Ha mind az 1,418 megbízást a jelzést kiváltó perc realizált volatilitása szerint csoportosítjuk, a megoszlás gyökeresen átalakul.
| A jelzést adó gyertya volatilitási csoportja | Megbízások | Teljes folyamat p50 | Teljes folyamat p99 |
|---|---|---|---|
| Alsó kvartilis | 201 | 141 ms | 488 ms |
| Középső két kvartilis | 796 | 183 ms | 1,210 ms |
| Felső kvartilis | 407 | 312 ms | 2,880 ms |
| Az összes perc felső 1%-a | 14 | 840 ms | 4,100 ms |
Minden szakasz egyszerre lassul le, ezért adódik össze a hatás. A tőzsdei összesítési és továbbítási sort a matching engine terhelése táplálja, ezért egy 11,000 ügyletet tartalmazó perc később kerül sorra, mint egy 600 ügyletet tartalmazó. A saját folyamatod is több depth-frissítést és több ügyletet dolgoz fel ugyanabban az időablakban, így a feature frissítése, amely általában 3 ms, 28 ms-ig tart. A REST-es megbízási útvonalon mindenki más pánikjával versenyzel, és időnként megjelenik egy 503-as hiba és az újrapróbálkozás, ami önmagában egy teljes másodpercbe kerül. A jelzést adó gyertyán mért ügyletek száma és a teljes késleltetés közötti korrelációs együttható a mintánkban 0.41 volt. Nem óriási. De elég ahhoz, hogy egy állandó érték használhatatlan legyen.
Az első körös szűrésen átjutó stratégiák pedig túlnyomórészt kitörésekkel, fordulatokkal, elmozdulásokkal és likvidálási hullámokkal kereskednek. Pont abban a csoportban adnak jelet, ahol a legrosszabb a késleltetés. Egy momentumjelzés, amely csak akkor aktiválódik, ha a perc alatt 40 bázispontot mozdult az ár, szerkezetileg úgy működik, hogy mindig a rendszered leglassabb változata szolgálja ki.
Egyszer egy napot töltöttünk egy 3.6 másodperces kiugrás nyomozásával, amely nagyjából minden éjjel ugyanakkor jelentkezett. A logrotate volt az oka: egy 2 GB-os fájlt másolt és csonkított meg ugyanazon az EBS-köteten, amelyre a folyamat írt, így megállt az eseményhurok. A piac ártatlan volt. Előbb mérj, aztán hibáztasd a mikrostruktúrát.
Mit jelent ez a teljesülésnél
Várakozás közben elmozdul az ár. Egy véletlenszerű percben a 195 ms-os mediánunk alatti átlagos, a jelzés irányával ellentétes elmozdulás körülbelül 1.1 bázispont volt. A 312 ms-os felső kvartilisbe tartozó perceken 5.8 bázispont. A 840 ms-os, felső 1%-ba eső perceken pedig nagyjából 14 bázispontnyi kedvezőtlen elmozdulás történik, mielőtt a megbízás egyáltalán elérné az ajánlati könyvet.
A BTC perpetualokon a spread alig játszik szerepet: egy tick egy 84,000-es jegyzésnél 0.012 bázispont, így a kárt nem az átlépési költség, hanem a kedvezőtlen ármozgás okozza. Vidd át ugyanezt a stratégiát egy közepes kapitalizációjú perpetualra, és a második tényező is felébred: a mintánkban a legjobb ajánlat spreadje a nyugodt percek 1.4 bázispontjáról a felső kvartilisben 6.2 bázispontra nőtt, az ajánlati könyv legjobb árszintjén elérhető mélység pedig több mint a felére csökkent. Egyszerre fizetsz a kedvezőtlen ármozgásért, a szélesebb spreadért és a kisebb mélységért, mert mindegyiknek ugyanaz az oka.
Amikor a 31 napot 200 ms-os rögzített késleltetés helyett gyertyánként feltételes késleltetéssel játszottuk vissza, a backtest átlagos belépési ára 3.1 bázisponttal rosszabb lett; a romlás szinte teljes egészében az ügyletek 9%-ára koncentrálódott. A backtest és a paper trading közötti belépőár-eltérés 4.2 bázispontról 0.9 bázispontra csökkent. A stratégia mintán belüli Sharpe-mutatója 1.7-ről 1.1-re esett vissza. Ez az őszinte szám, és mindig is ez volt az.
Akkor mit írjunk be a konfigurációba
Ne egyetlen értéket. Most ezt csináljuk:
- Mintából dolgozz, ne találomra állítsd be. Minden szimulált megbízás késleltetését egy empirikus eloszlásból húzd, amelyet az adott gyertya aktivitása alapján választasz ki. Elég az ügyletek száma és az abszolút hozam; mindkettő megtalálható egy szabványos kline-ban. Tőzsdénként és megbízástípusonként egyszer illeszd az eloszlást, majd havonta illeszd újra.
- Őrizd meg az eloszlás farkát. Ne illessz lognormális eloszlást, és ne tekintsd késznek a munkát: a p99-et újrapróbálkozási hullámok és GC-megakadások alakítják, amelyeket egyetlen sima eloszlás sem ad vissza. Az empirikus kvantiliseket használjuk, a p95 fölötti farkat pedig újramintavételezzük.
- A visszavonásokra is vonatkozik a késleltetés. A stop megbízás cseréje és a fedezeti megbízás visszavonása is ugyanekkora késést szenved; gyors piacon a visszavonás versenyt fut a teljesüléssel. Ha a szimulátorod azonnal visszavonja a megbízást, a kockázati modelled fikció.
- Tegyél be adatfrissességi korlátot, és szimuláld is. A mi rendszerünk eldob minden olyan jelzést, amely érkezéskor 1.5 másodpercnél régebbi. Ennek valós következménye és költsége van: észrevétlenül töröl ügyleteket, és a backtestnek is ugyanazokat kell eltávolítania.
- Kalibráld újra a paper trading eredményeihez. A paper trading adja meg a valós viszonyítási alapot. Minden megbízásnál naplózd a négy szakasz időbélyegeit, majd hetente hasonlítsd össze az eloszlásokat azzal, amit a szimulátor feltételezett.
Más eszközosztályok, ugyanaz a probléma. Amerikai részvények: az összevont árfolyam-adatfolyam a brókered késleltetéséhez hozzáadja a saját összesítési idejét, és az üzenetforgalom nyomása alatt ugyanezen szerkezeti okból tovább lassul. Előrejelzési piacok: a legtöbb platformon csak REST-en lehet megbízást beküldeni; mértünk már 100 ms alatti mediánt is, amely egy feloldási eseménynél több másodpercre nő, amikor mindenki egyszerre érkezik. Kriptoopciók: az ajánlat, amely alapján árazol, pontosan abban a percben lehet két másodperccel elavult, amikor az alaptermék elmozdult.
A hiba általános formája az, amikor a végrehajtási paramétert független állandónak tekinted, holott ugyanattól az állapotváltozótól függ, amely a jelzésedet is hajtja. A díjak viselkednek, a funding viselkedik, a késleltetés nem. Ha egyetlen számot viszel magaddal ebből az egészből, ez legyen az arány: a p99-ünk tizenötszöröse a mediánunknak, a jelzéseink pedig aránytalanul gyakran a p99 környékén érkeznek.
Mérd meg a négy szakaszt. Egy délutánnyi munka, és többet árul el a stratégiádról, mint a paraméterek újabb heti keresgélése.
← Összes bejegyzés


