Backtest odtwarza działanie zapisanych reguł na danych historycznych przy określonym modelu wykonania. Pomaga znaleźć błędy, oszacować koszty i odrzucić część pomysłów. Dodatni wynik nie dowodzi jednak, że strategia zarobi w przyszłości. Najpierw sprawdź, co dokładnie zasymulowano i ile wariantów wypróbowano.

Spisz decyzję i moment dostępności informacji

Reguła powinna określać symbol, interwał, dane wejściowe, warunek sygnału, moment wysłania zlecenia, sposób wyjścia i wielkość pozycji. Dopisz zachowanie przy istniejącej pozycji, brakujących danych i niewystarczającym depozycie. Samo „kupuję w trendzie” nie pozwala odtworzyć testu.

Przykład logiczny: po zamknięciu świecy porównujesz jej zamknięcie z poprzednim maksimum, a zlecenie wysyłasz dopiero po udostępnieniu tej informacji. Nie możesz użyć ostatecznego zamknięcia do wejścia na wcześniejszym otwarciu tej samej świecy. Cena rzeczywistego wykonania nadal zależy od kwotowania i modelu zlecenia.

Jeżeli strategia jest uznaniowa, opisz kryteria tak, aby ocena nie korzystała z dalszej historii. Zapisuj odrzucone sygnały i przypadki graniczne. Ręczny replay nie eliminuje podglądu przyszłości, jeśli znasz już dalszy przebieg albo wybierasz tylko wygodne fragmenty.

Dobierz dane do instrumentu i reguł

Test EUR/USD CFD wymaga danych odpowiadających temu produktowi i zasadom rachunku. Kontrakt futures na euro może służyć do innej analizy, ale nie jest automatycznym zamiennikiem historii spot lub CFD. Ma własny termin, bazę, sesję i sposób rozliczenia.

Zapisz dostawcę, strefę czasu, stronę kwotowania, zakres historii i braki. Dla świec dziennych granica doby wpływa na sygnały. Dla ciasnych stopów znaczenie mogą mieć szczegóły Bid i Ask oraz przebieg wewnątrz świecy. Renoma źródła nie zwalnia z kontroli konkretnego zbioru.

OHLC nie określa całej kolejności cen. Jeżeli stop i cel mieszczą się w jednej świecy, sposób modelowania może rozstrzygnąć wynik. W MT5 tryb rzeczywistych ticków również wymaga sprawdzenia dostępności historii i ewentualnego uzupełniania braków przez tester. Nazwa trybu nie zastępuje kontroli danych.

Przy koszyku instrumentów odtwórz dostępność i kryteria wyboru z badanego czasu. Ułożenie listy po obejrzeniu dzisiejszych zwycięzców wprowadza selekcję. Dla futures opisz łączenie serii, a dla danych makro korzystaj z informacji dostępnych wtedy, zamiast później zrewidowanych wartości.

Uwzględnij koszty bez podwójnego naliczania

Wprowadź spread, prowizje, finansowanie oraz założenia poślizgu odpowiednie dla produktu. Cena wejścia po Ask i wyjścia po Bid już uwzględnia spread w wyniku cenowym; nie odejmuj go ponownie bez sprawdzenia metody testera. Prowizję licz według liczby stron i wykonanych wolumenów.

Własny przykład rachunkowy: 50 transakcji daje przed kosztami 30 wygranych po 40 zł i 20 strat po 50 zł. Suma zysków wynosi 1200 zł, strat 1000 zł, a wynik 200 zł. Każdej zamkniętej transakcji przypisujemy taki sam pełny koszt, niezależnie od wyniku.

Ten sam zbiór transakcji przy różnych pełnych kosztach
Koszt na transakcjęWynik nettoŚredni wynik nettoProfit factor po kosztach
0 zł200 zł4 zł1,20
2 zł100 zł2 złOkoło 1,10
4 zł0 zł0 zł1,00

Przy koszcie 2 zł wygrana netto to 38 zł, a strata 52 zł. Profit factor wynosi 1140 / 1040, czyli około 1,10. Wyższa skuteczność sama nie rozwiązuje problemu kosztów. Tabela jest ilustracją matematyczną, a nie wynikiem zbadanej strategii.

Przeprowadź scenariusz pogorszenia kosztów, zwłaszcza w godzinach sygnałów. Nie istnieje wspólny dla wszystkich strategii próg „średni zysk większy od dwukrotnego kosztu”. Ważne jest uzasadnienie założeń oraz wrażliwość wyniku. Zapisz, których kosztów nie udało się wiarygodnie odtworzyć.

Najpierw uzgodnij ceny, potem koszt spreadu

Cena Ask na wejściu i Bid na wyjściu uwzględniają spread inaczej niż wynik liczony ze środków kwotowań. Porównaj je na jednym kompletnym przykładzie.

Przesuń diagram w bok, aby zobaczyć całość

Najpierw uzgodnij ceny, potem koszt spreaduWłasny kompletny model jednego zakupu i późniejszej sprzedaży jednej umownej jednostki, bez prowizji, swapu i poślizgu. Na wejściu Bid 100 Ask 102 i środek 101; na wyjściu Bid 103 Ask 105 i środek 104. Zakup po Ask 102 i sprzedaż po Bid 103 dają +1 jednostkę ceny. Zmiana środków wynosi +3, odjęcie połowy obu spreadów, 1 i 1, daje ten sam +1. Odjęcie pełnych spreadów 2 i 2 od zmiany środków dałoby −1, błędny rachunek. Słupki wyników mają wspólne zero i liniową skalę; −1 jest wynikiem błędnego pomiaru, nie dodatkowym prawidłowym wykonaniem.DWA SPOSOBY, TEN SAM WYNIKWłasny long • jedna umowna jednostkaBidAskŚrodekWejście100102101Wyjście103105104Zmiana środków+3Ask → Bid+1Błędne: −2 − 2−1−2024Jednostki ceny • +3 − 1 − 1 = +1

Założenia: Własne dwie równoczesne pary Bid/Ask tego samego umownego instrumentu: wejście 100/102, wyjście 103/105. Środek jest średnią dwóch stron. Jedna umowna jednostka ilości; wykonania dokładnie po przyjętym Ask i Bid. Bez opłat, finansowania, luk i poślizgu. To nie aktualne kwotowanie FX ani gwarancja wykonania.

Wykonanie dokładnie po przyjętych cenach daje 103 − 102 = +1. Zmiana środków kwotowań wynosi 104 − 101 = +3. Wejście jest o 1 wyżej od środka, a wyjście o 1 niżej: 3 − 1 − 1 = +1. Obie drogi uzgadniają ten sam model.

Pełne spready to 2 na wejściu i 2 na wyjściu. Odjęcie obu pełnych spreadów od zmiany środków daje 3 − 2 − 2 = −1 i nie odpowiada tym wykonaniom. Jeszcze inne podwójne naliczenie powstałoby po odjęciu 2 od wyniku 103 − 102, który już używa Ask i Bid.

MetaQuotes — ceny handlu Bid i Ask rozróżnia cenę budującą wykres od cen operacji. Przed porównaniem raportów zapisz źródło każdej ceny. Rachunek dotyczy jednej jednostki ilości i ceny; dodatkowe opłaty oraz inne wykonania wymagałyby osobnego modelu.

Wynik Ask → Bid już zawiera koszt względem środków kwotowań.

Rozdziel tworzenie pomysłu i sprawdzian

In-sample służy rozwijaniu reguł, a out-of-sample sprawdzaniu wcześniej ustalonej wersji. Dla danych czasowych zachowaj chronologię. Proporcja 70/30 jest przykładem podziału, nie normą zapewniającą jakość. Uwzględnij długość pozycji, historię potrzebną wskaźnikom i ewentualny przeciek informacji na granicy okresów.

Jeśli po obejrzeniu OOS zmieniasz strategię i ponownie wybierasz najlepszy wariant na tym samym fragmencie, fragment stał się częścią procesu tworzenia. Oznacz to w raporcie. Nie wystarczy przemianować kolejnego uruchomienia na „niezależny test”.

Rejestruj liczbę pomysłów, parametrów, instrumentów i podziałów, które sprawdzono. Wybór najlepszego spośród setek prób może dać pozorną przewagę. Ograniczenie optymalizacji do dwóch parametrów nie usuwa problemu, jeżeli poza programem wypróbowano wiele innych decyzji.

Na granicy okresów usuń wyniki, których jeszcze nie znano

Chronologiczny podział po dacie wejścia nie wystarczy, jeśli do wyboru parametrów używasz przyszłego wyniku tej transakcji. W fikcyjnym modelu każda decyzja z chwili t zostaje oceniona dopiero w t + 3. Pierwszy sprawdzian zaczyna się w t 10; parametry mają być gotowe wcześniej, więc wolno użyć tylko wyników dostępnych przed t 10.

Ostatnie kandydatury do części rozwojowej
DecyzjaChwila poznania wynikuMożna użyć przy dopasowaniu przed t 10?
t 6t 9Tak
t 7t 10Nie
t 8t 11Nie
t 9t 12Nie

Z pozornych dziewięciu obserwacji t 1–t 9 pozostaje sześć t 1–t 6. Usunięcie t 7–t 9 nie wynika z liczby dni wybranej arbitralnie, lecz z momentu dostępności etykiety. Dla różnych długości pozycji decyzję trzeba oprzeć na zapisanym końcu każdego wyniku, nie zawsze na stałej przerwie.

Nie myl tego z historią wskaźnika: wcześniejsze ceny mogą być potrzebne do obliczenia sygnału testowego, a mimo to nie wolno użyć późniejszych wyników do wyboru parametrów. Zachowaj osobno datę decyzji, koniec okresu oceny i moment rzeczywistego udostępnienia danych. Takie usunięcie przecinających granicę etykiet rozwiązuje pokazany przeciek; nie eliminuje wszystkich sposobów dopasowania do historii.

Oceń próbę i wyniki razem

Nie ma uniwersalnego minimum stu transakcji ani pięciu lat. Znaczenie mają zależności między obserwacjami, różnorodność warunków, częstość sygnałów i liczba prób badawczych. Setka silnie skorelowanych wejść nie odpowiada setce niezależnych obserwacji. Nie dodawaj par wyłącznie po to, aby przekroczyć licznik.

Obok wyniku netto podaj liczbę transakcji, średni wynik, rozkład wygranych i strat, profit factor, obsunięcie oraz czas ekspozycji. Oddziel balance od equity z otwartymi pozycjami. Zysk na zamkniętych transakcjach może ukrywać duże chwilowe straty, jeśli patrzysz tylko na saldo.

Skuteczność 95% nie dowodzi ani oszustwa, ani dobrej strategii: kilka dużych strat może skasować wiele małych zysków. Tak samo nie istnieje jedyny „realistyczny” przedział 50–60%. Sprawdź spójność liczb oraz pełny rozkład, zamiast kwalifikować model jednym progiem.

Sprawdź odporność i odtwarzalność

Porównaj sąsiednie parametry, inne fragmenty czasu i uzasadnione warianty kosztów. Wynik lepszy tylko dla jednej dokładnej liczby wymaga wyjaśnienia, ale sam nie rozstrzyga przyczyny. Analiza walk-forward pomaga odtworzyć cykl kalibracji; również może zostać dopasowana przez wielokrotny dobór okien.

Zachowaj kod, parametry, dane lub ich identyfikator, wersję programu, raport i dziennik błędów. Odtwórz ręcznie kilka wejść i wyjść, w tym przypadek straty, brak zlecenia i lukę. Jeżeli nie potrafisz wyjaśnić pojedynczego wykonania, nie opieraj oceny na samym wykresie kapitału.

Co po backteście?

Na demo możesz sprawdzić działanie programu, harmonogram i zgodność sygnałów w czasie rzeczywistym. Wykonanie demonstracyjne nadal może różnić się od live. Długość takiej próby powinna wynikać z potrzebnych obserwacji, a nie obietnicy, że trzy miesiące wystarczą każdej strategii.

Nie ma obowiązku przechodzenia na prawdziwe pieniądze po dodatnim teście. Kryteria przerwania i potrzebny zakres dalszych dowodów zapisz wcześniej. Cały proces rozwija plan walidacji, a wrażliwość na losowanie wyników — Monte Carlo.

Sprawdź, czy rozumiesz

Jedno krótkie ćwiczenie

Około 2 min · możesz spróbować ponownie

Wejście long jest dokładnie po Ask 102, wyjście po Bid 103. Bez innych kosztów, jaki wynik ma jedna umowna jednostka ilości?

  • +1 jednostka wyniku; spread jest już w dwóch cenach wykonania.
  • −1, bo należy jeszcze odjąć spread 2 od różnicy cen.
  • +3, bo środki kwotowań rosną ze 101 do 104.
Sprawdź odpowiedź i wyjaśnienie

+1 jednostka wyniku; spread jest już w dwóch cenach wykonania.

103 − 102 = 1. Nie odejmujemy ponownie spreadu zawartego w użytych stronach kwotowania.

Jeszcze jedno ćwiczenie

50 transakcji daje łącznie 200 zł przed kosztami. Pełny koszt każdej wynosi 2 zł. Jaki jest wynik netto?

Sprawdź odpowiedź

200 − 50 × 2 = 100 zł, czyli średnio 2 zł na transakcję. Koszty trzeba liczyć dla wszystkich transakcji, także stratnych.

Następny temat: Plan walidacji strategii: dowody, wersje i decyzje →

Plan walidacji pomoże powiązać wynik rachunku z zapisaną wersją danych i modelu wykonania.

Sprawdź na rzeczywistych danych

2560 publikacji EUR/USD, 49 dni roboczych bez obserwacji i sprawdzenie kalendarza TARGET. Dane, wykres i kod.

Brak kursu nie oznacza luki w danych: kalendarz EBC 2016–2025 →