EN
Artykuły / 8.1 Podstawy Testera
Podstawy Testeraszkic

Limit czasu testu: zawieszony terminal Testera i jak go zakończyć bezpiecznie

14.11.20263 min czytania

W skrócie: gdy uruchamiasz Tester z linii poleceń, nikt nie patrzy na okno. Jeśli terminal się zawiesi albo zamiast testu odpali aktualizator, skrypt czeka bez końca. Dlatego każdy mój skrypt ma limit czasu: po jego przekroczeniu zamyka własny proces terminala (i tylko ten) i zgłasza błąd. Domyślnie 90 sekund na przebieg na świecach OHLC i 5 minut na tikach.

Skąd ten limit

Test z linii poleceń ma sens tylko wtedy, gdy kończy się sam (MetaEditor i terminal z linii poleceń). Trzy rzeczy potrafią go zablokować:

  • Zawieszony agent Testera. Przebieg się nie kończy, plik wyniku nie powstaje.
  • Terminal nie wychodzi po zapisaniu raportu. Raport już leży na dysku, a proces terminala wisi dalej. Raz tak było około 38 minut, a skrypt czekał, aż terminal zakończy pracę.
  • Aktualizator zamiast testu. Gdy MT5 ma nową wersję, terminal startuje aktualizację i czeka na okno UAC, którego nikt nie kliknie. Wsad nocny dokładał kolejne procesy po jednym na przebieg. Szczegóły w artykule o aktualizatorze i oknie UAC.

Bez limitu każda z tych sytuacji kończy się rano jednym wielkim oczekiwaniem albo setką procesów.

Jakie limity ustawiam

Rodzaj uruchomienia Limit
jeden przebieg na świecach OHLC 90 s
jeden przebieg na tikach 5 min
optymalizacja liczba przebiegów razy limit przebiegu, podzielona przez liczbę agentów, plus zapas

Wartości to domyślne punkty wyjścia dla moich testów (okno 12 miesięcy), nie reguła dla wszystkich. Przy dłuższym oknie i wolnym komputerze limit trzeba podnieść. Ważne, żeby istniał i żeby pochodził z pomiaru: zmierz kilka przebiegów, wybierz limit kilkukrotnie większy od typowego czasu.

Co dokładnie robi skrypt po przekroczeniu

  1. Zabija własny proces, który sam uruchomił (z identyfikatora procesu zapisanego przy starcie). Nie szuka procesów po nazwie, bo w tym samym komputerze mogą pracować inne terminale, w tym te z kontami.
  2. Zgłasza błąd, nie czeka dalej.
  3. Gdy raport już istnieje, a terminal nie kończy pracy, daje mu krótki czas na wyjście, a potem zamyka własny proces. Wynik jest dobry, kłopot dotyczy tylko procesu.

Zasada uzupełniająca: skrypt Testera przenosi logi Testera przed startem i sprawdza po nim, czy test uruchomił się na właściwym koncie. Bez tego łatwo ocenić wynik nie z tego przebiegu, co trzeba (agent AI uruchamia testy).

Dlaczego tylko własny proces

Mam kilka terminali na jednym komputerze, w tym produkcyjne z kontami. Zamknięcie “wszystkich terminali” mogłoby zatrzymać bota z otwartą pozycją. Dlatego skrypt zna tylko PID, który sam utworzył, i go zamyka. Terminal do testów uruchamiam zawsze w trybie portable, żeby ustawienia nie mieszały się z innymi (osobny terminal do testów).

Dodatkowe zabezpieczenie: log

Kolejny limit dotyczy rozmiaru logu EA. Log powyżej 100 MB na przebieg to sygnał, że bot się pętli albo spamuje (spam w logach). Wtedy przerywam test i szukam źródła, zamiast czekać na wynik.

[DO UZUPEŁNIENIA: ile razy limit czasu uratował nocny wsad i jaki jest typowy czas przebiegu u Ciebie]

Checklista

  • skrypt ma limit czasu, także nowy i edytowany,
  • limit z pomiaru typowego czasu, osobny dla świec i tików,
  • zamykany tylko własny proces (PID z uruchomienia),
  • przy istniejącym raporcie krótki czas na wyjście, potem zamknięcie własnego procesu,
  • blokada startu przy oczekującej aktualizacji MT5,
  • limit rozmiaru logu na przebieg.

Powiązane

Ostrzeżenie: handel CFD i forex wiąże się z wysokim ryzykiem utraty kapitału. Artykuł ma charakter edukacyjny i nie jest rekomendacją inwestycyjną.

Dalej w rozdziale

167

OHLC kontra prawdziwe tiki - ten sam bot, połowa zysku

Ten sam bot na Nasdaq, te same ustawienia: test na świecach M1 pokazał +66 413 USD, na prawdziwych tikach +32 720. Skąd różnica i jak zmiana wejścia na limit ją usunęła.