Wdrożenie nowej wersji bota na flotę: checklista i pułapki
W skrócie: nowa wersja bota to nie jeden plik, który kopiuję na konto. To skompilowany plik, ustawienia i zapis wykresu, i wszystko to muszę zmienić na każdym terminalu, na którym ten bot działa. Robię to jednym skryptem z paczki zbudowanej z repozytorium, ale decyzje, które najbardziej szkodzą, zapadają w kroku przed skryptem.
Skąd się bierze paczka
Wdrażam tylko z repozytorium, nigdy z kopii, którą ktoś ma na dysku. Skrypt buduje paczkę: skompilowany plik bota i tylko te ustawienia, które mają numer wersji w nazwie. Inne pomija. Do paczki trafia też krótki plik z opisem, co weszło i z jakiej wersji. Dzięki temu po tygodniu wiem, co dokładnie stoi na koncie.
Pierwsza pułapka dotyczy wskaźników. Jeśli bot ładuje wskaźnik po nazwie, paczka go nie zawiera, a świeże konto zgłosi błąd przy starcie. U mnie rozwiązaniem jest zamiana na zasób wkompilowany w plik bota, zanim bot trafi na flotę.
Rozesłanie
Drugi skrypt kopiuje plik bota i ustawienia na każde konto, na którym bot jest zainstalowany. Nie usuwa ustawień, które konto już ma, i nie dotyka działającego terminala. Jeśli bot jest akurat podpięty do wykresu, plik może być zablokowany do zapisu, wtedy skrypt tylko ostrzega. Przed puszczeniem na całą flotę rozsyłam na jedno konto.
Druga pułapka: wdrażam tylko boty, które faktycznie działają na danym terminalu. Podbicie wersji i kompilacja botów z innego terminala to praca, która niczego nie zmienia na kontach i tylko zaciemnia historię.
Ustawienia z wykresu to prawda
Najgroźniejsza chwila to przepisywanie ustawień. Wartości, które stoją na wykresie (zwłaszcza ryzyko), są tym, co bot naprawdę robi na koncie. Plik ustawień w repozytorium bywa starszy. Gdy się różnią, przepisuję plik z wykresu, a nie odwrotnie, i zgłaszam różnicę. Zapis wykresu zmieniam tylko na zamkniętym terminalu, bo otwarty zapisuje swój stan przy zamknięciu i nadpisałby moją zmianę. Przed zapisem sprawdzam w dzienniku, że terminal rzeczywiście się zamknął.
Trzecia pułapka: ustawienia nowej wersji mogą mieć inne domyślne wartości dla funkcji dodanych w międzyczasie. Funkcje opcjonalne w moich botach są domyślnie wyłączone, ale nowa funkcja, której nie ma w starym zapisie wykresu, dostaje wartość domyślną z kodu. Dlatego po wdrożeniu porównuję listę ustawień na wykresie z listą w nowej wersji.
Kopia zapasowa i sprawdzenie
Przed zmianą robię kopię plików, które nadpisuję, razem z sumą kontrolną. Po zmianie sprawdzam, że plik na koncie ma tę samą sumę kontrolną co w paczce. Ostatni krok to wpis w repozytorium: wersja, data i lista terminali. Bez niego nie odpowiem sobie za miesiąc, gdzie która wersja stoi.
Niedziela jest moim dniem na wdrożenia, bo rynki są zamknięte i żadna pozycja nie jest otwarta. W niedzielę nie robię testów, tylko wdrażam gotowy zestaw.
Checklista
- Paczka zbudowana z repozytorium, wersja w nagłówku zgodna z wersją w kodzie.
- Bot nie ładuje wskaźników po nazwie (albo mają zasób wkompilowany).
- Najpierw jedno konto, potem reszta.
- Ustawienia przepisane z wykresu, nie z pliku, różnice zgłoszone.
- Zapis wykresu zmieniany tylko na zamkniętym terminalu.
- Kopia zapasowa i suma kontrolna przed i po.
- Wpis w repozytorium z wersją, datą i listą terminali.
Powiązane
- Niedzielna aktualizacja floty terminali
- Kontrola ryzyka na wszystkich wykresach floty
- Wersjonowanie EA i changelog
- 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ą.