Strzałka widoczna dziś na historycznym dołku nie dowodzi, że była tam w chwili, gdy cena go tworzyła. Podczas oceny wskaźnika potrzebujesz dwóch informacji: gdzie narysowano sygnał i kiedy można go było zobaczyć. Ich pomieszanie potrafi zamienić opis przeszłości w pozornie doskonałą strategię. Poniższa procedura pomaga sprawdzić zachowanie narzędzia bez przypisywania mu transakcji, których nie dało się wtedy podjąć.

Co nazywamy repaintingiem

Dokumentacja Pine Script o repaintingu opisuje różnice między obliczeniami historycznymi i bieżącymi. Wartości otwartej świecy mogą się zmieniać; oznaczenie pivotu może zostać dodane do wcześniejszej świecy dopiero po potwierdzeniu. To różne mechanizmy. Zamknięcie świecy wykresu nie zamyka automatycznie świecy wyższego interwału, z której wskaźnik pobiera dane.

Nie zaczynaj od etykiety „oszustwo”. Najpierw ustal deklarację autora: czy sygnał jest wstępny, czy potwierdzony, od czego zależy i czy później bywa przenoszony. Zmiana obrazu wymaga wyjaśnienia, ale jej brak w krótkiej próbie nie dowodzi ani uczciwości całego produktu, ani rentowności strategii. Tak samo napis „non-repaint” nie jest kompletną specyfikacją.

Dlaczego wcześniejsze wartości mogą się zmienić

MetaQuotes opisuje ZigZag jako narzędzie porządkujące zwroty ceny i ostrzega, że jego ostatni segment może ulec zmianie po napływie danych. Nie zakładaj, że każdy widoczny koniec odcinka był od razu ostateczny. Sposób wyznaczania punktów oraz moment ich ustalenia trzeba sprawdzić dla konkretnej implementacji i ustawień.

Zmiana może też wynikać z historii wejściowej. W dokumentacji MQL5 OnCalculate opisano reset parametru prev_calculated po dograniu starszych danych lub uzupełnieniu luk. Sam zapis wartości w buforze nie gwarantuje więc jej niezmienności na zawsze. Zachowaj dane wejściowe i wersję programu, zanim uznasz różnicę po restarcie za celowe poprawianie wyników.

Osobno sprawdź wykorzystanie przyszłych informacji w symulacji. Jeżeli decyzję przypisano do momentu wcześniejszego niż dostępność niezbędnych danych, powstaje błąd look-ahead. Nie każde przesunięcie rysunku jest błędem obliczeń; problem pojawia się wtedy, gdy rysunek interpretuje się jako sygnał dostępny wcześniej. W raporcie rozdziel opóźnienie rozpoznania od ceny, po której hipotetycznie wykonano zlecenie.

Najpierw przygotuj zapis, którego nie nadpiszesz

Wybierz jeden instrument i jedną konfigurację. Zapisz ustawienia przed obserwacją, a kolejne wyniki dopisuj do nowych wierszy. Nie poprawiaj starego rekordu tak, aby zgadzał się z aktualnym wykresem. Zrzut ekranu jest przydatnym załącznikiem, lecz powinien pokazywać skalę czasu i nazwę instrumentu; sam wycięty fragment ze strzałką zwykle nie wystarcza do późniejszego odtworzenia warunków.

Własny arkusz kontroli: zapisuj obserwację przed wyjaśnieniem
PoleCo zachowaćPo co
ŚrodowiskoSymbol, dostawca danych, interwał i strefa czasuNie porównywać różnych szeregów
Wersja narzędziaNazwa, wersja, ustawienia i ewentualny kodOddzielić aktualizację od zachowania starej wersji
Moment obserwacjiCzas zapisu, czas świecy i informacja, czy była zamkniętaUstalić dostępność informacji
SygnałKierunek, wartość, świeca narysowania i czas pierwszego zauważeniaNie przypisywać wcześniejszego wejścia
Późniejsze porównanieTe same pola po kolejnych świecach i po ponownym załadowaniuUstalić, co konkretnie się zmieniło

Zaplanuj oddzielne obserwacje podczas tworzenia świecy, po jej zamknięciu, po zamknięciu interwału nadrzędnego oraz po ponownym wczytaniu wykresu. Zmieniaj jeden element naraz. Jeśli jednocześnie przełączysz brokera, parametry i wersję wskaźnika, nie dowiesz się, który z nich odpowiada za różnicę. W notatce dopisz również przerwy w obserwacji: brak zapisu nie oznacza braku sygnału.

Przykład: punkt z 10:10 znany dopiero o 10:25

Przyjmijmy własną, jawną regułę: maksimum jest pivotem, gdy jego High jest ściśle większe od High dwóch zamkniętych świec po lewej i dwóch po prawej. Równość nie spełnia warunku. Poniżej są fikcyjne dane M5, a godziny oznaczają otwarcia świec. Zakładamy ciągły zapis bez luk; nie jest to test konkretnego płatnego wskaźnika.

Autorski model pivotu: dwie niższe świece z każdej strony
Świeca M5 odHighCo wiadomo po zamknięciu
10:001,1000Za mało danych dla badanego punktu
10:051,1010Nadal czekamy na kandydata
10:101,1040O 10:15 mamy kandydata, brak dwóch świec z prawej
10:151,1030O 10:20 znana jest jedna świeca z prawej
10:201,1020O 10:25 znane są obie; dopiero teraz potwierdzenie

High 1,1040 przewyższa wszystkie cztery sąsiednie wartości. Gdy o 10:25 zamknie się świeca rozpoczęta o 10:20, reguła pozwala oznaczyć punkt z 10:10. Rysunek może trafić wstecz na właściwe ekstremum, ale informacja stała się dostępna dziesięć minut po zamknięciu jego świecy. Od jej otwarcia upłynęło piętnaście minut. Te dwa pomiary opóźnienia nie są sprzeczne.

Załóżmy dodatkowo, że pierwszą możliwą ceną sprzedaży po potwierdzeniu był Bid 1,1018. Wpisanie do testu sprzedaży po historycznym High 1,1040 dawałoby przewagę 0,0022, czyli 22 pipsy przy pipie 0,0001. Dla ekspozycji 10 000 EUR to 22 USD różnicy w wyniku cenowym, jeszcze przed opłatami. Nie liczymy tu zysku transakcji: nie podaliśmy ceny wyjścia. Pokazujemy wyłącznie skutek przypisania niedostępnej ceny wejścia.

Test dopisywania danych wykrywa ukrytą przyszłość

Możesz sprawdzić własny algorytm bez oceniania wyglądu sygnałów. Najpierw oblicz wartości na krótkim, zamkniętym fragmencie. Potem dopisz późniejsze obserwacje, pozostawiając wcześniejsze ceny bez zmian, i porównaj wcześniejsze wyniki. Kontrola dotyczy wartości, które program przedstawia jako ostateczne; świadomie przesunięty rysunek wymaga osobnego opisu momentu dostępności.

Fikcyjny wskaźnik dzieli każdą cenę przez maksimum całego załadowanego zbioru. Nie korzysta z ujemnego indeksu, lecz nadal przenosi przyszłość do przeszłości.

Niezmieniona cena 100, zmieniona późniejsza historia
Załadowane cenyWartość dla pierwszej ceny
100, 110100/110 = 0,9091
100, 110, 120100/120 = 0,8333

Spadek wcześniejszej wartości o około 0,0758 wynika wyłącznie z dopisania ceny 120. Kontrprzykład pokazuje, dlaczego samo sprawdzenie indeksów nie wystarcza. Wariant dzielący cenę przez maksimum danych dostępnych do tej chwili zachowuje pierwszą wartość 1 w obu uruchomieniach. Powtórz próbę także po restarcie programu, zachowując wejścia i wyniki. Zgodność jednego fragmentu jest testem kontrolnym, a nie dowodem poprawności wszystkich ścieżek kodu.

Alert, odtwarzanie i kod to osobne kontrole

W TradingView zapisany alert działa na kopii skryptu i ustawień z chwili utworzenia. Późniejsze zmiany wykresu nie aktualizują go automatycznie. Dokumentacja alertów odróżnia również wyzwolenie przy pierwszym zdarzeniu świecy od wyzwolenia na jej zamknięciu. Porównuj tę samą konfigurację alertu i wykresu; zachowuj czas wysłania oraz treść powiadomienia.

Instrukcja Bar Replay zaznacza, że istniejące alerty serwerowe nadal korzystają z danych bieżących. Nie traktuj ich jako wiadomości wysłanych w odtwarzanej przeszłości. Odtwarzanie jest pomocą do oglądania kolejności zmian, a zakres udostępnionych danych i tryb obliczeń muszą odpowiadać pytaniu, które chcesz sprawdzić.

Przykładowo, na M5 o 10:15 godzinowa świeca 10:00–11:00 jeszcze trwa. Jeśli decyzja zależy od jej końcowego High, czekanie wyłącznie na zamknięcie M5 nie wystarczy. Przy przeglądzie kodu sprawdź moment udostępnienia każdej serii. W Pine ustawienia lookahead i przesunięcia serii trzeba analizować łącznie; sama obecność jednej flagi nie rozstrzyga poprawności.

Inny wynik po wczytaniu nie musi oznaczać użycia przyszłości

Zachowany eksport trzech zamknięć ma 100,102,104, więc SMA 3=102. Późniejszy eksport tych samych chwil zawiera 100,102,101, dając SMA 3=101. Ostatnia cena została zmieniona. Algorytm może używać wyłącznie wcześniejszych danych, a mimo to wynik się różni.

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

Zmiana wartości wejściowej przy tym samym wzorze SMADwie serie mają wspólne 100 i 102. Trzecia cena pierwotnie 104, w drugim eksporcie 101. Wyniki średniej 102 i 101 różnią się wskutek zmiany danych, nie dodania przyszłej ceny do niezmienionej historii.Najpierw porównaj wejściowe ceny100102104101Wersja A: (100+102+104)/3 = 102Wersja B: (100+102+101)/3 = 101Zmieniono wejście; wzór SMA jest ten sam.
Połączenia pokazują ceny dwóch wersji eksportu. Nie są porównaniem dwóch różnych algorytmów.

Sprawdź kolejno: te same chwile i pola cen, zgodność eksportu, wersję wskaźnika i ustawienia. Test dopisywania przyszłości wymaga niezmienionych wcześniejszych wejść. Zmieniony eksport wymaga osobnej diagnozy; przykład nie dowodzi poprawności całego programu.

Założenia: Fikcyjne wersje danych dla tych samych trzech zakończonych przedziałów. Nie ustalamy przyczyny korekty ani nie opisujemy rzeczywistego dostawcy. Weryfikacja wzoru lub danych: MQL5: zmiany historii w OnCalculate.

Jak sformułować wynik kontroli

Dobry wniosek jest ograniczony do dowodów: „W wersji X, przy ustawieniach Y, sygnał zapisany po zamknięciu wskazanej świecy zniknął po ponownym wczytaniu”. Dołącz oba zapisy i sprawdź, czy zmieniły się dane wejściowe. Słaby wniosek brzmi: „Przez pięć minut nic się nie zmieniło, więc wskaźnik zawsze działa poprawnie”. Nie ma uniwersalnej liczby świec ani dni, która wyklucza wszystkie możliwe zachowania programu.

Jeśli narzędzie dopisuje punkty wstecz, a chcesz oceniać regułę transakcyjną, zapisuj sygnał dopiero od rzeczywistego momentu rozpoznania. Jeżeli nie potrafisz go ustalić, nie przypisuj historycznym oznaczeniom transakcji. Dopiero potem przejdź do testowania strategii z kosztami. Weryfikacja repaintingu sprawdza dostępność informacji; ocena przewagi wymaga odrębnej analizy wyników.

Sprawdź, czy rozumiesz

Jedno krótkie ćwiczenie

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

Po restarcie wartość SMA się zmieniła, a eksport pokazuje inne Close tej samej zamkniętej świecy. Jaki jest pierwszy wniosek?

  • Udowodniono look-ahead.
  • Udowodniono poprawność całego wskaźnika.
  • Trzeba osobno zbadać zmianę danych i zachować obie wersje.
Sprawdź odpowiedź i wyjaśnienie

Trzeba osobno zbadać zmianę danych i zachować obie wersje.

Tak. Najpierw uzgodnij wejście; później oceniaj zachowanie narzędzia przy porównywalnych warunkach.

Jeszcze jedno ćwiczenie

W modelu z tabeli zmień High świecy 10:20 na 1,1045. Czy maksimum świecy 10:10 jest potwierdzonym pivotem o 10:25? Co z ceną hipotetycznej sprzedaży 1,1040?

Sprawdź odpowiedź

Nie: 1,1040 nie jest większe od 1,1045, więc jawna reguła nie potwierdza badanego pivotu. Nie wolno przypisać temu sygnałowi wejścia po 1,1040. Sam wyższy High nie potwierdza jeszcze nowego pivotu, który wymagałby własnych dwóch świec po prawej.

Następny temat: Backtest strategii: reguły, dane, koszty i ocena →

Backtest pozwoli zachować wersję danych i programu użytych do każdej próby.