W dzisiejszym odcinku „Profesjonalnego inwestora" kontynuujemy podjęty poprzednim razem temat dotyczący ochrony wypracowanego zysku. Tydzień temu pokazaliśmy, jak zaprogramować funkcję „Breakeven", która po odpowiednio dużej, korzystnej zmianie kursu automatycznie przesunie nam zlecenie stop loss do poziomu otwarcia pozycji. Dziś pokażemy, jak stworzyć funkcję, które będzie ten stop loss podwyższać jeszcze bardziej. Zajmiemy się więc kodowaniem stopa kroczącego, z ang. „trailing stop".
Ruchoma linia obrony
Narzędzie stopa kroczącego jest bardzo często wykorzystywane w automatycznych i półautomatycznych strategiach inwestycyjnych. Jego zadaniem jest przesuwanie zlecenia stop loss wraz z korzystną zmianą kursu. Co istotne, mechanizm ten działa tak, że stop nie może się już cofnąć – albo pozostaje na poprzednim poziomie, albo zmienia się w kierunku korzystnej zmiany kursu. Dlatego też dla pozycji długich „trailing stop" będzie funkcją niemalejącą, a dla krótkich nierosnącą.
Przy programowaniu tego narzędzia warto sobie odpowiedzieć na dwa pytania. Po pierwsze – kiedy stop kroczący ma zostać aktywowany? Innymi słowy – jak dużo robot musi zarobić, by włączyć ochronę zysku. Po drugie – w jakiej odległości od aktualnej ceny ma być stop loss utrzymywany? Tutaj ustalamy więc, w jaki sposób nasza linia obrony będzie kroczyć.
Na potrzeby naszego cyklu ustaliliśmy, że stop kroczący będzie aktywowany, gdy kurs EUR/USD oddali się od ceny otwarcia pozycji o 25 pipsów na naszą korzyść. Zlecenie będzie natomiast tak przesuwane, by jego odległość od aktualnego kursu wynosiła zawsze 15 pipsów. Ustalenia te są oczywiście jednymi z wielu możliwych i raczej nadają się do aktywnej gry (stop zależny od aktualnej ceny Bid lub Ask). Kodowanie daje na szczęście tak dużą elastyczność, że mechanizm przesuwania linii obrony można uzależnić na przykład od poprzedniej ceny minimalnej bądź maksymalnej i ówczesnej wartości wskaźnika zmienności ATR. Wszystko zależy od potrzeb i wyobraźni programisty. My chcemy tylko zarysować podstawową mechanikę działania i kodowania takiego narzędzia.
Trailing Stop w MQL
Czytelnicy, którzy zapoznali się z poprzednim artykułem tego cyklu, mogą się domyślać, że do zaprogramowania stopa kroczącego również wykorzystamy funkcję OrderModify(), a logika instrukcji warunkowych będzie zbliżona do tych wykorzystywanych przy tworzeniu „Breakeven". Zanim jednak przejdziemy do tworzenia samej funkcji, musimy zainicjować w przestrzeni globalnej dwie nowe zmienne. Pierwsza przechowywać będzie poziom aktywacji stopa. Nazwiemy ją „TrailStart", przypiszemy wartość 0.0025 i nadamy typ „double". Będzie więc ona wyglądać następująco: „double TrailStop=0.0025;". Druga przechowywać będzie odległość, w jakiej stop ma być utrzymywany od obecnej ceny. Nazwiemy ją „TrailStep", przypiszemy wartość 0.0015 i nadamy również typ „double". Będzie więc ona wyglądać tak: „double TrailStep=0.0015;".