Kontrollstrukturen in MQL4

Der Ablauf eines Programmcodes in MQL4 ist oft von Entscheidungen abhängig. Hierfür werden Kontrollstrukturen verwendet. Die wichtigste Anweisung ist die if-Anweisung.

Kontrollstrukturen in MQL4
Werbung

MQL4 Programmierung im Metatrader 4

Das Arbeitsbuch für die Programmierung automatischer Handelssysteme im MetaTrader 4

Das Arbeitsbuch für die Programmierung automatischer Handelssysteme im MetaTrader 4 richtet sich an alle, die Programmierkenntnisse in der Programmiersprache MQL 4 erlangen wollen. Ziel des Buches ist es, dem Leser die Kenntnisse zu vermitteln individuelle Expert Advisor Programme zu programmieren. Durch die Erläuterung verschiedener Funktionen und Anwendungen können die Einsatzmöglichkeiten der Programmiersprache MQL4 vom Leser nachvollzogen und eigenständig umgesetzt werden. Schrittweise wird der Leser in die Programmiersprache eingeführt und anhand von Beispielprogrammen können Programmiertechniken gelernt werden.

Mehr Erfahren →

Die if-Anweisung

Die if-Anweisung wird in MQL4 dazu verwendet einen Zustand zu prüfen und als Reaktion auf diesen Zustand einen vorbestimmten Teil des Programmcodes auszuführen. Zum besseren Verständnis kann eine if-Anweisung auch umgangssprachlich mit "wenn dies passiert - dann mach folgendes" umschrieben werden.


Beispielsweise kann eine Anforderung folgendermaßen beschrieben werden: Wenn der Schlusskurs größer ist als 100, dann setzte den Stop-Loss auf 90. Das folgende Codebeispiel übersetzt diesen Satz in die Programmiersprache MQL4.

Beispiel:

double Schlusskurs = Close[0];
double Kursziel = 100;
double StopLossKurs = 90;
if(Schlusskurs > Kursziel){
ChangeStopLoss(StopLossKurs);
}


Die Variable "Schlusskurs" wird mit dem Wert der Variable "Kursziel" verglichen. Trifft die Überprüfung zu, dann wird der Code innerhalb der geschweiften Klammern ausgeführt. In diesem Beispiel wird ein fiktive Funktion aufgerufen, die den Stop-Loss Kurs anpassen soll.

Kombinierte if-Anweisungen

Im vorangegangenen Beispiel wird der Code innerhalb der if-Anweisung ausgeführt, wenn die Bedingung des Ausdrucks erfüllt ist. Ist die Bedingung nicht erfüllt, wird kein spezieller Code ausgeführt, sondern das Programm folgt weiter dem Ablauf. Soll in jedem Fall ein Code ausgeführt werden, auch wenn die Bedingung nicht erfüllt ist, kann diese durch eine erweiterung der if-Anweisung erreicht werden. Der if-Anweisung wird eine Alternative geboten. Für diese Alternative wird die "else-Anweisung" verwendet. Zum besseren Verständnis kann eine if-else-Anweisung auch umgangssprachlich mit "wenn dies passiert - dann mach folgendes - anderenfalls mach das" umschrieben werden.


Beispielsweise kann eine Anforderung folgendermaßen beschrieben werden: Wenn der Schlusskurs größer ist als 100, dann setzte den Stop-Loss auf 90. Anderenfalls setzte den Stop auf 80. Das folgende Codebeispiel übersetzt diesen Satz in die Programmiersprache MQL4.

Beispiel:

double Schlusskurs = Close[0];
double Kursziel = 100;
double StopLossKurs = 90;
double AlternativerStop = 80;
if(Schlusskurs > Kursziel){
ChangeStopLoss(StopLossKurs);
}
else{
ChangeStopLoss(AlternativerStop);
}


Die Variable "Schlusskurs" wird mit dem Wert der Variable "Kursziel" verglichen. Trifft die Überprüfung zu, dann wird der Code innerhalb der geschweiften Klammern ausgeführt. Anderenfalls wird der Code ausgeführt der innerhalb der geschweiften Klammern nach der else-Anweisung steht. In diesem Beispiel wird ein fiktive Funktion aufgerufen, die den Stop-Loss Kurs anpassen soll.

Kombinierte else-if-Anweisungen

Die zu überprüfenden Bedingungen können durch die else-if-Anweisung noch erweitert werden. Zum besseren Verständnis kann eine if-else-if-Anweisung auch umgangssprachlich mit "wenn dies passiert - dann mach folgendes - wenn etwas anderes passiert - dann mach was anderes - anderenfalls mach das" umschrieben werden.


Beispielsweise kann eine Anforderung folgendermaßen beschrieben werden: Wenn der RSI-Indikator einen wert von 90 hat, dann eröffne eine Short-Position. Wenn der RSI-Indikator einen wert von 10 hat, dann eröffne eine Long-Position. Wenn der RSI-Indikator einen wert von 80 hat, dann schließe eine Long-Position. Wenn der RSI-Indikator einen wert von 20 hat, dann schließe eine Short-Position. Anderenfalls informiere den Anwender, dass keine Aktion ausgeführt wurde. Das folgende Codebeispiel übersetzt diese Anforderungen in die Programmiersprache MQL4.

Beispiel:

double Indikatorwert = iRSI(Symbol(),0,14,PRICE_CLOSE,0);

if(Indikatorwert == 90){
OpenShort();
}
else if(Indikatorwert == 10){
OpenLong();
}
else if(Indikatorwert == 80){
CloseLong();
}
else if(Indikatorwert == 20){
CloseShort();
}
else{
Print("Es wurde keine Aktion ausgeführt");
}


Die Variable "Indikatorwert" wird mit verschiedenen Bedingungen verglichen. Trifft eine der Überprüfungen zu, dann wird der jeweilige Code innerhalb der geschweiften Klammern ausgeführt. In diesem Beispiel werden fiktive Funktionen aufgerufen, die entwerder eine Position eröffnen oder schließen soll.

Die switch-Anweisung

Die Switch-Anweisung dient ebenfalls dazu, zwischen verschiedenen Alternativen zu entscheiden und damit den Programmablauf zu verzweigen.


Betrachten wir zunächst den Aufbau der switch-Anweisung

Syntax:

switch(Ausdruck)
{
case Kosntante:
Anweisung;
break;
case Kosntante:
Anweisung;
break;
default:
Anweisung;
}


Die Switch-Anweisung prüft durch das Schlüsselwort "case", ob die Konstante dem Ausdruck entspricht. Ist dies der Fall, wird die Anweisung ausgeführt und das Schlüsselwort "break" beendet den Switch. Ist die Bedingung im ersten Case nicht erfüllt, wird der nächste Case nach dem gleichen Prinzip geprüft. Der Switch endet mit dem Schlüsselwort "default". Die Anweisung, die zu "default" gehört wird ausgeführt, wenn vorher keine Übereinstimmung stattgefunden hat.


Nun ein praktisches Beispiel für eine switch-Anweisung. Es wird das gleiche Szenario wie in der else-if-Anweisung aus dem vorangegangen Beispiel vorausgesetzt.

Beispiel switch-Anweisung:
double Indikatorwert = iRSI(Symbol(),0,14,PRICE_CLOSE,0);

switch(Indikatorwert)
{
case 90:
OpenShort();
break;
case 10:
OpenLong();
break;
case 80:
CloseLong();
break;
case 20:
CloseShort();
break;
default:
Print("Es wurde keine Aktion ausgeführt");
}


Der erste Case überprüft, ob der Indikatorwert 90 entspricht und führt die zugehörige Anweisung aus, wenn dies der Fall. Anderenfalls wird der nächste Case geprüft und die Anweisung ausgeführt, wenn dieser zutrifft usw. Trifft keine der Bedingungen zu, wird der default-Case ausgeführt.

Werbung

MQL4 Rezeptsammlung für Entwickler

Eine Sammlung von Lösungsansätzen für die Erstellung von Expert Advisor und Indikator Programmen in MQL4

Dieses Buch richtet sich an MQL4 Programmierer, die bereits über Erfahrungen in der Programmierung mit MQL4 erlangt haben, jedoch bei der Erstellung von Expert Advisor Programmen oder Indikatoren immer wieder auf Probleme stoßen, die eine Lösung benötigen. Es soll für verschiedene Probleme, die bei der Programmierung mit MQL4 auftreten können, eine entsprechende Lösung bieten, ohne das der Programmierer endlos lange überlegen oder noch länger im Internet nach einer Lösung suchen muss. Dieses Buch ist keine Anleitung, um MQL4 zu erlernen und es ist auch kein Nachschlagewerk für bestimmte Begrifflichkeiten der Programmiersprache MQL4. Es ist vielmehr der tägliche Begleiter eines MQL4 Programmierers der bereits die Grundzüge der Sprache beherrscht, aber bei der Umsetzung verschiedener Ideen entsprechende Lösungsansätze benötigt.

Mehr Erfahren →

Risikohinweis / Haftungsausschluss

Die vom Betreiber zur Verfügung gestellten Inhalte auf der Internetseite tradissimo.de, in E-Mail Newslettern und Produkten geben entweder die individuellen Erfahrungen des Betreibers wieder oder beruhen auf sorgfältiger Recherche, denen Quellen Dritter zu Grunde liegen und vom Betreiber als vertrauenswürdig und zuverlässig erachtet werden. Der Betreiber übernimmt keinerlei Gewährleistung für die Aktualität, Richtigkeit oder Vollständigkeit der Inhalte. Alle vom Betreiber erhältlichen Informationen, Angaben und Produkte dienen lediglich zu Informationszwecken und sind nicht als Anlageberatung oder als Kauf- bzw. Verkaufsempfehlung bestimmter Anlageprodukte zu verstehen. Die angebotenen Produkte und Informationen können eine individuelle Beratung nicht ersetzen.

Der Nutzer der Informationen und/oder der Produkte, die vom Betreiber angeboten werden, wird ausdrücklich darauf hingewiesen, dass der Handel mit Derivaten, wie beispielsweise CFD- und FOREX, erhebliche Risiken beinhalten und als hochspekulative Geschäfte anzusehen sind, die Risiken bergen, welche über den Totalverlust des eingesetzten Kapitals hinausgehen können. Durch den Einsatz automatischer Handelssysteme entstehen zusätzliche Risiken wie beispielsweise der Ausfall der Internetverbindung, Fehler im Programmcode oder Hard- oder Softwareprobleme. Darüber hinaus sind positive Ergebnisse einer Handelsstrategie in der Vergangenheit, keine Garantie für künftige Gewinne.

Trifft der Nutzer, auf Grund der vom Betreiber angebotenen Informationen oder Produkte, eine Handelsentscheidung oder verwendet einen vom Betreiber angebotenen Handelsroboter (Expert Advisor), so handelt er stets eigenverantwortlich, auf eigene Gefahr und auf eigenes Risiko. Die Haftung für Schäden materieller oder ideeller Art, die durch die Nutzung oder Nichtnutzung der Informationen und/oder Produkte bzw. durch die Nutzung fehlerhafter und/oder unvollständiger Informationen und/oder Produkte verursacht wurden, sind grundsätzlich ausgeschlossen.