Agent AI uruchamia testy w MT5: jak sprawdzić, czy test się naprawdę wykonał
W skrócie: agent AI potrafi skompilować bota, odpalić Strategy Tester bez okna i wyciągnąć wynik. Problem zaczyna się, gdy test się nie wykonał, a agent i tak coś raportuje: stare dane z poprzedniego przebiegu albo pusty raport. Dlatego każdy krok dostaje weryfikację, a nie zaufanie do komunikatu “OK”.
Najgorszy błąd to ten, którego nie widać
Człowiek, który klika w Testerze, widzi, że test się nie włączył. Agent widzi tylko kod wyjścia i pliki. W moich notatkach są trzy przypadki, w których wszystko wyglądało dobrze, a wynik był nieprawdziwy:
| Sytuacja | Co widział agent | Co się naprawdę stało |
|---|---|---|
| Terminal w trakcie testu pobrał nową wersję | wynik w pliku | test się nie wykonał, skrypt wziął stary wynik |
| Brak zapisanego hasła do konta firmy | komunikat OK, nowy wiersz w tabeli | Tester nie wystartował, bo nie miał konta; wiersz był pusty |
| Wiele testów tego samego dnia | statystyki z logu | log jest wspólny dla całego dnia, liczby z kilku przebiegów się zsumowały |
Ostatni przypadek policzyłem na własnej skórze: maksymalny drawdown z “całego logu” wyszedł 66% zamiast prawdziwych 6%. Wynik wyglądał na wiarygodny, bo był liczbą, a nie błędem.
Co zrobiłem, żeby agent nie mógł się pomylić po cichu
Zamiast prosić agenta o ostrożność, wbudowałem kontrole w skrypt, który uruchamia test. Agent woła skrypt, a skrypt się broni:
- Twarda odmowa zamiast ostrzeżenia. Jeśli skompilowany plik bota nie istnieje albo jest starszy od kodu źródłowego, skrypt przerywa pracę. Ostrzeżenie w logu agent potrafi przeoczyć, wyjątek nie.
- Sprawdzenie konta po teście. Skrypt porównuje, z jakim kontem faktycznie działał Tester, z tym, które miał mieć. Niezgodność to błąd i wpis o niej w tabeli wyników, a nie wynik.
- Odrzucanie pustych raportów. Raport z zerem transakcji i okresem z roku 1970 to dla skryptu błąd, nie “test bez transakcji”.
- Brak odpalenia, gdy terminal jest zajęty. Gdy w tym samym folderze działa terminal, który otworzyłem ja, skrypt odmawia startu. Nie zamyka niczego na siłę.
- Limit czasu na przebieg. Skrypt ubija tylko własny proces, gdy test trwa za długo. Bez tego jeden zawieszony terminal potrafi stać pół godziny po zapisaniu raportu.
Dopiero tę ochronę rozszerzyłem po incydencie z aktualizatorem terminala (opisuję go w osobnym artykule): zamiast testu startowało okno aktualizacji i agent dokładał kolejne.
Jak agent ma czytać wynik, gdy raportu nie ma
Jeśli test dał log, ale nie dał raportu, agent nie liczy statystyk z całego pliku. Wycina fragment ostatniego przebiegu, od ostatniej linii z depozytem początkowym do końca testu, i dopiero z niego liczy transakcje, saldo końcowe i zdarzenia zarządzania pozycją. Maksymalny drawdown z takiego logu to tylko przybliżenie z próbek co godzinę, więc agent musi to napisać w odpowiedzi. Twarda liczba pochodzi z raportu, nie z logu.
Zgoda: kiedy agent w ogóle może uruchomić Tester
Uruchamianie testów to czas, zasoby i czasem moje własne okno Testera, które akurat używam. Dlatego zasada jest prosta: agent nie odpala Testera sam z siebie. Zgodą jest moje wywołanie konkretnej komendy (skilla) dla jednego bota. Każda następna seria testów, optymalizacja albo duży przesiew to znowu pytanie. Brief dla innej sesji agenta też nie jest zgodą.
Druga zasada: test regresji po każdej zmianie wspólnego kodu
Gdy zmieniam klasę używaną przez kilka botów, agent powinien udowodnić, że bez zmiany logiki wynik jest taki sam co do grosza: ta sama liczba transakcji, ten sam wynik, ta sama lista. To prosty sposób wyłapania błędu, którego sam kod nie pokazuje. Opisuję go w artykule o liście transakcji zamiast sumy.
Przy siatkach parametrów obowiązuje jeszcze jedna kontrola: jeśli wszystkie wyniki są identyczne, funkcja albo nie działa, albo nie wiąże w tej strategii. Taki wynik agent zgłasza zamiast go interpretować.
Co zostaje po stronie człowieka
Agent nie zastąpi decyzji, czy wynik ma sens. Kryteria (progi zysku, liczba transakcji, PASS i FAIL na prop ON) mam zapisane w osobnej checkliście i agent ma ich używać, a nie wymyślać własnych. Liczby, które trafiają do bazy wyników, przeglądam i zatwierdzam ja.
[DO UZUPEŁNIENIA: ile przebiegów z ostatnich tygodni agent zgłosił jako błędne, zanim trafiły do bazy; jeden konkretny przypadek z ostatnich dni]
Checklista
- skrypt przerywa, gdy plik bota jest nieaktualny albo go brak,
- po teście sprawdzone, na jakim koncie i serwerze test faktycznie się odbył,
- pusty raport i okres 1970 traktowane jako błąd,
- statystyki z logu liczone tylko z ostatniego przebiegu,
- drawdown z logu oznaczony jako przybliżony,
- limit czasu na przebieg i zabijanie tylko własnego procesu,
- test regresji po zmianie wspólnej klasy,
- identyczne wyniki całej siatki = podejrzenie, nie wniosek,
- zgoda na Tester przy każdej serii osobno.
Powiązane
- Lista transakcji zamiast sumy: diagnoza regresji wyniku
- Osobny terminal do testów: tryb portable
- Kompilacja EA z linii poleceń
- 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ą.