Moja pierwsza strategia –
wprowadzenie do programowania
w MQL4
1
Szkolenie on-line
23 czerwiec 2012
Czym jest MQL4?
• MQL4
(MetaQuotes Language 4) – dostępny w platformie
BOSSAFX (MetaTrader4) język programowania umożliwiający
rozbudowę jej standardowej funkcjonalności.
• MQL4
jest wbudowany w aplikację kliencką MT4, co oznacza
że utworzone w nim programy mogą być uruchamiane
wyłącznie w tym środowisku.
• MQL4
pod względem składni przypomina popularne języki
programowania C i C++, ale tzw. kod wykonywalny jest
specyficzny dla platformy transakcyjnej MT4.
2
Kod źródłowy napisany w języku
MQL4 – zrozumiały i edytowalny
dla programisty (inwestora)
Kod wykonywalny programu
– zrozumiały dla aplikacji
klienckiej MT4
kompilator
MQL4
• Deklaracje
•
Właściwości programu (dyrektywa
#property
)
•
Wykorzystywanych bibliotek i plików
nagłówkowych (dyrektywa
#include
)
•
Stałe globalne (dyrektywa
#define
)
•
Zmienne globalne
• Definicje funkcji własnych
wykorzystywanych w programie
• Definicje funkcji specjalnych
•
init()
– opcjonalnie
•
start()
– obowiązkowo
•
deinit()
- opcjonalnie
3
Ogólna struktura programu – kod źródłowy
• Komentarze
•
Fragmenty kodu nie podlegające kompilacji, a zatem nie wpływające na
funkcjonowanie programu
•
Ułatwiają zachowanie porządku i rozumienie kodu wykonywalnego oraz późniejsze
wprowadzanie zmian
•
Komentarz pojedynczej linii – zaczynamy od:
//
•
Komentarz wielu linii – zaczynamy od:
/*
4
Podstawowe elementy składni MQL4
• Identyfikatory
•
Stanowią nazwy stałych,
zmiennych, funkcji i typów
danych – nazwa może mieć max.
31 znaków
•
Identyfikatory zastrzeżone –
nazwy posiadające z góry
określone znaczenie w
programie. Nie mogą być
wykorzystywane w innym celu
przez programistę
• Całkowity –
int
, np. 1, -43, 866, 196367 itd.
• Zmiennoprzecinkowy –
double
, np. -1.45, 567.9876, 1.33582, -9
• Logiczny –
bool
, np. 0, 1 lub false, true
• Znakowy –
char
, np. ‘A’, ‘b’, ‘5’, ‘$’
• Ciąg znaków –
string
, np. ”To jest przykładowy ciąg 34 znaków”
• Kolor –
color
, np.
• Data i czas –
datetime
, np.
5
Stałe, zmienne – typy danych
• Deklaracja stałej lub zmiennej powołuje ją do życia i zawsze musi
poprzedzać jej użycie w programie
• Deklaracja zmiennej
• Miejsce deklaracji decyduje o tym, czy zmienna jest:
• Lokalna – zdefiniowana w ciele funkcji;
• Globalna – zdefiniowana na początku programu;
• Zmienne zewnętrzne – widoczne jako parametr programu
• Definicja stałej symbolicznej – za pomocą dyrektywy
#define
6
Deklaracje stałych i zmiennych
• Tablice zawierają uporządkowany zbiór zmiennych danego typu
danych:
int
,
double
,
bool
itp.
• Deklaracja tablicy odbywa się podobnie jak deklaracja zmiennej,
ale w identyfikatorze należy użyć nawiasów kwadratowych
[]
i
wpisać w nie wymiar tablicy
int Tablica1[9]; //deklaracja zmiennej tablicowej typu integer o nazwie Tablica1 i długości 9
• Uwaga – indeksacja elementów tablicy zaczyna się zawsze od 0!
• Przykładowa Tablica1 typu integer
• Typ danych
string
jest w rzeczywistości zmienną tablicową typu
char
7
Tablice
• Podstawowa operacja przypisania
identyfikator = wartość / wyrażenie;
int NazwaZmiennejNr1 = 5;
• Operacje arytmetyczne:
+
,
-
,
*
,
/
,
++
,
--
• Operacje relacji
• Operacje logiczne:
&&
,
||
,
!
bool ZmLogiczna1 = true;
bool ZmLogiczna2 = false;
bool ZmLogiczna3 = ZmLogiczna1 && ZmLogiczna2;
bool ZmLogiczna4 = ZmLogiczna1 || ZmLogiczna2;
8
Operacje na danych
• Operacje na tablicach przeprowadzamy analogicznie jak w
przypadku zmiennych, z tym że musimy posłużyć się
indeksem tablicy
• Przypisanie zmiennej tablicowej
int Tablica1[]
int Tablica1[0] = 5;
int Tablica1[1] = 10;
int Tablica1[2] = 15;
int Tablica1[3] = 20;
int Tablica1[4] = 25;
itd.
• Odczyt zmiennej tablicowej
int ZmiennaX = Tablica[0] + Tablica[1];
int ZmiennaY = Tablica[0] * Tablica[1];
9
Operacje na zmiennych tablicowych
• Zmienne predefiniowane nie muszą być deklarowane a dostęp
do nich jest możliwy z każdej funkcji w programie (są to
zmienne globalne)
• Niektóre zmienne predefiniowane mają charakter tablicowy
• Zmienne predefiniowane związane są z wykresem cenowym
danego instrumentu oraz jego specyfikacją:
•
Ask – zmienna przechowująca aktualną cenę ask;
•
Bid – zmienna przechowująca aktualną cenę bid;
•
Open – zmienna tablicowa przechowująca historię cen otwarcia świec dla danego wykresu
•
High – zmienna tablicowa przechowująca historię cen maksymalnych dla świec z danego wykresu
•
Low – zmienna tablicowa przechowująca historię cen minimalnych dla świec z danego wykresu
•
Close – zmienna tablicowa przechowująca historię cen zamknięcia świec dla danego wykresu
•
Volume – zmienna tablicowa zawierająca liczbę zmian cen w danym interwale
•
Time – zmienna tablicowa zawierająca datę i godzinę rysowania danej świecy
•
Bars – zmienna przechowująca liczbę dostępnych świec na danym wykresie
•
Digits – zmienna przechowująca liczbę miejsc po przecinku dla danego instrumentu
•
Point – zmienna przechowująca wartość pojedynczego kroku notowań dla danego instrumentu
10
Zmienne predefiniowane
• Zmienne tablicowe umożliwiają pobieranie
cen historycznych: Open, High, Low, Close
• Zmienne tablicowe numerują kolejne
świece wstecz, przy czym aktualnie
rysująca się świeca ma zawsze numer 0
• Narysowanie się kolejnej świecy powoduje
przenumerowanie wszystkich
historycznych świec
• Przykłady:
• Open[8] – zwraca cenę otwarcia
świecy nr 8
• High[4] – zwraca cenę max. świecy nr
4
• Pamiętajmy, że wykresy cenowe pokazują
zawsze ceny bid!
• Nie ma możliwości pobrania do programu
historycznej ceny ask, ale można ją
oszacować dodając wartość spreadu
11
Korzystanie ze zmiennych predefiniowanych
0
1
2
3
4
5
6
7
8
9
10
11
• Operator – każde wyrażenie w kodzie programu zakończone
średnikiem „;”
• Operatory proste zawierające jedno wyrażenie, np. operator
przypisania:
identyfikator = wartość / wyrażenie;
• Operatory złożone, zawierające kilka wyrażeń
• Operator warunkowy
if-else
• Operator cykliczny
for
12
Operatory
int przykladowa_funkcja (int zmienna1, int zmienna2)
13
Deklaracja i definicja funkcji
Typ wartości
zwracanej przez
funkcję
Nazwa funkcji
Typy zmiennych
pobieranych przez
funkcję
Nazwy zmiennych
lokalnych w funkcji
Przykład:
14
Funkcje wykorzystywane w naszej strategii
15
Funkcje wykorzystywane w naszej strategii – c.d.
16
Funkcje wykorzystywane w naszej strategii – c.d.
17
Funkcje wykorzystywane w naszej strategii – c.d.
Białystok
blogi.bossa.pl
Dziękuję za
obecność
i uwagę
Sebastian Zadora
s.zadora@bossa.pl
18