Najgroźniejszy błąd związany z czasem w backteście może przetrwać nawet perfekcyjny audyt znaczników czasu. Dwa zdarzenia mogą mieć znacznik 10:00:00.000, a mimo to zajść w kolejności odgadniętej przez symulator.
Ma to znaczenie zawsze wtedy, gdy strategia reaguje na coś więcej niż zamknięte świece: aktualizację kwotowania, transakcję, komunikat o finansowaniu, zmianę statusu giełdy albo potwierdzenie własnego zlecenia. Znacznik czasu mówi, kiedy oznaczono zdarzenie. Niekoniecznie mówi, kiedy strategia mogła na nie zareagować.
Co zmienia kolejność zdarzeń?
Wyobraźmy sobie strategię, która kupuje, gdy najlepsza cena ask spada poniżej $100.00. W tej samej milisekundzie kanał danych rejestruje aktualizację ask do $99.99 oraz transakcję po $99.99. Jeśli backtest przetworzy najpierw transakcję, a potem kwotowanie, strategia zobaczy nowy ask i złoży zlecenie. Przetworzenie najpierw kwotowania też może być poprawne, o ile to zdarzenie było już dostępne. Jeśli jednak transakcja zużyła widoczną płynność, zanim dotarło zlecenie, realizacja po $99.99 jest fikcją.
Sortowanie wierszy wyłącznie według znacznika czasu pozostawia symulatorowi wybór kolejności zdarzeń o tym samym czasie. Kolejność w pliku, kolejność symboli albo plan zapytania do bazy danych mogą przypadkiem stać się regułą realizacji. Krzywa kapitału może się zmienić, mimo że dane źródłowe pozostały takie same.
Łatwo zobaczyć, jak arbitralne może to być: posortujmy zdarzenia o identycznym czasie według nazwy symbolu zamiast kolejności ich nadejścia. Strategia wieloassetowa może wtedy zachowywać się inaczej tylko dlatego, że jeden ticker sortuje się przed drugim.
Jakie zegary powinien uwzględniać backtest?
Dane rynkowe i obsługa zleceń często obejmują kilka różnych czasów. Zachowujmy pola udostępniane przez źródło i precyzyjnie określajmy ich znaczenie. W wielu kanałach przydatne są zarówno znacznik czasu zdarzenia giełdowego, jak i lokalny czas odbioru; żaden z nich nie mówi uniwersalnie, co widzieli wszyscy uczestnicy rynku.
| Zegar | Co rejestruje | Czego sam nie potwierdza |
|---|---|---|
| Czas zdarzenia giełdowego | Kiedy według giełdy doszło do zdarzenia | W jakiej kolejności zaobserwował je inny kanał danych lub Twój proces |
| Czas odbioru | Kiedy kolektor odebrał komunikat | Kiedy strategia zakończyła jego przetwarzanie |
| Czas podjęcia decyzji | Kiedy kod ocenił sygnał | Że kwotowana cena nadal była dostępna |
| Czas dotarcia zlecenia | Kiedy giełda mogła zareagować na zlecenie | Realizacji, o ile nie potwierdzają jej reguły dopasowywania zleceń i płynność |
W przypadku danych historycznych bez czasów odbioru jasno określajmy przyjęte założenia. Backtest może przetwarzać zdarzenia giełdowe w kolejności i narzucać stałe opóźnienie 5 ms między decyzją a dotarciem zlecenia na giełdę. To model, a nie odtworzona historia. Jeśli nie mamy numerów sekwencyjnych dla zdarzeń z identycznymi znacznikami czasu giełdowego, reguła rozstrzygania kolejności również jest założeniem.
Jak modelować zdarzenia o tym samym czasie?
Najpierw zachowujmy numery sekwencyjne ze źródła, jeśli są dostępne. Numer sekwencyjny pozwala ustalić kolejność w obrębie danego kanału dokładniej niż znacznik czasu, choć różne kanały lub produkty mogą mieć osobne przestrzenie numeracji.
Następnie jasno określmy regułę przetwarzania w symulatorze. Dla każdego zdarzenia zdecydujmy, czy może zaktualizować informacje dostępne strategii, zmienić dostępną płynność, uruchomić zlecenie czy potwierdzić jego przyjęcie. To różne działania; sprowadzenie ich do „przetwórz wiersz” pozwala przemycić niemożliwe realizacje.
- Uwzględniajmy tylko informacje rynkowe, które dotarły do chwili podjęcia decyzji przez strategię.
- Wygenerujmy zlecenie, a następnie przesuńmy je do modelowanego czasu dotarcia na giełdę.
- Dopuszczajmy realizację wyłącznie w oparciu o kwalifikującą się płynność dostępną po dotarciu zlecenia, zgodnie z założeniami realizacji dla danego typu zlecenia.
- Rejestrujmy dane wejściowe, kolejność zdarzeń i opóźnienie użyte przy każdej symulowanej realizacji.
W przypadku strategii opartej na świecach może to być więcej szczegółów, niż wymaga dane pytanie. Jeśli sygnał korzysta z zamkniętych świec 1-minutowych, a zlecenia są realizowane po cenie otwarcia następnej świecy przy konserwatywnym modelu kosztów, kolejność zdarzeń z dokładnością do milisekund prawdopodobnie nie zmieni wniosków z badania. Chodzi o to, by szczegółowość modelu czasu odpowiadała temu, co deklaruje backtest.
Czy mogę ufać backtestowi bez danych o czasie dotarcia?
Można z niego korzystać, ale trzeba jasno określić jego ograniczenia. Jeśli strategia handluje wolno i ma szerokie limity ryzyka, kilka milisekund może nie mieć znaczenia. Jeśli reaguje na krótkotrwałe kwotowania, konkuruje o pozycję w kolejce zleceń albo zależy od sygnału lead-lag między giełdami, brak czasów dotarcia może mieć kluczowy wpływ na wynik.
Krytycy słusznie zauważają, że precyzyjne określanie czasu zdarzeń może prowadzić do pozornej dokładności. Dane historyczne są niekompletne, zegary się rozjeżdżają, a znaczniki czasu giełdy nie pokazują każdego przeskoku przez sieć. Symulator z polami nanosekundowymi nadal może opierać się na uproszczonym założeniu dotyczącym realizacji.
Zamiast więc twierdzić, że mamy pewność, sprawdzajmy wrażliwość wyników: odtwarzajmy dane z wiarygodnymi regułami rozstrzygania kolejności zdarzeń i opóźnieniami zleceń, a następnie porównujmy liczbę transakcji, ceny realizacji i sygnały, które się utrzymują. Jeśli wynik zależy od kolejności, której dane nie pozwalają ustalić, należy opisać tę zależność w raporcie badawczym. Backtest może być przydatny mimo niedoskonałego zegara. Musi tylko jasno wskazywać, jaki czas faktycznie zna.
← Wszystkie wpisy


