MetaTrader 5 herunterladen

Hat Dir der Artikel gefallen?
Teile ihn mit den anderen -
poste einen Link zu diesem Beitrag!

Nutze neue Möglichkeiten der Plattform MetaTrader 5

MQL4 Sprache für Einsteiger. Einführung

8 Februar 2016, 16:31
Antoniuk Oleg
0
728

Einführung

Diese Artikelreihe ist für Trader gedacht, die nichts über Programmierung wissen, aber den Wunsch haben MQL4 so schnell wie möglich mit minimal aufgewendeter Zeit und Anstrengung zu lernen. Wenn Sie Angst vor solchen Begriffen wie "Objektorientierung" oder "dreidimensionale Arrays" haben, ist dieser Artikel das was Sie brauchen. Die Lektionen sind für ein maximal schnelles Ergebnis entworfen. Darüber hinaus werden die Informationen in verständlicher Form geliefert. Wie werden nicht zu tief in die Theorie gehen, aber Sie werden den praktischen Nutzen bereits ab der ersten Lektion gewinnen.



Hinweis

Wenn Sie noch nie mit Programmierung gearbeitet haben, könnten Sie es schwierug finden die Bedeutung mancher Fälle beim ersten Lesen zu erfassen. Lesen Sie den Text langsam noch einmal und denken Sie über jeden Satz nach. Schließlich werden Sie alles verstehen, weil tatsächlich nichts schwierig ist. Machen Sie nicht weiter, ohne die vorherige Information verstanden zu haben. Studieren Sie Code-Beispiele. Schreiben Sie Ihre eigenen Beispiele, basierend auf dem, was Sie bereits verstanden haben.



Erste Bekanntschaft mit MQL4

Zunächst betrachten wir, was Sie mit dieser Sprache machen können. Sie ist gedacht für das Erstellen von Skripts, benutzerdefinierten Indikatoren, Expert Advisors und Bibliotheken:


  • Skripts sind Abfolgen von Befehlen, Programme die nur einmal auf Ihre Anforderung hin arbeiten. Sie können Vorgänge ersetzen, die Sie jeden Tag bim Trading ausführen. Zum Beispiel, wenn sie eine Order öffnen. Sie können außerdem spezifische Funktionen ausführen - zum Beispiel Charts analysieren und statistische Informationen erzeugen.
  • Benutzerdefinierte Indikatoren sind technische Indikatoren, als Zusatz zu eingebauten Indikatoren geschrieben. Sie entwickeln Charts oder andere visuelle Informationen. Im Gegensatz zu Skripts, funktionieren benutzerdefinierte Indikatoren bei jeder Kursänderung, d.h. bei jedem Tick. Was Indikatoren anzeigen, hängt nur von Ihnen ab. Es kann ein nutzloses Sinus-Diagramm sein, oder etwas, das Ihnen dabei hilft sich in den Marktsituationen zurechtzufinden. Wenn Sie zum Beispiel genau wissen, wann der Markt einen Trend erlebt, und wann Seitwärtsbewegungen, können Sie es als Indikator schreiben.
  • Expert Advisors sind mechanische Handelssysteme, an kein Finanzinstrument gebunden. Wie benutzerdefiniere Indikatoren, funktionieren Expert Advisors bei jedem Tick, aber im Gegensatz zu Indikatoren, können sie Sie über die Marktlage informieren (zum Beispiel, bestimmten Hinweis zum Kaufen oder Verkaufen geben) oder selbst traden, ohne Ihre Hilfe. Ein Terminal unterstützt das Testen von Strategien, was eine schnelle Beurteilung dr Rentabilität Ihres Expert Advisors ermöglicht. Sie beschreiben Ihre Strategie in der MQL4 Sprache, wobei ein Terminal leidenschaftslos Ihren gesamten Anweisungen folgt.
  • Bibliotheken (Libaries) sind Sätze von Funktionen zum ausführen bestimmter Aufgaben. Zum Beispiel, einer Ihrer Advisors verwendet spezielle mathematische Funktionen, um zu entscheiden, wann gekauft und wann verkauft wird.

In diesem Artikel werden wir lernen allgemeine Skripte zu schreiben. Ein spezielles Programm - MetaEditor 4 - wird zu diesem Zweck verwendet. Um es zu starten, drücken Sie F4 in einem geöffneten Terminal. Um ein neues Skript zu erstellen, klicken Sie auf File->New in dem Menü von MetaEditor 4 oder verwenden Sie die Strg+N Tasten:





In dem nun erschienen Fenster, wählen Sie, was Sie erstellen möchten. Wählen Sie Script und klicken Sie Weiter:


In dem nächsten Fenster schreiben Sie den Namen des Skripts in das Name Feld. Fügen Sie Ihren Namen in das Author Feld ein und E-Mail oder Webadresse in das Link Feld. Dann klicken Sie Fertig stellen:



Danach sehen Sie ein neues Fenster, mit dem Sie am meisten arbeiten wrden. Es zeigt den Originaltext:

Bitte beachten Sie, dass auch ein leeres, nicht funktionierendes Skript einen Codeenthält. Nun ist alles vorbereitet, um mit dem Programmieren zu beginnen. Jedoch haben Sie, leider, keine Vorstellung, wie dies gemacht werden sollte. Versuchen wir die Situation zu verbessern.


Quellcode, Kompilieren und Anderes

Sie sollten eine wichtige Sache verstehen. Was in MetaEditor geschrieben wird ist ein Quellcode. Das heißt, es ist eine Abfolge von Befehlen, denen ein Terminal einen nach dem anderen abwärts folgt. Aber ein Terminal kann einem Quellcode nicht folgen. Der Quellcode ist für Sie verständlich, aber nicht für MetaTrader. Um den Quellcode für das Terminal verständlich zu machen, muss er in die richtige "Sprache" "übersetzt" werden. Um dies zu machen, drücken Sie die F5 Taste in MetaEditor. Danach wird der Quellcode kompiliert in eine lauffähige Datei kompiliert. Kompilieren ist ein Vorgang der "Übersetzung" eines Quellcodes, von Ihnen geschrieben und für Sie verständlich, in eine spezielle Datei, die verständlich und ausführbar durch MetaTrader ist. Prüfen Sie es selbst. Erstellen Sie ein Skript mit dem Namen "Test1" und speichern es, aber kompilieren Sie es nicht. Öffnen Sie das Terminal, dort den "Navigator" und in diesem den "Skripte" Ordner. Sie sehen, es ist kein Skript mit dem Namen "Test1" vorhanden:




Jetzt kompilieren Sie das Skript (F5 Taste):



Öffnen Sie wieder das Terminal. Nun ist dort das Skript "Test1":



Klicken Sie doppelt auf den Skriptnamen im Terminal-Navigator und das Skript öffnet sich. Es passiert aber nichts, weil das Skript leer ist.

Sie sollten bereits verstehen, wie der Vorgang des Skriptschreibens aussieht: Sie schreiben den Quellcode, kompilieren ihn, öffnen das Skript im Terminal, ändern den spezifischen Code, kompilieren, sehen in an... und so weiter, bis Sie das gewünschte Ergebnis erhalten.


<h3wo sollten="" skripte="" geschrieben="" werden?

Sie haben bereits gesehen, dass leere Skripte einen bestimmten Code enthalten. Aber wo müssen Sie den Quellcode schreiben, der funktioniert? Er muss zwischen die Zeilen int start(){ und return(0);} geschrieben werden, wie im Bild gezeigt:



Schreiben Sie hier alles, was ich Ihnen zeige, und es wird funktionieren. Später werden wir im Detail ansehen, was diese Zeilen bedeuten.

Variablen

Was ist eine Variable? Versuchen Sie diese Frage für sich selbst zu beantworten, und ich werde Ihnen dabei helfen. Wie alt sind Sie? Wie alt werden Sie in fünf Jahren sein? Sehen Sie: Ihr Alter ist eine Variable. Ihr Alter ändert sich um Laufe der Zeit, wie jede andere Variable. Das heißt, die erste Eigenschaft einer Variable, ist ihre Veränderung im Laufe der Zeit. Ein anderes Beispiel: was war Ihre Größe mit fünf Jahren? Wahrscheinlich viel weniger als heute. Die Größe ist ein weiteres Beispiel einer Variable. Aber hier ist ein wichtiger Unterschied. Beachten Sie, dass das Alter in Ganzzahlen (Integer) berechnet wird. Die Größe wird besser in Dezimalzahlen berechnet ("Fließkommazahl"). Alter: 20 Jahre, 30 Jahre. Größe: 1,8 Meter, 1,95 Meter. Dies ist eine sehr wichtige Eigenschaft: jede Variable gehört zu einem bestimmten Typ. Schauen wir, welche weiteren Typen an Variablen es gibt. Sie können mit Zahlen viele Parameter beschreiben, aber wie beschreiben wir einen Text? Zu diesem Zweck werden spezielle String-Typen verwendet. Solche Variablen enthalten nur Zeilen. Sehen wir uns an, wie man eine Variable in der MQL4 Sprache beschreibt und erstellt. Beispiel:

int age = 25;

Hier sehen wir eine Variable vom Typ Integer (int - integer). Int ist ein Schlüsselwort in der MQL4 Sprache, das zeigt, dass wir ganze Zahlen verwenden. Dann schrieben wir "age" - es ist der Name der Variable, d.h. ein Wort, das die die Bedeutung wiedergibt, gespeichert in dieser Variable. Danach haben wir den Wert 25 der Variable zugeordnet, mit Verwendung des Zeichens "=". Nach jeder Anweisung muss ein ";" gesetzt werden. Beachten Sie, Deklaration und Initialisierung jeder Variable, kommen zu der Variable in folgender Form:

[ variable Typ] [ variable Name] = [ variable Wert];

Übrigens, es ist nicht notwendig einer Variable einen Wert zuzuweisen (Initialisieren), Sie können es so schreiben:

int age;

Ein weiteres Beispiel:

double height = 1.95;

Hier deklarieren wir eine Variable mit dem Namen “height”, die Werte vom Typ double speichert (Fließkommazahlen, dezimal) und weisen mit dem Operator "=" einen Wert 1.95 zu.

Betrachten wir nun eine String Variable:

string name = "Janet";

string ist ein Variablentyp, name ist ein Variablen-Name, "Janet" ist ein Variablen-Wert. Beachten Sie, dass der Wert einer Variable vom Typ string in doppelte Anführungszeichen (") gesetzt wird.

Es gibt einen weiteren nützlichen Typ einer Variable - bool. Variablen dieses Typs akzeptieren nur zwei Werte: entweder true (zutreffend) oder false (nicht zutreffend). Beispiel:

bool trend = false;

Jetzt sollten Sie ein paar einfache Dinge beachten. Die MQL4 Sprache unterscheidet zwischen Groß- und Kleinschreibung, d.h. es ist sehr wichtig, ob einen Code in GROSSBUCHSTABEN oder Kleinbuchstaben schreiben. Wenn Sie zum Beispiel mehrere Variablen mit identischen Namen, aber unterschiedlicher Schreibweise deklarieren, erhalten Sie völlig unterschiedliche Variablen:

double HIGHTPRICE;
double hightprice; 
double HightPrice; 
double hightPrice;

Der oben gezeigt Code wird vier völlig verschiedene Variablen erstellen. Bitte beachten Sie außerdem, dass alle Schlüsselwörter in der MQL4 Sprache in Kleinbuchstaben geschrieben werden.

Nächstes Beispiel:

DOUBLE hightPrice1;
Double hightPrice2;

Der oben genannte Code wird nicht funktionieren, weil das Wort "double" in seiner Schreibweise nicht als Schlüsselwort von MQL4 akzeptiert wird. Ein weiterer wichtiger Punkt ist, dass die Namen von Variablen nicht mit einer Zahl oder Sonderzeichen (*,&,,%,$) beginnen können. Zum Beispiel:

double 1price;
double %price;

Ein weiteres wichtiges Element ist ein Kommentar (Comment). Wenn Sie "//" am Anfang einer Zeile schreiben, wird die ganze Zeile als Kommentar gewertet. Das bedeutet, beim Kompilieren wird sie ignoriert. Zum Beispiel:

// this is a comment 

Jetzt sehen Sie, dass ein leerer Skript-Code viele Kommentare mit informativem Charakter enthält. Kommentieren Sie Ihren Code. Es kann Ihnen manchmal helfen viel Zeit zu sparen.

Arbeiten mit Variablen

Sehen wir uns an, was wir mit Variablen machen können, nachdem wir sie deklariert haben. Betrachten wir dazu ein einfaches Beispiel:

double a = 50.0;// declare a value with a floating point and
                // assign the value 50 to it
double b = 2.0; 
double c;   

c = a + b;      // assign to the variable c sum of variables
                // a and b. Now the value is equal to 52. Like after
                // any other instruction put a semicolon (“;”) 

c = a - b;      // diminution, c = 48 
c = a*b;        // multiplication, c = 100 
c = a / b;      // division, c = 25   
c = (a + b)*a;  // place the operations that should be performed
                // first inside the brackets. In our case 
                // first we get the sum of a and b 
                // after that this sum will be multiplied by a and assigned to c

c = (a + b) / (a - b); // if there are several operations in brackets, 
                // they will be performed  
c = a + b*3.0;  // according to mathematic rules first you will get 
                // multiplication b and 3, and then the sum

Wenn Sie eine Operation mit einer Variable ausführen müssen und ihr dafür ein Ergebnis zuweisen, zum Beispiel 5 hinzufügen, machen Sie es auf einem der folgenden Wege:

int a = 5;
a = a + 5;  // add 5 
a += 5;     // analogous 
a = a*5;
a *= 5;     // multiply a by 5 and assign to it 
a /= 5;     // divide and assign

Wenn Sie 1 hinzufügen oder abziehen möchten, verwenden Sie die folgende Methode:

int a = 5;
a++;  // add1, it is called increment
а--;  // subtract 1, it is decrement

Es ist alles in Ordnung, aber bei der Arbeit mit solchen Skripts können Sie nur raten, ob alles richtig läuft, weil nichts auf dem Monitor passiert.
Deshalb ist es komfortabel die Ergebnisse anzuzeigen. Zu diesem Zweck gibt es eine integrierte Funktion MessageBox().

MessageBox()

Eine Funktion ist ein Satz von Anweisungen, die Parameter akzeptieren und in Abhängigkeit von ihnen die Ereignisse anzeigen. In unserem Fall akzeptiert die MessageBox() Funktion zwei Parameter: erstens - Nachrichtentext, zweitens - Titel-Text. Hier ist ein Beispiel:

MessageBox("Hello, World! There is some text.","caption");

Um eine Funktion auszuführen, schreiben zuerst ihren Namen. Denken Sie an die Schreibweise! Dann öffnen SIe eine Klammer und schreiben die Parameter durch Kommas getrennt. In unserem Fall sind die Parameter von Typ string. Denken sie daran, alle Zeilen in Anführungszeichen (") zu schreiben. Wie bei jeder Anweisung, setzen Sie am eEnde ein Semikolon. Für das bessere Verständnis, schauen wir uns das Bild an. Es zeigt, wie Code und Ergebnis miteinander verbunden sind:

Natürlich, es ist alles in Ordnung. Aber wie können wir Variablen anderer Typen anzeigen? Leicht - behalten Sie es im Kopf:

int a = 50; 
int b = 100;   
MessageBox("It is very simple. a+b=" + (a + b), "a+b=?") 

Als Ergebnis erhalten wir:

Wie Sie bereits bemerkt haben, ist MQL4 so entworfen, dass wenn wir versuchen einen anderen Typ Zahl einer Zeile hinzuzufügen, es automatisch Zahlen in Zeilen überträgt und diese verbindet. Es ist eine wirklich wunderbare Eigenschaft! Sie können solche Operationen auch mit string Variablen machen:

int a = 50; 
int b = 100; 
string str1 = "a + b =";   
str1 += a + b; // now str1 = "a + b = 150"   
// now use the variable str1 as 
// a first parameter
MessageBox(str1, "a + b = ?");

Nun wissen Sie, wie Sie verschiedene Daten mit MessageBox() anzeigen. Aber worin liegt das Interesse, die Ergebnisse von einfachen mathematischen Operationen anzuzeigen? Wir brauchen MQL4 nicht um einfache Summen und Multiplikationen zu finden, nicht wahr?


Arrays

Haben Sie keine Angst. Es ist sehr einfach. Sehen Sie, angenommen Sie wollen süch fünf Kurse merken. Was sollten wir tun? Nun, wir könnten dies tun:

double price1 = 1.2341; 
double price2 = 1.2321; 
double price3 = 1.2361; 
double price4 = 1.2411; 
double price5 = 1.2301;

Wir erhalten fünf Variablen, die den gleichen Datentyp haben und einen Parameter beschreiben - den Kurs. Wir können einen anderen Weg gehen, mit einem Array. Ein Array ist ein Satz von Variablen, die sich in Indizes unterscheiden, aber einen Namen haben. So beschreiben wir Arrays von fünf Elementen:

double price[5];


Häufigste Form:

(array Typ) (array Name) [Anzahl der Elemente];

In unserem Fall: Array Typ - double, name - Kurs, Anzahl der Elemente - 5. Sehen wir uns an, wie wir auf die Array Elemente beziehen können:

double price[5];   // declare an array of 5 elements

price[0] = 1.2341; // refer to the first element of the array and 
                   // assign a price to it. Note 
                   // that the index of the first element starts with 0 
                   // It is an important feature,
                   // you should get used to it.   

price[1] = 1.2321;  // refer to the second element 
price[2] = 1.2361;  // and so on 
price[3] = 1.2411; 
price[4] = 1.2301;

Wir können alle Operationen mit den Array Elementen ausführen, wie mit gemeinsamen Variablen. Tatsächlich sind Arrays gemeinsame Variablen:

double price[2];   
price[0] = 1.2234; 
price[1] = 1.2421;   
MessageBox("Middle price is " + (price[0] + 
           price[1]) / 2.0,"middle price");

Wenn wir Arrays deklarieren, können wir Anfangswerte für alle Elemente zuweisen:

double price[2] = {1.2234, 1.2421};

Wir zählen die Anfangswerte der Elemente einfach in Klammern gesetzt und durch Komma getrennt aus. In einem solchen Fall können Sie einen Compiler die Nummer der Elemente automatisch setzen lassen, statt sie selbst zu schreiben:

double price[] = {1.2234, 1.2421};

Unzweifelhaft ist das alles in Ordnung, aber... Leider ist es nutzlos. Wir sollten irgendwie richtige Daten erhalten! Zum Beispiel aktuelle Kurse, Zeit, Betrag an freiem Geld, un so weiter.


Integrierte oder eingebaute Arrays und Variablen

Natürlich können wir ohne echte Daten nichts machen. Um Zugang zu ihnen zu erhalten, müssen wir einfach auf ein entsprechend eingebautes Array verweisen. Es gibt verschiedene solcher Arrays, zum Beispiel:

High[0];   // refer to the last maximal price, 
           // that the bar has achieved in the current timeframe 
           // and current currency pair. Currency pair and 
           // the timeframe depend on the chart, on which you 
           // have started a script. It is very important to remember! 

Low[0];    // minimal price of the last bar 
           // in the current chart. 

Volume[0]; // value of the last bar in the current chart.

Um eingebaute Arrays und Indizes richtig zu verstehen, sehen Sie dies an:

Sie sehen, der letzte Balken-Index (Nummer) ist 0, neben dem letzten ist 1 und so weiter.
Es gibt außerdem eingebaute gemeinsame Variablen. Zum Beispiel zeigen Balken die Nummer der Balken im aktuellen Chart. Es ist eine gemeinsame Variable, aber sie wurde vor Ihnen und außerhalb Ihres Skripts deklariert. Diese Variable existiere immer, wie andere eingebaute Arrays und Variablen.


Zyklen

Angenommen Sie haben beschlossen den Mittelwert aller Höchstkurse der Balken im Chart zu berechnen. Zu diesem Zweck fügen Sie jedes Element einer Variable hinzu, zum Beispiel so:

double AveragePrice = 0.0;   
AveragePrice += High[0];
AveragePrice += High[1]; 
AveragePrice += High[2]; 
AveragePrice += High[3]; 
AveragePrice += High[4];   // ... and so on
AveragePrice /= Bars;

Ich kann Ihnen dies sagen: Es funktioniert vielleicht, aber es ist absurd. Für solche Zwecke gibt es Zyklen. Beachten Sie, dass alle Operationen absolut gleich sind, nur der Index ändert sich von 0 zu variablem Balekn-1 Wert. Er wäre viel komfortabler einen Zähler zu bestimmen und ihn auf die Array-Elemente zu beziehen. Wir können diese Aufgabe mit der Verwendung von Zyklen lösen:

double AveragePrice = 0.0;   
for(int a = 0; a < Bars; a++)
{     
    AveragePrice += High[a];
}

Betrachten wir jede Zeile:

double AveragePrice = 0.0; // everything is clear
// this is a cycle.
or(int a = 0; a < Bars; a++)

Sie sehen, der Zyklus beginnt mit einem Schlüsselwort for. (Es gibt andere Typen von Zyklen, z.B. while, aber wir werden diese jetzt nicht lernen). Dann in Anführungszeichen durch Semikolon getrennte Zähler, Zyklus Ablaufbedingungen, Zähler-Erhöhung Operation. Im allgemeinen Fall kann es wie folgt dargestellt werden:

for(declaration of a counter; the cycle operation conditions;
   counter changes)
  {
    // the source code, that will be repeated is in braces,
  }

Betrachten wir jede Stufe der Zyklus-Deklarierung näher.


Zähl Deklaration: int Typ wird für den Zähler verwendet. Der Name der Variable-Zähler spielt keine Rolle. Sie müssen den Primärwert initialisieren, zum Beispiel durch 0.


Zähler Ablaufbedingungen: es ist alles einfach. Sie bestimmen hier eine Bedingung, und wenn sie erfüllt ist, geht der Zähler weiter. Andernfalls wird der Zähler beendet. Zum Beispiel in unserem Fall:

a < Bars

Es ist klar, dass der Zyklus weiterläuft, wenn die Variable-Zähler weniger ist als die Variable Balken. Angenommen, Variable Balken=10, dann wird bei jeder Bewegung des Zyklus die Variable um 1 erhöht, bis 10 erreicht ist. Danach wird der Zyklus beendet.

Zähler Änderung: wenn wir den Zähler nicht ändern (in unserem Fall ihn erhöhen), wird der Zyklus niemals beendet, weil die Bedingung niemals erfüllt wird. Zum besseren Verständnis der Bedeutung des Zyklus habe ich einen Code geschrieben, der einen Zyklus ausführt, mit beschreibenden Kommentaren:

// the cycle:
// double AveragePrice=0.0;
//
// for(int a=0;a>
// {
//   AveragePrice+=High[a];
// }
//
// will be performed in this way:
//

double AveragePrice=0.0;

int a=0;

AveragePrice+=High[a];
a++;                    // now a=1, suppose Bars=3.
                        // then the cycle goes on, because Bars > a 

AveragePrice+=High[a];
a++;                   // a=2

AveragePrice+=High[a];
а++;                   // a=3

// the conditions is not fulfilled any more, so the cycle 
// stops, because a=3 and Bars=3

Jetzt sollten Sie verstehen wie Zyklen funktionieren. Aber Sie müssen mehr Einzelheiten wissen.

Zyklus-Arbeitsbedingungen können unterschiedlich sein. Zum Beispiel wie diese:

a>10    // the cycle works while a>10
a!=10   // the cycle works while a is not equal to 10
a==20   // while a is not equal to 20
a>=2    // while a is more or equal to 2
a<=30   // while a is less or equal to 30

Der Zähler kann auf verschiedene Arten geändert werden. Beispielsweise müssen Sie ihn nicht jedes Mal um 1 erhöhen. Sie können wie folgt vorgehen:

a--     // the counter will each time decrease by 1 
a += 2  // the counter will each time increase by 2

Darüber hinaus können Sie die Zähleränderung innerhalb des Zykluskörpers platzieren. Zum Beispiel so:

for(int a=0; a<Bars;)
 {
   AveragePrice+=High[a];
   
   a++; // the counter changes inside the cycle body
  }
>

Es ist außerdem nicht notwendig die Variable-Counter in dem Zyklus zu deklarieren. Sie können e s auf eine andere Art machen:

int a = 0;
 
for(;a < Bars;)
 {
   AveragePrice += High[a];
 
   a++; // the counter changes inside the cycle body
 }

Wenn der Zykluskörper nur einen Operator enthält, zum Beispiel wie dieser:

for(int a = 0; a < Bars; a++)
 {
   AveragePrice += High[a];
 }

dann ist es nicht notwendig Klammern zu setzen:

for(int a = 0; a < Bars; a++)
    AveragePrice += High[a];


Das ist bis jetzt alles über Zyklen. Es gibt andere Zyklustypen, aber wir werden diese in der nächsten Lektion besprechen. Nun sollte es reichen, wenn Sie Zyklen verwenden und sich an die Syntax erinnern. Versuchen Sie mehrere Zyklen zu schreiben, Die die Zählerwerte über die MessageBox() Funktion anzeigen. Versuche Sie einen unterbrochenen Zyklus zu schreiben, und beobachten Sie, was nach dem Start passiert.


Bedingungen

Es gibt eine weitere wichtige Sache, die Sie immer verwenden werden - Bedingungen. Unser Leben besteht aus vielen Bedingungen, und Aktionen, die diesen Bedingungen folgen. Wir denken sehr oft in Bedingungssätzen. Zum Beispiel: "Wenn ich genügend Zeit habe, werde ich dieses Buch lesen. Wenn nicht, dann ist es besser eine Zeitschrift zu lesen". Sie können hunderte solcher Bedingungen und Aktionen erzeugen. Aber wie schreiben wir sie in MQL4? Hier ist ein Beispiel:

// of course the conditionsn should be written in MQL4
if( I have enough time )   
  {  
    // here we place any actions, directions in MQL4
    will read this book; 
  }
// if the first condition is not fulfilled, 
// the second is fulfilled
else   
  {
    read a magazine;  // code
  }

Nun sollten Sie die Syntax von Bedingungen verstehen. Betrachten wir Bedingungen, vollständig in der MQL4 Sprache geschrieben:

int a = 10;
int b = 0;
 
if(a > 10 )
  {
    b = 1;
  }
else
  {
    b = 2;
  }
 
MessageBox("b=" + b,".");

Alles ist ziemlich einfach. Was ist der Wert von b nach der Fertigstellung? Natürlich b=2, weil die Bedingung a > 10 nicht erfüllt ist. es ist einfach. es ist übrigens nicht erforderlich das Schlüsselwort else zu verwenden:

int a = 10;
int b = 0;
 
if(a > 10)
  {
    b = 1;
  }

In diesem Fall ist eine Bedingung nicht erfüllt, der Code-Block, der dieser Bedingung in Klammern folgt wird ausgelassen. In unserem Fall nach dem Erfüllen von b = 0. Beachten Sie außerdem den Weg, auf dem Bedingungen gebildet werden. Wir wissen, dass verschiedene Typen von Variablen verschiedene Werte bekommen können, zum Beispiel:

  • int - Ganzzahlen (integers) (1, 60, 772);
  • double – mit einem Fließkomma (1.0021, 0.221);
  • string – nur Zeilen ("Wort", "Etwas Text.");
  • bool – nur trifft zu oder trifft nicht zu (true, false).

Also, das Fazit ist: in Bedingungen vergleichen Variablen nur mit Werten, die sie verarbeiten können, zum Beispiel:

int Integer=10;
double Double=1.0;
string String="JustWord";
bool Bool=true;
 
if(Integer<10) // the condition is correct
{
  MessageBox("It works!","Really!");
}
 
if(Double!=1.0) // the condition is correct
{
   MessageBox("works!","Simple!");
}
 
if(String==10) // this is nonsense!! 
               // we found the variable 
               //String with string type, but 10 is int
{
   MessageBox("Wrong type","u can't c this");
}
 
if(String!="Word") // ok
{{
  // ...
}
 
if(Bool==true) // correct
{
  // ...
}

Beachten Sie, das wir Vergleiche mit Bedingungs-Operatoren machen (==, !=, >, <, >=, <=). Für string und bool Typen verwenden wir nur == und != Vergleiche.

Lassen Sie uns nun die Bedeutung von Einschlüssen (inclusions) kennenlernen. Ja, Sie können Bedingungen in Zyklen und Zyklen in Bedingungen verwenden, Sie können Bedingungen in anderen Bedingungen verwenden, und so weiter. Zum Beispiel:


int a=0;
double b=0.0;
bool e;
 
if(a==0)
{
  for(int c=0;c<Bars;c++)
  {
     b+=High[c];
  }
  
  if(b>500.0)
  {
     e=true;
  }
  else
  {
     e=false;
  }
}

Das nächste Beispiel zeigt einen anderen Weg der Verwendung von Bedingungen:

int a=0;
int result;
 
if(a==0)
{
  result=1;
}
else if(a==1)
{
  result=2;
}
else if(a==2)
{
  result=3;
}
else
{
  result=4;
}

Wenn Sie im Fall einer Standardbedingung eine weitere Bedingung haben, schreiben Sie diese nach dem Schlüsselwort "else", wie in obigem Code. Dies funktioniert auch. Die Anzahl der Bedingungen ist nicht limitiert. Wenn Aktionen der Bedingungserfüllung zu einer Operation passen, können Sie, wie in Zyklen, die Klammern auslassen:

if(a==1)
{ 
  b=2;
} 

// or this way:

if(a==1)
  b=2;

Komplexe Bedingungen

Sehr oft ist eine Bedingung nicht ausreichend. Wenn Sie viele Parameter vergleichen müssen, haben Sie es mit komplexen Bedingungen zu tun. Zum Beispiel, wenn ich ausreichend Zeit und Geduld habe, werde ich MQL4 lernen. Wir können es als Code schreiben:

if((enough time) && (enough oatience))
{
     I will learn MQL4 language;
}

Es bedeutet, Sie müssen zuerst komplexe Bedingungen in einfache Bedingungen unterteilen, sie in Klammern setzen und && (logisches AND) oder || (logisches OR) zwischen sie einfügen. Wenn beide Bedingungen erfüllt sein müssen, fügen Sie && (AND) ein. wenn nur eine Bedingung erfüllt sein muss, fügen Sie || (OR) ein. Hier ist ein Beispiel:

nt a=10;
int b=20;
 
if((a>5) && (b<50))
  MessageBox("Its works!","Yes");

Darüber hinaus können Sie so viele Bedingungen umschließen und kombinieren, wie Sie benötigen:

int a=10;
int b=20;
 
if ( ((a>5) || (a<15)) && ( b==20))
  MessageBox("It works, too!","Yes");

Alles Zusammen

Mit der gemeinsamen Verwendung komplexer und einfacher Bedingungen, Zyklen, können Sie einen sehr komplizierten Code schreiben. Fast jeder Mechanismus kann unter Verwendung dieser einfachen Strukturen der MQL4 Sprache beschrieben werden. Wenn Sie verstehen, wie diese einfachen Dinge geschrieben werden und wie sie arbeiten, verstehen Sie die Hälfte von MQL4 oder jeder anderen Programmiersprache! Es ist wirklich sehr einfach! Alles was Sie brauchen ist Geduld. Versuchen Sie so viele Skripts zu schreiben wie Sie können, um die Syntax zu behalten und praktische Erfahrung zu sammeln. Außerdem finden Sie Beispiele in der angehängten Datei examples.mq4, und versuchen Sie diese zu verstehen.

Andere eingebaute Variablen und Arrays

Sie kennen solche Arrays bereits als High[], Low[], Volume[] und eine variable Bars. Hier sind einige weitere nützliche Variablen:

double Open[]  // the array of prices of the current
               // chart opening bars
double Close[] // the array of prices of the current 
               // chart closing bars 

double Bid  // the last known buying price in 
            // the current currency pair
double Ask  // the last known selling price in
            // the current currency pair

Fazit

Also, Sie haben viele neue Dinge erfahren. Wahrscheinlich herrscht etwas Durcheinander in Ihrem Kopf. Lesen Sie den Text noch einmal, denken Sie nach, üben Sie um die Bedeutung zu begreifen. Ich verspreche, es wird sich sehr bald alles richtig einreihen. Was in diesem Artikel geschrieben ist, sind die Grundlagen dr ganzen MQL4 Sprache. Je besser Sie dieses Material verstehen, umso einfacher wird das weitere Lernen. Ich würde sogar sagen - es wird viel einfacher weiter zu lernen, weil das Material, das in diesem Artikel beschrieben ist, der schwierigste Teil ist. In den nächsten Artikeln werden wir verschiedene Besonderheiten der MQL4 Sprache untersuchen, und andere integrierte Funktionen, die großartige Möglichkeiten für die Programmierung bereitstellen.




Übersetzt aus dem Englischen von MetaQuotes Software Corp.
Originalartikel: https://www.mql5.com/en/articles/1475

Beigefügte Dateien |
examples.mq4 (3.11 KB)
Strings: Tabelle mit ASCII Zeichen und ihre Verwendung Strings: Tabelle mit ASCII Zeichen und ihre Verwendung

In diesem Artikel analysieren wir die Tabelle mit ASCII Zeichen und die Wege, in denen sie verwendet werden können. Wir werden uns außerdem mit einigen neuen Funktionen, dem Prinzip der Arbeitsweise, die auf den Besonderheiten der ASCII Tabelle basiert, beschäftigen, und dann werden wir eine neue Bibliothek (Libary) erstellen, die diese Funktionen enthält. Sie sind in anderen Programmiersprachen ziemlich beliebt, aber sie sind nicht in der Liste eingebauter Funktionen enthalten. Außerdem werden wir die Grundlagen der Arbeit mit Strings im Detail untersuchen. Also, ich glaube, Sie werden sicherlich etwas Neues über diesen nützlichen Datentyp erfahren.

Wie man das Erkennen und Beheben von Fehlern in einem Expert Advisor Code einfacher macht Wie man das Erkennen und Beheben von Fehlern in einem Expert Advisor Code einfacher macht

In der Expert Advisor Entwicklung, sind die Fragen der Fehlererkennung im Code und deren Behebung sehr wichtig. Die Besonderheit ist, dass ein nicht rechtzeitig entdeckter Fehler, eine wertvolle Idee für ein Handelssystem bereits auf der Stufe der ersten Tests ruinieren kann. Deshalb berücksichtigt jeder vernünftige EA Entwickler solche Probleme von Anfang an. Dieser Artikel beschäftigt sich mit einigen Ansätzen, die in dieser schwierigen Angelegenheit helfen.

So können Sie Ihre eigenen Optimierungskriterien implementieren So können Sie Ihre eigenen Optimierungskriterien implementieren

In diesem Artikel finden Sie ein Beispiel für die Optimierung nach dem Kriterium Gewinn/Kreditinanspruchnahme, wobei die Resultate in einer Datei zusammengefasst werden, die für die Verwendung mit einem standardisierten "Expert Advisor" - dem Gleitenden Durchschnitt - geeignet ist.

Der Objekt-Ansatz in MQL Der Objekt-Ansatz in MQL

Dieser Artikel wird in erster Linie für alle Programmierer von Interesse sein – sowohl Neueinsteiger als auch Profis, die mit der MQL-Umgebung arbeiten. Darüber hinaus wäre es sinnvoll, wenn dieser Artikel von den Entwicklern und Planern der MQL-Umgebung gelesen werden würde, weil hierin nämlich einige Fragen thematisiert werden, die vielleicht in die künftigen Implementierungen von MetaTrader und MQL miteinbezogen werden könnten.