Globale und lokale Variablen in MQL4

video
play-sharp-fill

Neben unterschiedlichen Variablentypen die beispielsweise Text oder Zahlen aufnehmen können gibt es auch noch unterschiedliche Gültigkeitsbereiche für Variablen. Wir haben hier ein kleines Testprogramm mit einer Variable a, einer Variable b und einer Variable c erstellt. Und wir möchten jetzt gerne in unserer OnTick() Funktion eine Funktion aufrufen die der Variable c das Ergebnis der Addition der beiden Zahlen a und b zurück gibt. Allerdings sagt uns hier unser Metaeditor das b ein undeclared identifier, also eine unbekannte Variable ist. Der Grund dafür ist, dass wir die Definition von b hier in dieser OnTick() Funktion vorgenommen haben. Und diese Funktion die einzige Funktion ist, die weiss, dass es die Variable überhaupt gibt. Unser Kompiler meckert nicht, dass er die Variable a nicht kennt, denn a ist hier oben definiert. Würden wir a jetzt hier wegnehmen und hier in OnTick() deklarieren, dann bekommen wir auch die Fehlermeldung für Variable a ausgewiesen. Wenn ich also möchte, dass in allen Funktionen eine solche Variable erkannt werden kann, dann muss ich die Variable hier oben im globalen Bereich definieren. Globaler Bereich bedeutet bei MQL4 ausserhalb der Funktionen, am besten direkt am Anfang meines Programmes. Es reicht dabei auch, die Variablen einfach aufzuzählen ohne ihnen einen Wert zuzuweisen. Man kann sie sogar mit einem Komma voneinander getrennt aufführen. Und schon ist unser Fehler weg. Aber wie man sieht, ist unsere Addition nicht korrekt. A ist gleich 3 und b ist gleich 5. Das macht zusammen 0 sagt unser Programm. Wie kann man sich das erklären? Verändern wir doch einmal den Wert von der Variable c und schreiben hier den Wert 11 hinein. Wir kompilieren das Ganze und starten unseren Test erneut. Offensichtlich ist es nicht so, dass unser Programm glaubt dass c 11 sei. Es sagt immer noch c wäre 0. Der ursprünglich hier zugewiesene Wert spielt also für die Berechnung hier unten keine Rolle. Ändern wir unser Programm also indem wir hier in den beiden runden Klammern unserer Funktion Addiere() die beiden Werte für a und b mitgeben. Entsprechend müssen wir auch hier in den runden Klammern die beiden Werte und die Variablentypen aufführen. Wir kompilieren unser Programm nochmal uns schauen, was jetzt passiert. Und siehe da: Jetzt ist a 3, b ist 5 und zusammen kommt dabei eine 8 heraus. Das sieht doch schon besser aus, oder? Was aber würde passieren wenn wir hier oben direkt andere Werte im globalen Bereich zugewiesen hätten? Finden wir es heraus! Unser Programm lässt sich wieder anstandslos kompilieren und unser Ergebnis hat sich nicht verändert. Wer Probleme damit hat, dass sein MQL Programm auf einmal andere Ergebnisse produziert, der sollte sich vielleicht mit so einem kleinen Beispielprogrämmchen einmal die Gültigkeitsbereiche seiner Variablen verinnerlichen. Mir helfen solche kleinen Tests immer sehr gut um das Verständnis für solche Dinge zu vertiefen!