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

1.10. Operator warunkowy if ... else

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:

Kod 1
#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:

Kod 2
#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.

Kod 3
#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.

Kod 4
//--- 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) */

  {
     //...
  }

ZAKOŃCZENIE

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".