Uprostřed obchodu jsme restartovali paper strategii a dostali jinou posloupnost příkazů, než jakou vytvořila před restartem. Stejná tržní data, stejná verze strategie, stejný zůstatek účtu. Výpočet signálu souhlasil. Nesouhlasila ale paměť strategie o její pozici a čekajících příkazech.
Nesrovnalost jsme sledovali během celodenního přehrávání. Ponaučení bylo prosté: restart je pro váš software událost na trhu. Pokud netestujete, jak strategie znovu sestaví svůj stav, čistý backtest může zakrýt paper systém, který zapomíná, co drží.
09:10 — Vybrali jsme nezajímavou pozici
Testovací strategie obchodovala likvidní perpetual: vstoupila do long pozice, když krátký klouzavý průměr překřížil delší směrem nahoru, a vystoupila při opačném překřížení. Přehrávání jsme zahájili s už otevřenou malou pozicí a čekajícím reduce-only limitním příkazem, který ji měl zmenšit. Obnova tak musela zrekonstruovat dvě skutečnosti: co držíme a co už jsme po burze chtěli.
V kontrolním bodě účet držel 0.04 kontraktu. Příkaz na 0.01 byl otevřený. Proces strategie měl obě hodnoty uložené v paměti, ale při spuštění načítal pouze pozici. S uloženým příkazem zacházel, jako by už neexistoval.
09:25 — Objevil se první duplicitní příkaz
Po restartu strategie zjistila, že má otevřený long, spustila signální logiku a odeslala další příkaz na zmenšení pozice o 0.01. Paper burza teď měla dva aktivní příkazy. Každý z nich byl sám o sobě v pořádku. Kdyby se ale provedly oba, mohly prodat dvojnásobek zamýšleného množství.
Nejprve jsme vinili smyčku vyhodnocující signál. Tou to nebylo; problémem byl neúplný stavový snímek. Strategie se ptala: „Jakou mám pozici?“, ale nikdy se nezeptala: „Které příkazy jsou stále aktivní?“
| Stav po restartu | Čemu proces věřil | Co držel účet |
|---|---|---|
| Pozice | Long 0.04 | Long 0.04 |
| Otevřené příkazy ke zmenšení pozice | Žádné | Dva, každý na 0.01 |
| Zamýšlená expozice po provedení jednoho příkazu | Long 0.03 | Mohla klesnout až na long 0.02 |
10:00 — Opravili jsme obnovu a pak našli problém s načasováním
Při spuštění jsme upravili obnovu tak, aby před povolením nových rozhodnutí znovu sestavila stav z pozic na účtu a otevřených příkazů. Tím jsme duplicitu odstranili. Pak jsme simulovali méně hladké odpojení: jeden příkaz se provedl, zatímco strategie byla offline, a oznámení o provedení dorazilo až po opětovném připojení.
Snímek účtu už provedený příkaz zohledňoval. Zpožděné oznámení pak lokální pozici zmenšilo podruhé. Několik sekund se strategie domnívala, že drží 0.02 kontraktu, zatímco účet držel 0.03. Její další vyvážení vycházelo z neexistujícího nedostatku.
Doplnili jsme pravidla pro sladění stavu: jako výchozí bod brát snímek účtu, pomocí identifikátorů událostí ignorovat provedení, která už jsou v něm zohledněna, a neodesílat příkazy, dokud se nedokončí úvodní synchronizace. Oznámení může dorazit pozdě nebo dvakrát. Obnova musí zvládnout obojí.
13:40 — Přehrávání odhalilo nenápadnou nesrovnalost
Stejný cenový průběh jsme přehráli při původním běhu i po restartu. Porovnání konečného P&L by problém neodhalilo: obě verze skončily po obratu trhu se stejnou pozicí. Odhalilo ho až porovnání událostí příkazů.
Každé rozhodnutí jsme zaznamenali spolu se stavem, ze kterého vycházelo: pozicí, otevřenými příkazy, posledním zpracovaným identifikátorem provedení, hodnotou signálu a verzí strategie. První rozdílná událost pak měla jasné vysvětlení. Jeden běh viděl aktivní příkaz, druhý prázdný seznam. Později jeden z nich zpracoval provedení dvakrát.
Stejný konečný zůstatek nedokazuje, že se strategie chovala stejně. Porovnávejte posloupnost rozhodnutí a příkazů, zejména při obnově stavu.
16:20 — Co bychom příště udělali jinak
Než jsme zkontrolovali změny stavu účtu, strávili jsme příliš mnoho času přehráváním cenových dat. Příště bychom nejdřív nasimulovali chybové situace a cenový průběh nechali téměř rovný. Chybu v softwaru tak snadno uvidíme, aniž by diagnostiku komplikoval prudký pohyb trhu.
- Restartujte strategii s otevřenou pozicí a částečně provedeným příkazem.
- Po odeslání příkazu přerušte spojení a znovu se připojte dřív, než dorazí oznámení o jeho provedení.
- Doručte stejnou událost provedení dvakrát a ověřte, že změní stav jen jednou.
- Blokujte nové příkazy, dokud neproběhne sladění pozic i otevřených příkazů.
- Porovnejte záznamy rozhodnutí a příkazů z nepřerušeného běhu a běhu po restartu.
Naučili jsme se také ukládat snímek pro obnovu společně s verzí strategie a záznamem událostí. Díky tomu jsme chybu dokázali zopakovat během několika minut, místo abychom spoléhali na něčí vzpomínku na přesný průběh opětovného připojení.
Paper strategie, která se chová správně jen po dobu, kdy její proces běží, neprošla úplnou zkouškou. Restartujte ji uprostřed pozice, nechte oznámení o provedení dorazit se zpožděním a zkontrolujte každý následující příkaz. Cílem není dokázat, že nikdy neselže. Jde o to, aby její obnova byla vidět dřív, než vás účet v paper tradingu stejnému ponaučení naučí nečekaně.
← Všechny články


