Limit zamiast zlecenia rynkowego: wejście na dotknięcie poziomu
W skrócie: strategia, która czeka na cofnięcie ceny do konkretnego poziomu, ma dwie możliwości wejścia: sprawdzać cenę przy każdym tiku i kupić rynkowo, albo od razu wystawić zlecenie limit. U mnie pierwsza wersja zawyżała backtest na świecach M1 i dawała poślizg w realu. Po przejściu na limit wynik na świecach (+31 663) i na tikach (+31 066) przestał się rozjeżdżać.
Skąd się wziął problem
Bot wchodzi na cofnięciu do 50% ruchu po wybiciu z zakresu otwarcia (bot 4063_NyOrbFibPullbackNoCancelEA). Poziom nie zmienia się przez kilka minut, a ja sprawdzałem go co tick i wchodziłem rynkowo, gdy cena go dotknęła.
W teście na świecach M1 dotknięcie poziomu wewnątrz świecy oznacza wejście po cenie dokładnie z poziomu, bez poślizgu i bez spreadu w ruchu. W realu zlecenie rynkowe wchodzi po aktualnej cenie, czyli gorszej. Różnica jest systematyczna i zawsze na korzyść testu. Opisałem ten mechanizm szerzej w artykule o różnicy między OHLC a tikami. Poza tym sprawdzanie poziomu co tick to niepotrzebna praca terminala.
Jak działa wersja z limitem
Po wybiciu bot wystawia zlecenie limit z gotowymi SL i TP liczonymi od ceny poziomu. Raz na minutę przelicza poziom. Gdy poziom zmieni się o co najmniej ustalony próg (1 punkt), bot usuwa limit i wystawia nowy. Samej modyfikacji nie używam, bo przesunięcie poziomu zmienia odległość do SL, a to zmienia lot, a wolumenu istniejącego zlecenia nie da się zmienić.
Kierunek zmian jest jednostronny: limit kupna przesuwa się tylko w górę, limit sprzedaży tylko w dół, bo skrajny punkt ruchu może tylko rosnąć. W 3828 zmianach z testu nie było ani jednej w złą stronę.
Czy to nie jest spam zleceń
Tego bałem się najbardziej, bo część firm prop patrzy na liczbę operacji i potrafi zablokować konto za nadmierną liczbę zleceń. Policzyłem z testu obejmującego 472 dni:
| Miara | Wartość |
|---|---|
| Wystawionych limitów | 3618 |
| Średnio dziennie | 7,7 |
| Maksimum dziennie | 46 |
| Więcej niż 1 na minutę | nigdy |
Próg 1 punkt odciął około 16% operacji bez zmiany wyniku. Do logu dodałem liczniki: numer zlecenia w danym dniu, podsumowanie dnia i sumę przy zatrzymaniu bota. Regulaminu konkretnej firmy to nie zastąpi, ale mam liczby, którymi mogę się bronić.
Wygasanie po stronie brokera
Limit ustawiam z czasem wygaśnięcia po stronie brokera, na godzinę graniczną wejść. Dzięki temu zlecenie znika nawet wtedy, gdy terminal padnie i bot go nie skasuje. Nie zostawiam pendingów na noc, a wygasanie to zabezpieczenie na wypadek awarii.
Jest tu pułapka. Broker odrzucił mi 10 zleceń z kodem 10022: czas wygaśnięcia był za blisko. Dlatego nie wystawiam limitu w ostatnich 3 minutach przed wygaśnięciem. Pozycja po wypełnieniu limitu nie ma czasu wygaśnięcia, SL i TP pilnuje broker, a zamknięcie o godzinie robi bot.
Co zyskałem, czego nie
Zyskałem zgodność testu z realem i spokojniejszą pracę bota. Nie zyskałem gwarancji wypełnienia: gdy cena tylko musnie poziom, limit może się nie wypełnić, a rynkowe by wszedł. To prawdziwa cena tego rozwiązania, więc porównuję wynik na tikach, a nie świecach, zanim uznam wersję za gotową.
Checklista
- Strategia wchodzi na poziomie, który stoi w miejscu przez kilka minut.
- Limit ma gotowe SL i TP, a lot liczę od odległości do SL.
- Przy zmianie poziomu usuwam zlecenie i wystawiam nowe, nie modyfikuję.
- Mam próg zmiany poziomu i licznik zleceń w logu.
- Czas wygaśnięcia ustawiam po stronie brokera, z zapasem kilku minut (kod 10022).
- Wynik porównuję na tikach, nie tylko na świecach M1.
Powiązane
- OHLC kontra prawdziwe tiki
- Luka cenowa i stop loss
- Bot nie otwiera pozycji - 15 przyczyn
- Pojęcia z artykułu: słowniczek, skorowidz
Ostrzeżenie: handel CFD i forex wiąże się z wysokim ryzykiem utraty kapitału. Wyniki testów opisują przeszłość i nie gwarantują zysku w przyszłości. Artykuł ma charakter edukacyjny i nie jest rekomendacją inwestycyjną.