MQL Praktycznie. Podstawy i Puls Rynku [Kurs programowania]
W cyklu MQL Praktycznie przekażemy Wam wiedzę niezbędną do rozpoczęcia pracy z aplikacjami pisanymi w języku MQL 4 dla platformy Meta Trader. Temat programowania jest oczywiście bardzo szeroki, ale celem tego cyklu nie jest poruszenie wszelkich możliwych zagadnień i zasypanie Was skomplikowaną teorią. Celem tego cyklu jest natomiast pokazanie Wam jak zacząć pracę z MQL i dostarczenie wiedzy, która pozwoli Wam samodzielnie rozwijać się w tym spektrum.
Na cel zadań jakie będziemy razem wykonywać niezbędna jest odrębna instalacja platformy MetaTrader 4, na której zainstalowane jest wyłącznie konto demo dowolnego brokera. Nie chcemy przecież nabałaganić na prawdziwym rachunku. Może to być oryginalna wersja platformy MT4.
Podstawowe funkcje
Rozpocznijmy od podstaw, czyli od tego jak wygląda okno platformy MT4 i jakie zawiera funkcje związane z aplikacjami pisanymi w MQL. Rzućmy okiem na poniższy obrazek.
W miejscu oznaczonym jedynką znajduje się okienko “Nawigator” (Ctrl + N). Panel umożliwia nam dostęp do wszystkich zainstalowanych na danej platformie narzędzi MQL i jest podzielony na “Wskaźniki”, “Strategie” i “Skrypty”. Programy uruchamiamy przeciągając je na wybrany wykres i konfigurując parametry danej aplikacji w wyświetlonym oknie. W miejscu oznaczonym dwójką widzimy przykładowe okienko ustawień. Dostępne są tu wszystkie parametry jakie możemy skonfigurować dla aplikacji, ale skupmy się na podstawowych elementach, które są wspólne dla wszystkich programów. Pole “Umożliw handel” jest często przeoczane przez użytkowników, a od ptaszka w tym miejscu zależy czy algorytm będzie mógł zawierać transakcje. Ta funkcja pozwala wyłączać i włączać funkcjonalność zawierania transakcji dla każdego algorytmu z osobna w przeciwieństwie do funkcji “AutoTrading”, oznaczonej trójką, która jest globalnym wyłącznikiem możliwości zawierania transakcji przez wszystkie narzędzia pracujące na danej platformie Meta Trader.
Myślę, że nie ma potrzeby zawracać Wam głowy dodatkowymi funkcjami na tym etapie. Powyższe informacje spokojnie nam wystarczą, aby z powodzeniem uruchomić nasz pierwszy program.
Możemy zacząć myśleć o programowaniu. W platformie MetaTrader zintegrowane jest środowisko do tworzenia aplikacji. Środowisko jest dostępne z menu “Narzędzia/ Edytor języka MQL4”.
Po wybraniu opcji w menu otworzy nam się nowa aplikacja – “MetaEditor”. W tym miejscu będziemy pisać algorytmy dla platformy MT4. Zatrzymajmy się tu na chwilę i poznajmy najistotniejsze elementy edytora.
Po lewej stronie okna, podobnie jak w samym MT4, znajduje się panel “Nawigator”. W miejscu oznaczonym na powyższym rysunku jedynką rozwinęliśmy zawartość katalogu Experts, a następnie, dwukrotnie klikając nazwę programu otworzyliśmy jego kod źródłowy, który pokazał się w części okna oznaczonej numerem dwa. To w tej części tworzymy i edytujemy algorytmy. Gdy zakończymy pisać aplikację musimy ją przekształcić w formę czytelną dla komputera, czyli skompilować program wybierając opcję “Kompiluj” (F7), oznaczoną trójką. Skompilowany algorytm możemy odnaleźć w panelu “Nawigator” platformy MT4 i uruchomić przeciągając na wybrany wykres. Dokładnie tak jak we wcześniejszej części tego artykułu.
Drzewko “Nawigatora” odzwierciedla strukturę plików znajdujących się w katalogu MQL4, czyli katalogu, w którym dana platforma przechowuje wszystkie aplikacje napisane w MQL. Gdy chcemy zainstalować aplikację, np. aplikację udostępnioną w ramach naszego cyklu, to właśnie do katalogu MQL4 powinniśmy skopiować plik, pamiętając, że “Strategie” umieszczamy w katalogu “MQL4\ Experts”, a “Wskaźniki” w katalogu “MQL4\ Indicators” oraz że każda zainstalowana na komputerze kopia platformy Meta Trader 4 posiada własny katalog MQL4. Jak odnaleźć katalog MQL4 danej platformy przedstawiam na poniższym obrazku (w ikonkę MQL4 klikamy prawym przyciskiem myszy).
Wiemy już jak uruchamiać, instalować i w czym pisać aplikacje dla Meta Trader 4. Przejdźmy więc do meritum i rozpocznijmy naukę programowania.
Tworzymy pierwszą aplikację
Aby umożliwić Wam postawić pierwsze kroki jako programista napiszemy razem małą aplikację, której zadaniem będzie informować nas o aktualnej aktywności rynku. Nazwiemy ją “Puls Rynku”, a wykorzystamy zajęci przeglądaniem prasy w oczekiwaniu na pojawienie się pożądanej zmienności, którą to usłyszymy dzięki zmianie częstotliwości dźwięków generowanych przez nasz algorytm.
Jako załącznik do tego artykułu pod TYM LINKIEM znajdziecie plik dźwiękowy “pulse_beep.wav”. Proszę go umieścić w katalogu “Sounds”, który znajduję się w katalogu głównym platformy MT4. Katalog “Sounds” można zlokalizować otwierając właściwości skrótu uruchamiającego terminal, tak jak na obrazku poniżej.
Poniższe obrazki pokazują, jak utworzyć nowy, niemal pusty, plik strategii automatycznej. W oknie MetaEditor wybieramy funkcję “Nowy”, następnie zaznaczamy “Expert Advisor”, wybieramy nazwę programu i klikamy “Next” tak długo, aż w edytorze pojawi się otwarty szablon nowego programu.
Nie idziemy na łatwiznę i kasujemy całą zawartość pliku w oknie oznaczonym jedynką na ostatnim obrazku. Napiszemy samodzielnie cały kod naszej aplikacji. Zaczynajmy.
// Puls Rynku.mq4
// Copyright 2019, Mistrz Programowania
// https://www.mistrz.ty
Wpisując “//” na początku linii tworzymy komentarze, czyli fragmenty służące nam, programistą do tworzenia wszelkiego rodzaju informacji i notatek wewnątrz kodu. Komentarze nie mają wpływu na działanie programu. Za pomocą komentarzy możecie utworzyć nagłówek swojej aplikacji, który przekaże np. dane o autorze, informacje o samej aplikacji lub prawach autorskich. Utwórzmy nagłówek (lub nie), a następnie, w nowej linii umieśćmy poniższy kod.
#property strict
Parametry typu “#property” pozwalają przekazać platformie dodatkowe informacje na temat tworzonego programu. Parametr “#property strict” , umieszczany na początku linii, informuje platformę, że algorytm tworzony jest korzystając z najnowszej składni języka MQL4.
W kolejnym kroku wpiszmy w nowej linii poniższą operację.
input string Plik_dzwiekowy = "pulse_beep.wav";
Słówko “input” informuje program, że tworzymy parametr, który umożliwi nam wprowadzenie ustawień potrzebnych do działania programu. Po “input” zawsze określamy typ wprowadzanych danych, tutaj jest to “string” czyli tekst. Następnie tworzymy nazwę zmiennej, czyli, w uproszczeniu, nazwę fragmentu pamięci komputera, do którego będziemy mogli odwołać się w przyszłości w celu odczytania wprowadzonych danych. Naszą zmienną nazywamy “Plik_dzwiekowy”, jest ona typu string, czyli pozwoli nam wprowadzić w program tekst, który wykorzystamy jako nazwę pliku dźwiękowego jaki ma wykorzystać nasz algorytm.
Po nazwie zmiennej widzimy znak równości. Oznacza on, że do naszej zmiennej ma zostać przypisany tekst “pulse_beep.wav”. Wartość ta posłuży w tym przypadku jako wartość domyślna i będzie można ją zmienić po przeciągnięciu programu na wykres, w okienku ustawień. Zdefiniowaliśmy właśnie operację przypisania danych. Jest to operacja prosta, a te kończymy średnikiem.
W tym miejscu należy na chwilkę się zatrzymać i poczytać o typach danych. W powyższej linii wykorzystaliśmy typ danych “string”, ale typów jest dużo więcej i są one fundamentalną częścią języka, której nie da się ominąć. Zamieszczam adres do fragmentu dokumentacji opisujący typy danych języka MQL4.
Piszemy dalej.
void OnTick()
{
PlaySound(Plik_dzwiekowy);
}
Powyższy zapis definiuje funkcję “OnTick()”. Funkcje to elementy algorytmu odpowiedzialne za wykonywanie powierzonych im operacji. W tym przypadku widzimy integralną funkcję języka MQL, której zadaniem jest wykonanie operacji, gdy zmieni się kurs instrumentu, na którym działa nasz algorytm. Platforma wywoła tą funkcję za każdym razem, gdy pojawi się nowy tick. Operacje jakie ma wykonać każda napisana przez nas funkcja definiujemy sami. Mamy tu pełną dowolność i praktycznie zero ograniczeń. Tym razem będziemy jednak powściągliwi i odtworzymy tylko plik dźwiękowy określony wcześniej za pomocą parametru “input”. Wykorzystamy w tym celu inną, również wbudowaną funkcję języka MQL 4 – “PlaySound(string filename)”, której zadaniem jest odtworzenie pliku dźwiękowego o nazwie jaką otrzyma za pomocą zmiennej o typie danych “string” , której oczekuje między nawiasami po nazwie funkcji. Operację wywołania funkcji “PlaySound” kończymy średnikiem, ponieważ tak jak operacja przypisania danych jest operacją prostą.
Jak pewnie przeczuwacie, w tym miejscu należy zgłębić temat operacji dostępnych w składni języka.
Naciskamy kompiluj!
Trzymam kciuki, aby wszystko wyglądało tak jak na obrazku powyżej. Jeśli tak to kompilacja przebiegła pomyślnie. Jeśli natomiast rezultat bardziej przypomina rysunek numer 10 to pozostaje nam zlokalizować błąd kierując się informacjami wyświetlonymi w dolnym panelu, który pokazał się po próbie kompilacji. Po lewej stronie panelu możemy odczytać czego dotyczą błędy, a po prawej w jakiej linijce się znajdują. Dwukrotne kliknięcie wiersza z błędem przeniesie nas do odpowiedniej części kodu źródłowego. Wstawmy brakujące średniki i nawiasy i naciśnijmy ponownie “Kompiluj”.
Gotowe! Możemy przejść do MT4 i przeciągnąć nasz pierwszy algorytm na dowolny wykres.
Beep, beep … 😉
Do zobaczenia w przyszłym tygodniu. Napiszemy nowy program i zgłębimy bardziej zaawansowane funkcje języka.