1. MQL4 dla początkujących. Część I.

1.3. Zmienne

Czym jest zmienna? Spróbuj sam odpowiedzieć na to pytanie, a ja ci pomogę. Ile masz lat? Ile będziesz miał po pięciu latach? Twój wiek to właśnie zmienna. Inaczej mówiąc jej pierwszą cechą charakterystyczną jest zmienność. Inny przykład, jaki miałeś wzrost w wieku dwóch lat? Najprawdopodobniej o wiele mniejszy, niż teraz . Wzrost to jeszcze jeden przykład zmiennej. Ale jest ważna różnica. Wiek zwykle mierzymy używając liczby całkowitej. Wzrost o wiele łatwiej mierzyć liczbami dziesiętnymi. Na przykład, wiek - 20 lub 25 lat, wzrost - 1.80 lub 1.95 m.


W MQL4 każda zmienna ma określony typ.

Nauczymy się teraz prawidłowo tworzyć zmienne w MQL4. Popatrz na poniższy kod.

Kod 1
#property strict

int age = 25;

void OnStart()
  {
//---

  }

Tutaj przed główną funkcją skryptu OnStart() zapisano:

Kod 2
int age = 25;

Co zrobi komputer kiedy to zobaczy? Najpierw w pamięci operacyjnej RAM zarezerwuje miejsce, gdzie będzie przechowywana liczba. int - to słowo kluczowe języka MQL4, określające liczbę całkowitą (ang. integer). age – to nazwa zmiennej czyli słowo, za pomocą którego komputer będzie docierać do tej liczby. Potem dla age w RAM zostanie zapisana liczba 25, używając symbolu równania = , a cała tę konstrukcję zamyka symbol średnika ; . W MQL4 schemat tworzenia zmiennej, określenia jej typu oraz przypisania wartości wygląda w następujący sposób:

  • typ zmiennej nazwa zmiennej = wartość zmiennej ;

Jeśli zapisać tylko typ oraz nazwę zmiennej, czyli tylko ją utworzymy w pamięci RAM, to taka czynność będzie się nazywać deklaracją zmiennej. W tym przypadku domyślnie zostanie jej przypisana zerowa wartość. Jeśli zaś programista od razu przypisze jej określoną wartość, np. jak w powyższym przykładzie liczbę 25, to już będzie się nazywać inicjalizacją zmiennej.

W omówionym przykładzie widzimy 3 czynności:

  • określenie typu zmiennej:  int,
  • nadanie jej nazwy:  age,
  • przypisanie jej wartości:  25.

To wszystko razem nazywa się instrukcja. Tu w jednej instrukcji zrealizowano 3 działania, a symbol średnika oznacza koniec tej instrukcji.


Nie zapominaj na końcu każdej instrukcji zapisywać średnik.

Kod nr 1 można też zapisać inaczej, umieszczając instrukcję tworzenia zmiennej w ciele funkcji głównej, tj. między klamrami { i } (kod 3). Na temat działania funkcji można poczytać w rozdziale 1.6. Funkcje. Abyś nie musiał teraz przeskakiwać do tego tematu, nie mając jeszcze podstawowej wiedzy o MQL4, powiem że słowo void określa typ funkcji i jest to typ pusty. OnStart to nazwa funkcji. W nawiasach funkcji ( ) zapisuje się określone wartości na bazie których realizuje ona działania (w tej funkcji nic nie jest zapisane). Klamry określają obszar działania funkcji (tzw. ciało funkcji) i to co zostanie w nich zapisane zostanie zrealizowane przez OnStart().

Kod 3
#property strict
void OnStart()
  {
//---

   int age = 25;

  }

Kody 1 i 3 będą działać identyczne. Tworzenie zmiennej przed funkcją lub w jej ciele, tj. między { } ma wpływ na dostępność zmiennej w programie. W pierwszym przykładzie będzie ona dostępna dla całego programu, a nie tylko w OnStart(). W drugim będzie ona widoczna tylko wewnątrz tej funkcji. Może to teraz być dla ciebie jeszcze ciężko strawną informacją dlatego na razie przyjmiemy zasadę, że w skryptach zmienne tworzymy przeważnie przed OnStart(), a różnego typu działania będziemy już opisywać w ciele tej funkcji.


Następny przykład.

Kod 4
double height = 1.95;

Tu utworzyliśmy zmienną typu double (ułamek dziesiętny, liczba zmiennoprzecinkowa, ang. floating-point number), nadaliśmy jej imię height, której od razu przypisaliśmy wartość 1.95 stosując operator równania =. A co jest na samym końcu? Tak, tam stoi średnik.

Jakie jeszcze typy zmiennych istnieją w MQL4? Jest typ tekstowy. Jak wskazuje sama nazwa służy ona do przechowywania tekstu.

Kod 5
string name = "Puszek Okruszek";

Tutaj string - typ zmiennej, name - nazwa zmiennej, a Puszek okruszek - wartość tej zmiennej. Zwróć uwagę, że tekst powinien być zapisany pomiędzy dwoma cudzysłowami " ".

Przedstawiam jeszcze jeden często używany w programowaniu typ - bool. Jest to tak zwany typ logiczny i zmienne tego typu mogą przyjmować tylko dwie wartości: prawda (true) albo fałsz (false).

Kod 6
bool trend = false;

Oprócz tych czterech typów zmiennych istnieje wiele innych typów. Ponieważ dopiero uczysz się programowania, proponuję na razie ograniczyć się do znajomości tych czterech podstawowych typów.

W MQL4 bardzo ważne jest czy piszesz WIELKIMI czy małymi literami. Na przykład, jeśli deklarujesz kilka zmiennym o jednakowych nazwach, ale używasz liter o różnej wielkości, to będą to zupełnie różne zmienne. Niżej przedstawiony kod stworzy cztery zmienne typu double.

Kod 7
double height; 
double HEIGHT;
double Height;
double HeighT;

Kolejny przykład.

Kod 8
DOUBLE height; 
Double height;
doublE height;

Ten kod nie będzie działać, ponieważ słowa DOUBLE, Double i doublE nie zostaną potraktowane przez kompilator MQL4 jako słowa kluczowe.


MQL4 to język, wrażliwy na wielkość liter.

Nazwy zmiennych nie mogą zaczynać się od cyfry. Nie mogą zawierać znaków specjalnych (@, &, %, $, ...), kropki, znaków minusa, plusa, mnożenia i dzielenia. Poniższy kod zawiera błędne nazwy zmiennych.

Kod 9
double 1price;    // pierwszym symbolem nie może być cyfra
double %price;    // nie można używać znaku specjalnego %
int    Star-Wars; // nie można używać znaku minusa
bool   Mario@2;   // nie można używać znaku specjalnego @
string bla.bla;   // nie można używać kropki

Nazwy zmiennych mogą składać się z malych i dużych liter a-z, A-Z, cyfr 0-9 oraz symbolu podkreślenia _ , a długość nazwy nie może być większa niż 63 symboli.

Kilka przykładów prawidłowo zapisanych nazw zmiennych (kod 10).

Kod 10
double p1rice;
double price;
int    Star_Wars;
bool   Mario255Hydraulik;
string blabla;

Warto też zaznaczyć, że MQL4 jest językiem o tak zwanym wolnym formacie, tj. można stosować dowolną ilość spacji, tabulacji lub pustych linijek. Na przykład, w jednej linijce kodu można utworzyć kilka zmiennych, a kolejną po kilku pustych linijkach. Najważniejsze to wskazać kompilatorowi koniec instrukcji, a jej koniec jak już wiemy jest określany przez wstawienie średnika.

Kod 11
int age;       double height       =1.95; 


string    name
=
"Puszek Okruszek"

                    ;

A teraz zapiszmy ten kod jak prawdziwi zawodowcy.

Kod 12
int    age;
double height = 1.95;
string name   = "Puszek Okruszek";

Jeśli chcemy utworzyć (zadeklarować) więcej niż 1 zmienną tego samego typu, to możemy to zrobić w jednej instrukcji. Niektórym z nich można od razu przypisać określone wartości (zainicjalizować) przy tym te wszystkie zmienne nie muszą znajdować się w jednej linijce. Ich nazwy muszą być oddzielone przecinkiem, a na końcu należy wstawić średnik jako symbol końca instrukcji. W poniższym przykładzie (kod 13) komputer w pamięci RAM zarezerwuje miejsca dla 7 zmiennych typu int i 2 zmiennych typu double. Przy tym zmiennym age i tables od razu przypisze wartości 25 i 3.

Kod 13
int age = 25, number, tables = 3,
    Houses, houses, HOUses,
    result;

double height, weight;