Filtr maksymalnego spreadu w bocie: trzy sposoby i pułapki
W skrócie: bot, który wchodzi bez sprawdzenia spreadu, kupuje czasem po cenie z dużego rozszerzenia (otwarcie sesji, news). Można to ograniczyć trzema sposobami: sztywnym limitem w punktach z ponawianiem wejścia, limitem kosztu spreadu jako procent ryzyka albo poszerzeniem SL tak, żeby koszt spadł do limitu. Każdy działa inaczej, a w praktyce najczęściej psuje się samo wpięcie filtra do bota.
Po co ten filtr
Przy stałym ryzyku w dolarach koszt spreadu zależy od odległości SL: ciasny SL oznacza duży lot, a więc większy koszt spreadu w stosunku do ryzyka. Ile to jest w skali całej strategii, liczę w artykule ile procent zysku zjada spread. Filtr pilnuje pojedynczego wejścia, nie średniej. Ma sens głównie w botach z zmienną odległością SL (ATR, struktura); przy sztywnym SL koszt spreadu to stały ułamek ryzyka, więc filtr daje mniej.
Trzy mechanizmy
| Sposób | Kiedy decyduje | Co robi |
|---|---|---|
| Limit w punktach | przed liczeniem lota | gdy spread za duży, wstrzymuje sygnał i ponawia co ok. 30 s do limitu minut |
| Limit kosztu w % ryzyka | po policzeniu lota | odrzuca wejście, jeśli koszt spreadu przekracza zadany procent ryzyka; bez ponawiania |
| Poszerzenie SL | po policzeniu lota | zamiast odrzucić, oddala SL tak, żeby koszt spadł do limitu, i przelicza lot |
Limit w punktach jest prosty, ale zależy od instrumentu i pory dnia, więc jedna liczba rzadko pasuje do całej doby (spread wg godzin). Limit kosztu w procentach lepiej skaluje się z odległością SL, bo patrzy na to, co spread realnie zabiera z ryzyka. Poszerzenie SL pasuje do strategii, w których szerszy SL nie zmienia logiki wejścia, bo inaczej tworzy inną strategię niż testowana.
Pułapki z wdrożeń
Martwy input. W jednym z botów (bot 2908_DonchianPullbackEA) wpiąłem tylko dwa z trzech mechanizmów. Input z limitem w punktach istniał i można go było ustawić, ale kod go nie czytał. Zauważyłem to dopiero w logu wejścia przy spreadzie 203 punktów mimo ustawionego limitu. Dziś przy każdym wdrożeniu piszę krótki manifest: który mechanizm jest wpięty, a który nie.
Ponowienie wejścia po czasie. Gdy sygnał czeka na niższy spread, po kilkudziesięciu sekundach cena może być zupełnie gdzie indziej, a sam sygnał nieważny (świeca wróciła za poziom). Dodałem opcjonalną rewalidację sygnału i limit dryfu liczony w wielokrotności SL. Test na bocie złotym pokazał jednak, że anulowanie po dryfie pogorszyło wyniki, więc te opcje zostały wyłączone. Wniosek: nie każdy rozsądnie brzmiący filtr pomaga, trzeba go sprawdzić na wynikach (jak oceniać filtr).
Spread w Testerze. Na świecach OHLC spread jest stały z danych świecy, więc filtr wygląda w teście na mało ważny, a na koncie bywa kluczowy (spread M1 kontra tiki). Ocena filtra spreadu wymaga tików.
Koszt liczony z głowy. Koszt spreadu w dolarach liczę oficjalną funkcją MT5 dla danego lota, nie ręcznie z wartości punktu. Tak samo jak lot (wzór na lot): własny wzór zawodzi na symbolach o nietypowej specyfikacji.
Jak ustawić
- Zmierz rozkład spreadu przy wejściach bota (log z każdym wejściem i spreadem).
- Zacznij od limitu kosztu w procentach ryzyka, nie od stałej liczby punktów.
- Sprawdź, ile wejść odcina filtr i co z nimi stałoby się bez niego.
- Wpisz do dokumentacji bota, które mechanizmy są włączone.
[DO UZUPEŁNIENIA: jaki limit (punkty lub procent) masz ustawiony w botach live i ile wejść odcina]
Checklista
- filtr domyślnie wyłączony, włączany jawnie,
- sprawdzone w logu, że input faktycznie działa (wejście przy spreadzie powyżej limitu nie powstaje),
- koszt spreadu liczony funkcją MT5, nie ręcznie,
- wpływ filtra oceniony na wynikach (prop OFF, kilka lat),
- ponawianie wejścia ma limit czasu i sprawdzenie ważności sygnału.
Powiązane
- Ile procent zysku zjada spread
- Spread wg godzin
- Jak oceniać filtr wejścia
- 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ą.