W tym rozdziale nauczymy się korzystać z bardzo ważnego elementu MQL4 jakim jest warunek. W swoim życiu człowiek często myśli kategoriami warunkowymi, na przykład: ”Jeśli w niedzielę będzie słońce, to pójdę na spacer. Inaczej, zostanę w domu”. W uproszczonej postaci w MQL4 taki warunek można opisać w następujący sposób:
#property strict
void OnStart()
{
//---
if( /* Jeśli w niedzielę będzie słońce */ )
{
/* pójdę na spacer */
}
else
{
/* zostanę w domu */
}
}
Tak wygląda składnia warunku w języku MQL4. Widać tu operator warunkowy if (jeśli) w połączeniu z else (inaczej). Po słowie if w okrągłych nawiasach ( ), tj. w nagłówku operatora, należy opisać warunek, a dalej opisać działania, które zostaną zrealizowane w zależności od spełnienia tego warunku. Jeśli warunek jest prawdziwy (true) to między klamrami { } należy opisać pożądane działanie (pójdę na spacer). Jeśli warunek jest fałszywy (false), czyli jest inaczej, to po słowie else między klamrami { } należy opisać alternatywne działanie (zostanę w domu).
Przeanalizuj teraz następujący przykład:
#property strict
void OnStart()
{
//--- deklaracja zmiennych A i B oraz ich inicjalizacja
int A = 0, B = 0;
if( A == 555 ) /* wynik porównania - fałsz w skutek czego
B nie zmienia swojej wartości na 100
i działanie przechodzi do operatora 'else' */
{
B = 100;
}
else
{
B = 200; // B przyjmuje wartość 200
}
//--- wyświetlić wynik
Alert("B = " , B);
}
W tym przykładzie (kod 2) w ciele głównej funkcji skryptu OnStart() najpierw zadeklarowano dwie zmienne A i B, przypisując każdej 0. Następnie, if za pomocą operatora porównania == porównuje A z liczbą 555. To tak jak by programowi zadali pytanie "Czy 0 jest równe 555?", pamiętając o tym, że zamiast zmiennej A program widzi 0. Wynik - fałsz, gdyż 0 nie jest równe 555. Zgodnie z tym wynikiem, działanie przechodzi do else, gdzie w ciele tego operatora, tj. między { }, zmiennej B przypisuje się wartość 200. Na końcu funkcja Alert() wyświetli na monitorze komunikat "B = 200".
Stosowanie operatora else nie jest konieczne. Jeśli w wyżej wymienionym przykładzie usuniemy else{...} to zmienna B pozostanie bez zmian i równa 0 jak podczas inicjalizacji.
#property strict
void OnStart()
{
//--- deklaracja zmiennych A i B oraz ich inicjalizacja
int A = 0, B = 0;
if( A == 555 ) /* wynik porównania - fałsz w skutek czego
B nie zmienia swojej wartości na 100 */
{
B = 100;
}
//--- wyświetlić wynik
Alert("B = " , B); // B = 0
}
Pamiętaj także o tym, że należy porównywać tylko porównywalne zmienne i wartości.
//--- deklaracje i inicjalizacje zmiennych
int IntValue = 555;
double DoubleValue = 1.3;
string StringValue = "Puszek Okruszek";
bool BoolValue = true;
//--- 1)
if(IntValue < 10) /* prawidłowo zapisany warunek,
porównuje się dwie liczby całkowite 555 i 10 */
{
//...
}
//--- 2)
if(DoubleValue > 2.5) /* prawidłowo zapisany warunek,
porównuje się dwie liczby zmiennoprzecinkowe 1.3 i 2.5 */
{
//...
}
//--- 3)
if(IntValue > 2.5 ) /* prawidłowo zapisany warunek,
dozwolone jest porównywanie dwóch cyfr
o różnych typach, np. int i double */
{
//...
}
//--- 4)
if(StringValue == 1) /* kompletna bzdura,
nie można tekstu porównywać z cyfrą */
{
//...
}
//--- 5)
if(StringValue == "Słowo") // prawidłowo zapisany warunek
{
//...
}
//--- 6)
if(StringValue > "Słowo") /* kompletna bzdura,
nie można porównywać czy wartość tekstu
sama w sobie jest większa lub mniejsza niż
wartość innego tekstu,
nie chodzi tu o porównanie ilości znaków tych tekstów */
{
//...
}
//--- 7)
if(BoolValue == true) /* prawidłowo zapisany warunek,
logiczną zmienną porównuje się
z logiczna wartością (true albo false) */
{
//...
}
W 1 części lekcji "MQL4 dla początkujących" opisałem podstawy języka programowania MetaQuote Language 4. Jeśli pozostały rzeczy, które nie do końca jeszcze rozumiesz, proponuję wrócić do odpowiedniego rozdziału, przeanalizować przykłady i napisać kilka swoich skryptów. Przedstawiony tu materiał to w mojej opinii najtrudniejsza część dla początkującego programisty. Bardzo ważne jest zrozumienie składni tego języka. W kolejnych lekcjach dowiesz się o istnieniu innych funkcji i operatorów, pokażę jak można łączyć je ze sobą i zademonstruję jakie ogromne możliwości daje MQL4 do pracy na giełdzie lub rynku walutowym Forex. Zapraszam teraz do 2 części lekcji "MQL4 dla początkujących".