Ponawianie zamknięcia pozycji przez weekend: spam w logach
W skrócie: gdy bot chce zamknąć pozycję o ustalonej godzinie, a rynek jest już zamknięty, każda próba kończy się odrzuceniem z kodem “rynek zamknięty”. Bot ponawia ją co kilkanaście sekund aż do poniedziałku. W testach wieloletnich to setki weekendów i logi po kilkaset megabajtów. Poprawka nie polega na wyciszeniu komunikatu, tylko na niewołaniu zamknięcia, gdy rynek stoi.
Jak to wykryłem
Przyjęta przeze mnie zasada: log Testera większy niż 100 MB na jeden przebieg to sygnał do zbadania źródła. Przejrzałem więc największe logi z testów i policzyłem, co w nich dominuje. Wyszło jedno: ponawianie zamknięcia pozycji w czasie, gdy rynek jest zamknięty. Każda próba daje 2-3 linie, bo log tworzy już klasa wysyłająca zlecenie, a dopiero potem własny komunikat bota.
Dwa przypadki
Pierwszy: bot wybijający kanał EMA na złocie (bot 2010_GoldAsiaEmaChannelBreakoutEA). Pozycja otwarta w piątek miała termin zamknięcia o 22:55, czyli po zamknięciu rynku złota. Wisiała cały weekend, a próby szły z każdej świecy M1 i z timera co 15 sekund. W jednym logu zliczyłem 106 065 linii odrzuceń, co dawało 62% objętości całego logu. Pozycja i tak zamykała się po otwarciu rynku, więc wynik się nie psuł. Psuł się log i czas testu.
Drugi: bot grający lukę FVG na indeksie (bot 6260_SixCandleFvgEA). Okno zamknięcia i funkcja “blisko zamknięcia rynku” wołały zamknięcie z timera co 5 sekund. Podczas przerwy dobowej i weekendu daje to ok. 1,84 mln linii, 73% logu.
| Bot | Częstość prób | Skala w logu |
|---|---|---|
| bot kanału EMA (złoto) | M1 + timer co 15 s | 106 065 linii, 62% logu |
| bot FVG (indeks) | timer co 5 s | ok. 1,84 mln linii, 73% logu |
Dlaczego samo wyciszenie komunikatu nie wystarcza
Linie “nieudane zlecenie” tworzy biblioteka wysyłająca zlecenie, nie bot. Usunięcie własnego komunikatu skraca log najwyżej o jedną trzecią, a próby nadal idą do serwera. Skutek w żywym handlu jest gorszy niż w Testerze: bot zalewa dziennik tysiącami odrzuceń, a w nim giną rzeczywiste ostrzeżenia.
Co poprawiam
- Zamknięcie próbuję tylko wtedy, gdy symbol jest w sesji handlowej (z danych sesji symbolu albo trybu handlu). Pierwsze zamknięcie następuje na pierwszym timerze po otwarciu, jak dotychczas, więc wynik się nie zmienia.
- Zamiennie: po odrzuceniu zapamiętuję czas następnej próby (np. 60 s). To prostsze, ale może przesunąć cenę wyjścia o minutę w poniedziałek rano.
- Komunikat o odrzuceniu loguję raz na pozycję, a nie przy każdej próbie.
- Po zmianie robię regresję: ta sama liczba transakcji i ten sam zysk co przed poprawką.
Wspólna metoda w bibliotece jest rozwiązaniem docelowym, ale zmiana biblioteki wymusza podbicie każdego bota, który ją używa. Dlatego najpierw poprawiam dwa najgorsze boty lokalnie.
Przyczyna u źródła
Za każdym razem jest to rozbieżność: godzina zamknięcia w bocie późniejsza niż koniec sesji symbolu. Zasada 22:45 czasu serwera (art. o zamknięciu przed weekendem) usuwa większość takich przypadków. Wartość 22:55 na indeksie w piątek jest już za późna, bo sesja kończy się wcześniej.
Checklista
- Sprawdź największe logi Testera i zobacz, które komunikaty dominują.
- Zamknięcie pozycji tylko w sesji handlowej symbolu.
- Komunikat o odrzuceniu raz na pozycję.
- Godzina zamknięcia bota przed końcem sesji symbolu (standard 22:45 serwera).
- Po poprawce regresja: ta sama liczba transakcji i ten sam zysk.
[DO UZUPEŁNIENIA: czy poprawka została już wdrożona w obu botach i na jakich kontach pojawiło się to na żywo]
Powiązane
- Zamknięcie pozycji przed weekendem
- Przerwa dobowa indeksów i złota
- Lista transakcji zamiast sumy
- Pojęcia: słowniczek, skorowidz
Źródła
Brak źródeł zewnętrznych - analiza własnych logów testów (listopad 2026).
Ostrzeżenie: artykuł ma charakter edukacyjny i nie jest poradą inwestycyjną. Wyniki z przeszłości nie gwarantują przyszłych. Handel na rynkach finansowych wiąże się z ryzykiem utraty kapitału.