Podstawy programowania strategii w języku MQL, cz. 2

W nauczeniu programu analizy rynku i podejmowania decyzji pomagają operacje arytmetyczne, logiczne, relacji i przypisania. Dziś pokazujemy, na czym one polegają.

Aktualizacja: 22.07.2016 07:38 Publikacja: 22.07.2016 06:00

Powyżej widzimy ekran Meta Editora z zadeklarowanymi zmiennymi i komentarzami. Najpierw zadeklarowan

Powyżej widzimy ekran Meta Editora z zadeklarowanymi zmiennymi i komentarzami. Najpierw zadeklarowane są trzy zwykłe zmienne: dwie typu int (Stop Loss i TakeProfit) oraz jedna typu double (LotSize). Obok nich znajduje się komentarz liniowy, który rozpoczyna się znakiem „//”.

Foto: Archiwum

Tydzień temu pisaliśmy w tym miejscu, że programowanie można porównać do tworzenia przepisu na ciasto. Musimy podać rodzaj i ilość składników, a następnie pokazać instrukcje ich łączenia. Składniki to w programowaniu zmienne, czyli dane o różnych typach, które omówiliśmy w poprzednim odcinku tego cyklu. Dziś pójdziemy krok dalej i pokażemy kolejne elementy składni MQL, które pozwalają przeprowadzać na zmiennych odpowiednie operacje.

Zmienna tablicowa

Na początek, celem uzupełnienia poprzedniego materiału, chcieliśmy dodać, że zmienna nie musi przechowywać tylko jednej wartości. Tydzień temu pisaliśmy bowiem, że deklarując zmienną całkowitą STOP_LOSS, możemy za pomocą operatora przypisania „=" nadać jej wartość na przykład 50 pipsów (wówczas wyglądałoby to tak: int STOP_LOSS=50;). Jak jednak postąpić, gdy chcielibyśmy, aby zmienna przechowywała jednocześnie 10 wartości zlecenia? Można oczywiście stworzyć 10 zmiennych: STOP_LOSS1, STOP_LOSS2...STOP_LOSS10, i do każdej przypisać konkretną wartość. Będzie to jednak czasochłonne i niepotrzebnie rozbuduje kod. Wyjściem jest wykorzystanie tzw. tablicy. Jest to zmienna, która może przechowywać wiele wartości naraz, każdej nadając unikatowy indeks (numer). Tak jak zwykłą zmienną porównywaliśmy do pojedynczej szufladki na dane, tak tablicę można porównać do dużego mebla, który ma wiele ponumerowanych szufladek. Tablice deklaruje się podobnie do zwykłej zmiennej, tzn. na początek dajemy typ przechowywanej zmiennej, następne nazwę tablicy, liczbę rezerwowanych szufladek (liczba musi być w nawiasach kwadratowych) i na końcu dajemy średnik. Trzymając się przykładu ze stop lossem o 10 wartościach, tablica wyglądałaby następująco: int STOP_LOSS[10];. Warto tutaj pamiętać, że program numeruje szufladki od 0. Także pierwsza szufladka będzie miała indeks 0, a dziesiąta indeks 9. Dla lepszego zrozumienia działania tablic odsyłamy do pierwszej części podlinkowanego w nawiasie filmu (http://miroslawzelent.pl/kurs-c++/tablice-w-c++/).

Operacje logiczne i relacji

Budując w MQL strategie, będziemy musieli tworzyć odpowiednie instrukcje, mówiące komputerowi, jak ma postępować na rynku. W tym celu wykorzystuje się operacje różnego typu. Jednym z rodzajów, bardzo ważnym i dość intuicyjnym, są operacje logiczne, które pozwalają sprawdzić, czy dany warunek jest spełniony czy nie. Za pomocą właśnie tych operacji pokazujemy programowi, jakie decyzje ma podejmować. Załóżmy na przykład, że chcemy, by program kupował tylko wtedy, gdy wskaźnik RSI(14) jest poniżej 20 pkt i jednocześnie ADX(14) jest powyżej 15 pkt. W tym celu musimy wykorzystać operację logiczną „AND" (oraz), czyli iloczyn logiczny, który zwraca prawdę tylko wtedy, gdy oba warunki są spełnione. W MQL operatorem logicznym dla operacji „AND" jest „&&". Zapis warunku z przykładu wyglądałby więc mniej więcej tak: RSI(14)15.

Ponadto istnieją jeszcze dwie operacje logiczne. Pierwsza to „OR" (lub), czyli suma logiczna, która zwraca prawdę, gdy jeden z podanych warunków jest prawdziwy. Operatorem w MQL jest znak „||". Drugą operacją jest negacja, która zwraca wartość przeciwną do negowanej. Operatorem w MQL jest znak „!".

W sprawdzaniu warunków logicznych często będziemy korzystać z operacji relacji, które pozwalają porównać do siebie zmienne. Mowa tutaj o następujących relacjach: równa się (operator „=="), różne od („!="), mniejsze od („"), mniejsze lub równe („="). Wynikiem operacji relacji jest zawsze prawda lub fałsz, reprezentowane przez liczby całkowite odpowiednio 1 i 0. Tak jak we wcześniejszym przykładzie z RSI i ADX program musiał sprawdzić, czy oba wskaźniki przyjmują odpowiednie wartości, uprawniające do zajęcia odpowiedniej pozycji na rynku.

Operacje matematyczne

W języku MQL można również zapisywać działania arytmetyczne. Będą one zresztą bardzo często wykorzystywane. Na przykład w sytuacji, gdy wielkość zlecenia take profit ustalimy jako sumę dzisiejszej ceny otwarcia i wartości wskaźnika ATR. Wówczas zapis mógłby wyglądać następująco: double take_profit=Open[0] + iATR;. W pozostałych przypadkach znaki służące do wykonywania działań są również takie same jak te powszechnie używane w arkuszach kalkulacyjnych czy innych programach. I tak odejmowanie to znak minus „-", mnożenie to gwiazdka „*", a dzielenie ukośnik „/". Warto tutaj jeszcze dodać, że chcąc uzyskać resztę z dzielenia, używamy znaku procentu „%", a zwiększanie wartości o jeden (inkrementacja) lub zmniejszanie o jeden (dekrementacja) odpowiednio podwójnym plusem „++" i podwójnym minusem „--". Oczywiście MQL posiada wbudowane funkcje pozwalające na przeprowadzenie innych, bardziej złożonych operacji. Mowa na przykład o funkcji pierwiastka kwadratowego z liczby – aby go policzyć dla liczby x, należy użyć kodu MathSqrt(x);. Funkcje są jednak tematem na osobny odcinek cyklu. Tutaj tylko wspominamy o takiej możliwości, by nikt nie pomyślał, że MQL ogranicza użytkownika tylko do najprostszych działań arytmetycznych.

Przy okazji operacji matematycznych warto też wspomnieć o operacjach przypisania, które, jak sama nazwa wskazuje, przypisują zmiennej po lewej stronie określoną wartość. Najprostszym operatorem przypisania jest znak równa się „=", który w przykładzie y=x będzie przypisywał zmiennej y wartość zmiennej x. Z kolei y += x będzie przypisywał zmiennej y sumę x+y. Jak można się domyślać, operacje „-=", „*=" oraz „/=" będą zmiennej po lewej stronie przypisywać odpowiednio różnicę, iloczyn i iloraz obu zmiennych.

Kończąc tematy operacji, warto dodać, że każda z nich ma swój określony priorytet wykonania przez program, co znaczy, że przy wykorzystaniu wielu operacji w kodzie będą one wykonywane według określonej hierarchii. Dokładny jej opis znajduje się na stronie bossafx.pl pod linkiem: http://bossafx.pl/fx/narzedzia/automatyzacja/slownik/podstawy/operacje/kolejnosc/.

Komentarze w MQL

Wskaźniki, skrypty i strategie pisane w MQL mają często bardzo rozbudowane kody, liczące nieraz nawet setki bądź tysiące linijek. W takim gąszczu znaków łatwo się pogubić i zapomnieć chociażby, za co odpowiadała zadeklarowana przez nas gdzieś w środku kodu zmienna. Aby łatwiej nawigować i kontrolować swój kod, wprowadzono możliwość pisania komentarzy, które są przez program zupełnie ignorowane. Służą tylko do odczytu przez użytkownika. Aby w kodzie utworzyć komentarz, trzeba użyć odpowiednich znaków. Jeśli komentarz ma być w jednej linii, wystarczy, że na początku umieścimy znak podwójnego ukośnika „//". Wszystko, co w danej linii będzie napisane, będzie przez program traktowane jako komentarz. Jeśli natomiast chcemy, by komentarz zajmował kilka linii, musimy zamknąć go w klamry stworzone przez znaki gwiazdki i ukośnika: „/*komentarz*/". W MetaEditorze komentarze są automatycznie kolorowane na szaro, dzięki czemu łatwiej je zidentyfikować w kodzie i sprawdzić, do czego się odnoszą.

Zdajemy sobie sprawę, że zaprezentowane w ostatnich dwóch artykułach zagadnienia mogą przyprawić czytelnika o ból głowy. Na pierwszy rzut oka nie jest to tematyka łatwo przyswajalna, ale to tylko pozory. Im bardziej wgryziemy się w tematykę programowania w MQL, tym więcej elementów zacznie do siebie logicznie pasować i uchwycenie ogólnej idei będzie łatwiejsze. Przekazywanie tego typu wiedzy w krótkich artykułach nie jest wyczerpujące, dlatego odsyłamy do innych materiałów. Na poziomie początkującym warto w ogóle sięgać do informacji dotyczących języka C++, który jest bardzo podobny do MQL (polecaliśmy już kursy na blogu Mirosława Zelenta: http://miroslawzelent.pl/kurs-c++/). Dla bardziej zaawansowanych czytelników przydatny może okazać się również interaktywny kurs MQL na stronie fxwatch.eu. Zachęcamy do korzystania z różnych źródeł i próbowania sił na platformie demo Meta Tradera.

[email protected]

Inwestycje
Emil Łobodziński, BM PKO BP: Nasz rynek pozostaje atrakcyjny, ale...
https://track.adform.net/adfserve/?bn=77855207;1x1inv=1;srctype=3;gdpr=${gdpr};gdpr_consent=${gdpr_consent_50};ord=[timestamp]
Inwestycje
GPW i rajd św. Mikołaja. Czy to może się udać?
Inwestycje
Co dalej z WIG20? Czy zbliża się moment korekty spadkowej?
Inwestycje
Ropa naftowa szuka pretekstu do ruchu w górę
Materiał Promocyjny
Cyfrowe narzędzia to podstawa działań przedsiębiorstwa, które chce być konkurencyjne
Inwestycje
O tym huczy cała Wall Street. Jak Saylor zahipnotyzował inwestorów?
Inwestycje
Wall Street i geopolityka kluczowe dla GPW