Jak można odpowiedzialnie przeprowadzić backtesting DPO?
Zdefiniuj DPO i obliczenia podlegające backtestingowi
DPO zwykle odnosi się do wskaźnika opartego na średniej ruchomej, zaprojektowanego do porównywania dzisiejszej wartości z wartością przesuniętą wstecz o wybrany offset. Aby przeprowadzić jego backtesting w sposób odpowiedzialny, zacznij od zapisania dokładnego obliczenia w prostych słowach: jaki typ średniej ruchomej jest używany (na przykład prosta lub wykładnicza), długość okresu wstecz (lookback), przesunięcie/offset oraz w jaki sposób wartość wskaźnika jest mapowana na decyzje.
Dwa częste nieporozumienia powodują błędne testy: (1) różne definicje „DPO” w różnych narzędziach oraz (2) pomylenie linii wskaźnika z jakąkolwiek regułą decyzyjną, którą możesz zastosować. Do celów backtestingu traktuj DPO jako serię wejściową obliczaną z historycznych danych OHLC (lub innych pól cenowych, których używasz). Następnie trzymaj regułę decyzyjną osobno, aby móc ją testować spójnie bez zmiany definicji wskaźnika.
Podczas obliczania DPO z historycznych świec określ założenia, takie jak: czy używasz tylko ceny zamknięcia, jak obsługujesz brakujące świece oraz czy wskaźnik jest obliczany na zamknięciu świecy, czy na jej otwarciu. Te założenia decydują o tym, jakie informacje byłyby dostępne w danym momencie.
Oddziel stabilną mechanikę od zmiennych warunków
Odpowiedzialny backtest rozróżnia stabilną mechanikę wskaźnika od zmiennych warunków, które mogą się zmieniać między wynikami papierowymi a rzeczywistymi działaniami.
Stabilna mechanika obejmuje: formułę wskaźnika, interpretację przesunięcia/offsetu oraz wszelkie deterministyczne transformacje (na przykład normalizację lub konwersję wskaźnika na cechy). Zmienne warunki obejmują: reżimy rynkowe, zmienność, płynność oraz sposób, w jaki spready i poślizgi (slippage) zachowują się w czasie.
Ponieważ backtest nie ma danych na żywo, należy modelować koszty konserwatywnie i w sposób przejrzysty. Koszty mogą obejmować przybliżenia spreadu/prowizji oraz założenia dotyczące poślizgu. Nawet jeśli nie masz dokładnych danych na poziomie transakcji, musisz określić regułę: na przykład założyć, że koszty są stosowane przy wejściu i wyjściu oraz zdefiniować, czy modelujesz je jako stałe na transakcję, czy proporcjonalne do ruchu ceny.
Założenia dotyczące wykonania (execution) są równie ważne jak sam wskaźnik. Zdecyduj, jak przekształcasz obserwację wskaźnika w wynik transakcji w czasie: jeśli Twoja decyzja jest formułowana na podstawie wartości DPO z zamknięcia świecy, to Twoje wejście nie powinno zakładać wiedzy wewnątrzświecowej. Dopasuj timing sygnału do timingu ceny, aby uniknąć przypadkowego błędu wyprzedzenia (look-ahead).
Dodaj kontrole błędów, aby wyniki nie były tylko nadmiernym dopasowaniem
Backtesting staje się niewiarygodny, gdy wybory są dostrajane do tego samego historycznego okna, na którym później „dokonujesz oceny”. Aby to ograniczyć, stosuj kontrole błędów.
Kluczowe kontrole obejmują:
- Zapobieganie błędowi wyprzedzenia (look-ahead): upewnij się, że każda wartość wskaźnika użyta w czasie t jest obliczana wyłącznie z danych dostępnych do czasu t. Funkcje przesunięcia mogą kusić do nieprawidłowego przesuwania serii.
- Dyscyplina parametrów: jeśli przeszukujesz długość wskaźnika lub offset, potrzebujesz oddzielnego okresu oceny. W przeciwnym razie mierzysz zdolność do dopasowania się do szumu.
- Testy kroczące (walk-forward) lub przesuwne (rolling): ponownie szacuj tylko to, co wolno Ci ponownie oszacować (na przykład wybory parametrów), używając danych z przeszłości, i oceniaj na następnym segmencie.
Przetestuj również odporność (robustność): jeśli małe zmiany parametrów wskaźnika drastycznie zmieniają wyniki, zależność jest prawdopodobnie niestabilna. Odpowiedzialny proces pracy dokumentuje przestrzeń przeszukiwania parametrów, wielkości kroków i kryteria wyboru, a następnie sprawdza, jak zmienia się wydajność po wyjściu poza pierwotnie zoptymalizowany zakres.
Przykładowe podejście lub dowód bez przesadzania
Czysty przykładowy proces pracy to:
- Wybierz jedną, jednoznaczną definicję DPO (formuła, typ średniej ruchomej, długość, offset).
- Wybierz prostą, dopasowaną czasowo regułę do przekształcania DPO w hipotetyczne działanie. Utrzymuj regułę stałą podczas walidacji potoku danych.
- Oblicz DPO na całym zbiorze danych, a następnie zweryfikuj timing, sprawdzając, czy wartość wskaźnika użyta dla świecy t zależy tylko od wcześniejszych świec.
- Przeprowadź ocenę uwzględniającą koszty, używając określonego modelu kosztów transakcyjnych i reguły timingu wykonania.
- Użyj testów poza próbą (out-of-sample) (jeden lub więcej niewidzianych segmentów), aby oszacować, czy wyniki się utrzymują.
Ta struktura dostarcza dowodów na powtarzalność modelowanej zależności, a nie obietnicy przyszłych wyników.
Ograniczenia i tryby awarii, które musisz uwzględnić
Wyniki historyczne mogą wprowadzać w błąd z kilku powodów:
- Zależność od reżimu: wskaźniki często działają w określonych warunkach rynkowych i zawodzą w innych. Backtest mieszający reżimy może ukryć moment, w którym wskaźnik przestaje działać. - Wrażliwość na koszty: jeśli strategia opiera się na częstych zmianach, małe zmiany w założeniach dotyczących spreadu lub poślizgu mogą przeważyć nad przewagą wskaźnika. - Nadmierne dopasowanie (overfitting): przeszukiwanie parametrów, wielokrotne ponowne uruchamianie i elastyczne modyfikacje reguł mogą dopasować się do szumu.