Wielu giełdowych guru podpowiada, by przed otwarciem każdej pozycji zadać sobie pytanie – ile mogę w tej transakcji stracić? Jest to bardzo słuszna sugestia, gdyż po pierwsze oswaja nas z możliwością popełnienia błędu i po drugie – pozwala ten błąd mieć pod kontrolą. Jeśli chodzi o odpowiedź na pytanie, to zdania są podzielone. Jedni uważają, że można ryzykować tylko 0,5 proc., a inni zgadzają się ryzykować 10 razy więcej. Wybór dokładnej liczby z przedziału 0,5-5 proc. zależy od indywidualnych preferencji i zasobności portfela. Na potrzeby tego artykułu przyjmijmy, że nie chcemy stracić w danej transakcji więcej niż 1 proc. posiadanego na koncie kapitału.
Do trzymania się zasad dotyczących ryzyka nie potrzebujemy oczywiście inwestycyjnego robota, ale praktyka pokazuje, że większość inwestorów najwiekszy problem ma właśnie z dycypliną. Robot nie zna takiego pojęcia – wykonuje instrukcje, które zostału mu zaprogramowane. Jak zatem nauczyć go obliczać wielkość dopuszczalnej straty?
Na początku robot musi wiedzieć, jaka jest aktualna wartość wolnych środków na naszym koncie. Aby uzyskać taką informację wykorzystujemy jedną z tzw. funkcji informacyjnych konta, a mianowicie: "AccoutFreeMargin()". Podaje ona wartość aktualnych środków w walucie konta bieżącego (w naszym przypadku PLN), które są dostępne do otwierania nowych pozycji. Jest to podejście bardziej konserwatywne, bo przy kalkulacji nie uwzględnimy tych środków, które już są na rynku zainwestowane w otwarte pozycje. Gdybyśmy chcieli je uwzględnić, można wywołać inną funkcję – "AccountEquity()". Pełny spis wraz z wyjaśnieniem znaczenia funkcji informacyjnych konta znajduje się pod linkiem (http://bossa.pl/fx/narzedzia/automatyzacja/slownik/funkcje/informacyjne/).
W celu obliczenia wielkości ryzykowanej kwoty wystarczy sumę wolnych środków pomnożyć przez 0,01 (obrazek obok; zmienne nazywane są w języku polskim, by całość była bardziej czytelna). Otrzymana kwota to nasz limit straty. Od niego oraz od przyjętego poziomu stop loss zależeć będzie to, jakiej wielkości pozycję możemy otworzyć. Jak zbudować mechanizm zarządzania jej wielkością?
Na potrzeby tego odcinka przyjmijmy kolejne po ryzyku procentowym założenie, a mianowicie – stop loss ma być zawsze oddalony od ceny wejścia o 15 pipsów, a take profit ma być dwa razy większy (30 pipsów). Dzięki temu otrzymamy korzystaną relację zysku do ryzyka, 2 do 1.
Aby robot obliczył właściwą wielkość pozycji, musi podzielić wielkość dopuszczalnej straty przez odległość stop lossa, liczoną w pipsach. Zanim jednak tego dokona musimy pamiętać, że gramy na parze EUR/USD, dlatego rozliczenia muszą być dokonywane w dolarze. Aby złotówki zamienić na amerykańską walutę wystarczy kwotę w złotówkach podzielić przez aktualny kurs USD/PLN. Aby go uzyskać należy skorzystać z funkcji "MarketInfo()", która zwraca określone informację na temat danego instrumentu. Funkcja ma dwa parametry – pierwszy to symbol instrumentu (u nas "USDPLN"), a drugi to zwracana informacja (u nas cena ASK, czyli MODE_ASK). Dzieląc Limit_Straty przez kurs dolara otrzymujemy poziom ryzyka wyrażony w amerykańskiej walucie. Otrzymaną kwotę dzielimy przez 15 (odległość stop lossa) i otrzymujemy ilość ryzykowanych dolarów na jeden pips. Ile to oznacza lotów? Skoro przy jednym locie jeden pips to 10 dolarów, to wystarczy otrzymaną kwotę podzielić przez 10 i otrzymamy dopuszczalną wielkość pozycji. Aby lepiej zrozumieć tę kwestię posłużmy się przykładem. Załóżmy, że mamy na koncie 100 000 PLN, a kurs USD/PLN wynosi 4 PLN. Ryzko na poziomie 1 proc. daje nam dopuszczalną stratę 1000 PLN, co w przeliczeniu na dolary daje 250 USD. Dzieląc te kwotę prze liczbę 15 pipsów (odległość stop lossa) otrzymujmey 16,7 USD/pips. Skoro przy jednym locie relacja ta wynosi 10 USD/pips, to z prostej, matematycznej propozycji wynika, że w naszym przypadku otworzyć możemy 1,7 lota.
Wnikliwi czytelnicy zauważą, że w kodzie zaprezentowanym na obrazku dotyczącym obliczania wielkości pozycji jest dodatkową funkcja "NormalizedDouble()". Jest to polecenie, które zaokrągli wynik do jednego miejsca po przecinku, bo taką formę liczby lotów akceptuje Meta Trader.
Aby naszą metodę doboru wielkości pozycji uruchomić w robocie, należy zmienną Ilosc_Lotów umieścić w funkcji "OrderSend", która wysyła zlecenia na rynek. Za wielkość pozycji odpowiada trzeci parametr i to właśnie tam powinniśmy wstawić stworzoną przez nas zmienną.
Zaprezentowany powyżej sposób dobierania wielkości pozycji to tzw. metoda ryzyka procentowego, zalecena m. in. przez Van Tharp'a w książce "Giełda, wolność i pieniądze". Jest to jej uproszczona wersja, bowiem przyjmujemy stałą odległość stop lossa. Nic nie stoi jednak na przeszkodzie, by wykorzystać tutaj inne metody. MQL jest na tyle elastyczny, że ograniczna nas własna wyobraźna i umiejętność kodowania. Możemy chociażby uzależnić wielkość stop lossa od zmienności (funkcja "iATR()", albo ekstremum z ostatnich kilku świec (funkcje "iLowest" i "iHighest"). Ten drugi pomysł proponuje Jim Dandy, amerykański vloger, do którego filmów już nie raz odsyłaliśmy w tym miejscu (link do filmu: https://www.youtube.com/watch?v=SVofW9hN4gc).
W następnym odcinku skupimy się już na testach naszego robota. Sprawdzimy, jak radziłby sobie na rynku, gdybyśmy zastosowali go w praktyce. Przy tej okazji pokażemy, jak działa tester strategii wbudowany w platformę Meta Trader i jak wiele błędów można dzięki niemu zidentyfikować.