Strona główna  Edukacja  FOREX  Analiza  Rozmowy  Downloads  Moje konto
WYSZUKIWARKA  Analiza->Systemy transakcyjne->Język MQL II->Struktura języka LOGOWANIE 
Google
Web TE
Analiza 
Wprowadzenie
Strategia inwestycji
Tworzenie systemów transakcyjnych
Język MQL II
Struktura języka
Funkcje wbudowane
Wskaźniki wbudowane
Funkcje i wskaźniki użytkownika
Expert Advisor
Advantage Systems
Opis
Rynek FOREX
Rynek giełdowy
Zamówienie

Struktura język


Informacje ogólne o strukturze języka

Podobnie jak inne języki programowania, MQL II posiada zestaw elementów określających jego główną strukturę. Elementy te muszą być zorganizowane w określony sposób, aby reprezentowały właściwe wyrażenia.

Głównym obiektem języka są dane, które podzielone są na trzy rodzaje: numeryczne, logiczne oraz ciąg znaków - string (typ tekstowy, jeżeli znaki mają postać liter). Wszystkie dane numeryczne przyjmują format double (liczba rzeczywista). Dane logiczne mogą przyjmować kategorię prawda lub fałsz. Łańcuch znaków z kolei stanowi ciąg znaków oddzielonych apostrofem. Dane mogą być zawarte w zmiennych określonego rodzaju bądź w kodzie źródłowym programu.

Instrukcje języka MQL II mogą zawierać słowa kluczowe, dane operacyjne, zmienne, symbole, ale zawsze blok operacji powinien być zakończony średnikiem (;). Słowa kluczowe są zdefiniowane i mają określone znaczenie. Operatory to symbole opisujące określone operacje, dane, zmienne lub wyrażenia. Wyrażenia są kombinacjami słów kluczowych, zmiennych, danych oraz operatorów, przyjmującymi wynikowo postać numeryczną, logiczną lub ciągu znaków (string). Znaki przestankowe służą z kolei do reprezentacji wyrażeń, oddzielania słów oraz zmian sekwencji kalkulacji.

Znaki przestankowe

ZnakNazwaOpis
;średnikKoniec instrukcji
()nawiasyGrupuje dane w wyrażeniu w celu zmiany kolejności obliczeń. Odznacza parametry w funkcji oraz inicjalizuje wyrazenia w opisie zmiennych. Odznacza wartości dla zmiennych oraz macierzy w sekcji opisującj zmienne.
,przecinekRozdziela parametry funkcji oraz zmienne w sekcji opisujacej zmienne. Dzieli liczby określające wielkość macierzy.
:dwukropekRopoczyna listę zmiennych
" "cudzysłówOznacza ciąg znaków - string
[ ]nawias kwadratowyWskazuje liczby określajace rozmiary macierzy. Wskazuje liczbę okresów przy dostepie do danych historycznych.
{ }nawias falującyMoże być używany zamiast słów begin.....end. Separuje zakres instrukcji w jeden blok.
/* */ramka komentarzaOdznacza komentarze
//podwójny ukośnikWskazuje na początek komentarza jednowierszowego

Operatory

Operatory dzielą się na pięć rodzajów: operatory przypisania, operatory szeregu, operatory matematyczne, operatory relacyjne oraz operatory logiczne.
  • Operatory przypisania - używane są w celu przypisania zmiennej konkretnej wartości (numerycznej, logicznej lub ciągu znaków). Wartość przypisana może wynikać z wyrażenia.
  • Operatory matematyczne - w wyrażeniach matematycznych używane są cztery operatory: `+` dodawanie, `-` odejmowanie, `*` mnożenie, `/` dzielenie.
  • Operatory relacyjne - używane są w celu porównania dwóch wartości tego samego rodzaju. Efektem takiej operacji mogą być dane logiczne prawda lub fałsz
    Dostępne opratory to:
    • mniej niż (<)
    • więcej niż (>)
    • równe (=)
    • różne od (<>)
    • mniejsze lub równe (<=)
    • większe lub równe (>=)

    Ciągi tekstowe, stringi porównywane są w porządku leksykalnym (lub leksograficznym) tzn. aaa jest mniejsze od zzz. Porównując wartości logiczne należy pamiętać, iż wartość numeryczna kategorii prawda wynosi 1, natomiast dla kategorii logicznej fałsz wynosi 0.
Operatory logiczne

Pozwalają na łączenie kategorii logicznych. Operator lub (OR - `|`), I (AND - `&`) oraz nie (NOT - `!`) mają odpowiadające słowa kluczowe OR, AND, NOT.
Należy pamiętać, iż operatory OR i AND odnoszą się do dwóch wartości w przeciwieństwie do operatora NOT.

Poniżej znajduje się tablica z wynikami operacji logicznych:
Value1Value2Value1 OR Value2
TrueTrueTrue
TrueFalseTrue
FalseTrueTrue
FalseFalseFalse
Value1Value2Value1 AND Value2
TrueTrueTrue
TrueFalseFalse
FalseTrueFalse
FalseFalseFalse
Value1Value2NOT Value1
TrueFalse
FalseTrue

Zmienne

Przechowywanie tymczasowych danych w procesie obliczenia wymaga użycia zmiennych. Zmienne są definiowane na samym początku programu przy wykorzystaniu słów kluczowych: Variable (zmienna), Array (tablica), Define (definiuj) and Input (dane wejściowe). Można również używać tych słów w liczbie mnogiej, tzn. Variables, Arrays, Defines oraz Inputs. Jedno z wymienionych słów kluczowych zawsze rozpoczyna deklarację zmiennej. Różnice pomiędzy wymienionymi słowami kluczowymi są następujące: "Variable" opisuje proste zmienne, "array" opisuje tablice, "define" opisuje dodatkowe zmienne użytkownika, które podobnie jak pierwotnie zdefiniowane zmienne użytkownika mogą zostać zmodyfikowane przez okienko dialogowe Ustawienia (Settings) z zewnątrz. Jednakże w przeciwieństwie do pierwotnie zdefiniowanych zmiennych, zmienne użytkownika mogą zostać zmienione w procesie kalkulacji w programie. Słowo "Input" z kolei opisuje zmienne użyte jako parametry wejścia dla funkcji użytkownika albo programów, tworzonych z myślą o własnych wskaźnikach.
Składnia deklaracji zmiennej:
Variable : Name( InitialValue );
gdzie:
"Name" jest nazwą zmiennej;
"InitialValue" jest początkową wartością zmiennej.
Wartość początkowa definiuje typ zmiennej - numeryczny, tekstowy (ciąg znaków) albo logiczny.

Przykład deklaracji zmiennej numerycznej:
Variable : Counter( 0 );

Przykład deklaracji zmiennej typu tekstowego:
Variable : String1( "some string" );

Przykład deklaracji logicznej zmiennej logicznej:
Variable : MyCondition( false );

Składnia deklaracji dla tablicy:
Array : ArrayName[Array length]( InitialValue );

gdzie wielkość tablicy jest wskazywana przez jedną albo kilka (maksymalnie cztery) liczb - number[, number [, number [, number]]].

W języku MQL II tablice mogą mieć 1- 2- 3- lub 4- wymiary. Ogólnie tablica stanowi uporządkowany zestaw zmiennych, umieszczonych w szeregu jedne pod drugimi, do których dostęp możliwy jest przy użyciu nazwy - nazwy tablicy - i podanie numeru sekwencyjnego elementu. Tablice są dogodnym narzędziem przechowywania sekwencyjnych danych tego samego typu. Dobrym przykładem tablicy są dane historyczne, z terminala Handel, takie jak Ceny Zamknięcia (Close), Ceny Otwarcia (Open), Ceny Najwyższe (High), Ceny Najniższe (Low) oraz Wolumen (Volume).Dane te są dostępne jako macierz jednoelementowa.
Na przykład Close[ 5 ] stanowi wartość ceny zamknięcia z piątego okresu wstecz. Przykładem dwuelementowej macierzy może być prosta tablica, gdzie pierwsza miara stanowi ilość rzędów a druga ilość kolumn.
Przykład:
Array : MyTable[ 10, 5 ]( 0 ); // macierz składająca się z 10 rządów oraz 5kolumn
...
print( MyTable[ 2, 4 ] ); // drukuj czwarty element w drugim rzędzie

Tablice mogą zawierać wartości typu numerycznego, ciągu tekstowego albo logicznego, jednakże, typ danych powinien być zgodny z typem wartości początkowych, wyszczególnionych przy deklarowaniu tablicy.

Składnia deklaracji zmiennych użytkownika:

Define : Name( InitialNumber );
gdzie: Name jest nazwą zmiennej;
InitialNumber jest początkową numeryczną wartością zmiennej.

Należy pamiętać, iż dodatkowe zmienne definiowane przez użytkownika mogą być tylko typu numerycznego. Jak już wspomniano, zmienne definiowane przez użytkownika mogą zostać zmodyfikowane podczas procesu obliczeniowego programu. Takie modyfikacje dotyczą tylko aktualnej sesji Strategii do czasu, gdy zostanie usunięty z wykresu lub zamknięty zostanie terminal klienta. Uruchomienie nowej sesji Strategii powoduje ponowną inicjalizacje zmiennych.

Należy zwrócić uwagę na fakt, iż inicjalizowanie zmiennych (Inputs, Variables, Defines, Arrays) następuje jednorazowo przy pierwszym uruchomieniu Strategii. Jeżeli jakaś zmienna ma mieć pewną wyszczególnioną wartość przy każdym uruchomieniu Strategii, należy wówczas tę wartość zmiennej przypisać. Na przykład:
Variable : cnt( 0 );
cnt = 0; // przypisanie zmiennej przy każdym uruchomieniu.

Instrukcja EXIT

Instrukcja Exit kończy działanie Strategii. Jest to tzw. przedterminowe zakończenie działania programu.

Instrukcje warunkowe Jeżeli - To (IF - THEN)

Instrukcja warunkowa IF -; THEN umożliwia kontrolowanie sekwencji wykonania instrukcji przez Strategie. Twierdzenie to może zostać wykorzystane na wiele sposobów.
Składnia:
if Condition then Statement;
lub
if Condition then begin
Statement;
Statement;
... end;
gdzie:
Warunek (Condition) jest logicznym wyrażeniem biorącym wartości Prawdziwe albo Fałszywe;
Stwierdzenie (Statement) jest jakąś instrukcją języka MetaQuotes II.
Nawiasy zwykłe Begin (Początek) - End (koniec) mogą zostać zmienione na nawiasy {}. Warunkowe stwierdzenie może zostać bardziej rozbudowane poprzez użycie innego słowa kluczowego Else (w przeciwnym razie).
Składnia:
if Condition then Statement1 else Statement2;
lub
if Condition then begin
Statement;
Statement;
...
end
else
Statement;
Statement;
... end;
lub
Condition then begin
Statement;
Statement;
...
end
else Statement2;
lub
if Condition then Statement;
else
Statement;
Statement;
... end;

Możliwe jest również użycie bardziej złożonych stwierdzeń warunkowych. Generalnie, polecenie może przyjąć postać każdej dopuszczalnej instrukcji MQL II z wyjątkiem zmiennych deklaracji, ponieważ, ściśle mówiąc, zmienna deklaracja nie jest poleceniem wykonywalnym.

Pętla WHILE

Pętla WHILE zapewnia wielokrotne wykonanie wskazanych instrukcji w przypadku wystąpienia określonych warunków. Wcześniejsze zakończenie działania pętli możliwe jest przy wykorzystaniu słowa BREAK.
Działanie pętli może również zostać zatrzymane poprzez instrukcję Continue, które powoduje rozpoczęcie następnej iteracji pętli. Oznacza to, że instrukcje pomiędzy Continue a końcem pętli nie są wykonywane.
Zaleca się wykorzystanie poleceń BREAK oraz CONTINUE w twierdzeniach warunkowych.
Składnia:
while Condition begin
Statement;
[break;][continue;]
...
end;
gdzie:
Warunek (Condition) stanowi warunek wykonania pętli - logiczne wyrażenie obliczone przed każdą iteracją pętli, przyjmujące wartości logiczne Prawda (True) lub Fałsz (False);
Stwierdzenie (Statement) jest wybraną instrukcją języka MQII. Instrukcje Break oraz Continue nie są obowiązkowe.
Przykład:
Counter = 1;
while Counter <= Bars begin
print( Close[ Counter - 1 ] );
Counter = Counter + 1;
end;

Powyższy przykład przedstawia pętlę, której ilość wykonań jest uzależniona od wartości przechowywanej w zmiennej Bar. W przypadku gdy zmienna Bar zawiera wartość 0, pętla nie zostanie wykonana.

Pętla FOR

Pętla FOR zapewnia wykonanie poleceń zawartych w treści pętli określoną ilość razy.
Składnia:
for NumberVariable = InitialValue to|downto LimitValue begin
Statement;
[break;][continue;]
...
end;
gdzie:
NumberVariable jest zmienną pętli, która, po każdej iteracji powiększy się lub zmniejszy o 1, w zależności od użycia słów kluczowych To (wzrost o 1) lub Downto (spadek o 1);
InitialValue jest początkową numeryczną wartością zmiennej pętli; Statement stanowi pewną instrukcję języka MetaQuotes II.;
LimitValue jest marginalną numeryczną wartością zmiennej pętli; Nawiasy operatora Begin - End wskazują treść pętli i mogą zostać zastąpiony przez falujące nawiasy { }. Break oraz Continue nie są obowiązkowe.
Przykład:
for Counter = 1 to 10 begin
if Counter > Bars then break;
print( Close[ Counter ] );
end;

Ten przykład ilustruje pętlę, która może zostać wykonana 10 razy. Jeżeli wartość zmiennej Bars jest mniejsza od 10, wartość zmiennej Bars określa ile razy zostanie wykonana pętla.

Instrukcja BREAK

Polecenie Break zapewnia wcześniejsze zakończenie działania pętli FOR oraz pętli WHILE. Poprzedni przykład ilustruje nie tylko operację pętli, ale też użycie stwierdzenia Break. Instrukcja Break nie może zostać użyta na zewnątrz pętli. Pętle mogą zostać zagnieżdżone i polecenie Break kończy tylko najbliższą pętlę. Inaczej mówiąc, polecenie Break kończące wewnętrzną pętlę nie kończy pętli zewnętrznej.

Instrukcja CONTINUE

Polecenie Continue kończy daną iterację pętli i zaczyna następną iteracji od początku pętli. Inaczej mówiąc, polecenia znajdujące się za Continue są ignorowane.
Przykład:
for Counter = 1 to 10 begin
...
if Counter > Bars then continue;
print( Close[ Counter ] );
...
end;

Ten przykład ilustruje pętlę, która będzie wykonana dokładnie 10 razy. Jednakże, wartość Close[Counter] będzie drukowana nie więcej wskazuje wartość zmiennej Bar. Oznaczenie "..." reprezentuje inne instrukcje języka MQII.

login :
haslo :
KURSY WALUT
SONDA
Na jakich parach walut dokonujesz transakcji?

EURPLN
EURUSD
EURGBP
EURJPY
EURCHF
USDPLN
USDJPY
USDCHF
GBPUSD
INNE

forex

forex

forex

forex

forex
forex

analiza

analiza

analiza

analiza

analiza
analiza
Strona główna |  Mapa serwisu |  Wyłączenie odpowiedzialności |  Polityka prywatności |  Kontakt

Copyright © 2004 Trading Expert, All Rights Reserved.

Trading Expert - forex waluty kursy walut handel dolar euro analiza Forex dla kazdego! Zarabiaj pieniadze na rynku forex. Materialy edukacyjne, analizy, rekomendacje, oprogramowanie dla inwestorów. Analiza techniczna, analiza fundamentalna, efektywnosc rynku. analiza tradingexpert broker dolar euro forex handel inwestycje kursy walut notowania rynek rynku tradingexpert trader waluta waluty xtrade praca metastock