V úterý v 08:00 UTC změnila kryptoměnová burza krok kotace u perpetual kontraktu se střední cenou. Naše strategie založená na bázi si toho nevšimla. Signál stále viděl stejný rozdíl mezi spotem a futures, limity rizika zůstaly beze změny a backtest dál vykazoval stejné výsledky.
Paper trading si toho všiml. Adaptér pokynů zaokrouhlil nákupní limitní cenu dolů na nejbližší povolenou cenu. Pokyn se tak ocitl o jeden krok kotace pod úrovní, kterou modeloval backtest. Trh se dotkl původní ceny, simulovaný pokyn se vyplnil, zatímco paper pokyn zůstal bez plnění. Do oběda měla strategie nevyváženou pozici.
Incident vypadal jako drobná chyba v zaokrouhlování. Ve skutečnosti šlo o problém na hranici modelu: strategie znala ceny, ale backtest neznal cenovou mřížku burzy.
Obchodovali jsme jednoduchý signál založený na bázi: nakupovali jsme spot a prodávali perpetual, když prémie futures překročila prahovou hodnotu. Pokyny byly pasivní, protože očekávaná výhoda z báze byla malá. O tom, zda vstup vydělá dost na pokrytí poplatků a pozdějšího výstupu, mohlo rozhodnout několik kroků kotace.
Co se změnilo se změnou kroku kotace?
Před aktualizací perpetual přijímal ceny v krocích po 0.01. Poté v příslušném cenovém pásmu přijímal ceny v krocích po 0.05. Signál vypočítal cílovou prodejní cenu 42,318.03, která byla podle starého pravidla platná. Podle nového pravidla už platná nebyla.
Burza neplatné ceny odmítala, ale náš adaptér měl záložní postup: prodejní cenu zaokrouhlil dolů na 42,318.00. Ani ta nebyla platná. Druhý záložní postup zaokrouhlil cenu znovu, tentokrát na 42,318.05, která platná byla, ale pro prodávajícího méně agresivní. Pokyn už nemohl prodat za cenu modelovanou backtestem. Tato větev kódu byla napsaná pro jiný trh a odmítnutí potichu změnila na pokyn s upravenou cenou.
Jediný pokyn otevřel dvě odlišné otázky. Zaprvé, jakou cenu může burza přijmout? Zadruhé, jak má strategie reagovat, když požadovaná cena neodpovídá cenové mřížce? Na první otázku odpovídá burza. Na druhou musí odpovědět strategie nebo exekuční politika.
| Záměr pokynu | Pravidlo mřížky | Obvyklý směr zaokrouhlení | Možný dopad |
|---|---|---|---|
| Nákupní limit | Cena musí být násobkem kroku kotace | Dolů, aby zůstala na limitu nebo pod ním | Nižší pravděpodobnost plnění |
| Prodejní limit | Cena musí být násobkem kroku kotace | Nahoru, aby zůstala na limitu nebo nad ním | Nižší pravděpodobnost plnění |
| Limitní pokyn, který lze okamžitě provést | Musí také respektovat cenové limity | Záleží na maximální přijatelné ceně | Zda překříží spread |
Neexistuje univerzálně správné pravidlo zaokrouhlování. Zaokrouhlení nákupní ceny dolů zachová cenový limit kupujícího, ale může snížit pravděpodobnost plnění. Zaokrouhlení nahoru může způsobit, že se pokyn stane okamžitě proveditelným, což mění poplatky i cenový dopad. U našeho pasivního vstupu založeného na bázi bylo tiché posunutí pokynu špatným postupem. Strategie zvolila cílovou cenu, ale adaptér změnil ekonomiku obchodu.
Proč backtest stále vypadal dobře?
Náš historický simulátor pokynů zacházel s limitními cenami jako s nepřetržitými hodnotami. Pokud minimum svíčky dosáhlo nákupní ceny nebo maximum dosáhlo prodejní ceny, započítal plnění. To už je pro pasivní pokyn velkorysý odhad, protože cena obchodu na limitu nevypovídá nic o pozici ve frontě. Aktualizace kroku kotace ale odhalila ještě zásadnější problém: pokyn za danou cenu vůbec nemohl existovat.
Stejná rozhodnutí jsme přehráli s novou cenovou mřížkou platnou od okamžiku její účinnosti. Několik plnění zmizelo. Několik pokynů se zaokrouhlilo na ceny, které překřížily spread, a místo poplatků maker přinesly poplatky taker. Následná trajektorie pozice se odchýlila, takže se změnily i pozdější zajišťovací obchody a výstupy. Pravidlo, které vypadalo jako metadata, změnilo celou posloupnost obchodů.
Aktualizace přitom nebyla žádnou skrytou novinkou v grafu. Burza zveřejnila změnu pravidel instrumentu s časem její účinnosti. Tržní data jsme pečlivě ukládali, ale metadata instrumentu byla v mezipaměti obnovované při spuštění. Backtest používal dnešní pravidla pro všechna historická data; paper trading měl zastaralá pravidla až do restartu procesu. Ani jedno prostředí nereprezentovalo, co burza v daném okamžiku povolovala.
Jak má backtest modelovat změny kroku kotace?
Pravidla instrumentu verzujte s intervaly platnosti stejně jako ostatní vstupy dostupné v daném okamžiku. Uchovávejte alespoň čas účinnosti a hodnoty pravidel potřebné k ověření pokynu: krok kotace, krok množství, minimální množství a případná cenová pásma. Simulátor má načíst sadu pravidel platnou v okamžiku simulovaného rozhodnutí.
Pak výslovně určete, jak se s pokyny zachází. Pokud cílová cena není platná, pokyn odmítněte, zaokrouhlete podle zdokumentované politiky nebo cíl přepočítejte na cenové mřížce. Zaznamenejte, co se stalo. Backtest, který každý pokyn automaticky opravuje, může být užitečný pro odhad konkrétní exekuční politiky, ale neměl by tuto politiku vydávat za plnění na burze.
U pasivních pokynů je cena odpovídající kroku kotace jen první podmínkou plnění. Stále potřebujete model, který určí, zda trh obchodoval přes vaši cenu, kolik pokynů je před vámi ve frontě, jak probíhají rušení pokynů a jakou úroveň poplatků byste získali.
Přidali jsme dvě kontroly. První ověřuje každý vytvořený pokyn podle pravidel instrumentu platných v daném okamžiku a při neplatných cenách nebo množstvích okamžitě vyvolá chybu. Druhá porovnává konečný normalizovaný pokyn v adaptéru backtestu a paper tradingu: stranu, cenu, množství, dobu platnosti a záměr ohledně poplatků. Pokud se neshodují, běhy nepovažujeme za srovnatelné.
Poté jsme úterní změnu přehráli znovu. Backtest už po aktualizaci cenové mřížky netvrdil, že došlo k plnění na ceně 42,318.03. Paper trading i simulace rozhodly o každé neplatné cílové ceně stejně, i když rozhodnutím bylo pokyn přeskočit.
Signál se nerozbil. Zastaraly předpoklady o instrumentu, se kterým mohl obchodovat. Strategie dokáže přežít nový krok kotace, jen pokud výzkumný systém považuje pravidla burzy za součást trhu, který simuluje.
← Všechny články


