Limit czasu testu: zawieszony terminal Testera i jak go zakończyć bezpiecznie
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
- 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.
- Zgłasza błąd, nie czeka dalej.
- 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
- Aktualizator MT5 i okno UAC: 101 procesów w nocy
- Agent AI uruchamia testy
- Osobny terminal do testów (portable)
- Pojęcia z artykułu: słowniczek, skorowidz
Ostrzeżenie: handel CFD i forex wiąże się z wysokim ryzykiem utraty kapitału. Artykuł ma charakter edukacyjny i nie jest rekomendacją inwestycyjną.