MQL5 TUTORIAL GRUNDLAGEN – 52 SIMPLE EXTERNE KERZENANZAHL EA

video
play-sharp-fill

In diesem Video wollen wir uns einmal anschauen, wie man für einen gleitenden Durchschnitt, wie diesen hier, einen Expert Advisor programmieren kann, bei dem man die Anzahl der Kerzen ohne Veränderung im Quellcode über eine Benutzervariable verändern kann. Hier werden auch Einstiegssignale produziert. Dieser Expert Advisor macht das gerade aufgrund von 50 Kerzen für einen einfachen gleitenden Durchschnitt. Schauen wir uns also einmal an, wie man so etwas in MQL5 programmieren kann. Um das zu tun klicken Sie im Metatrader bitte auf dieses kleine Symbol hier oben oder drücken Sie die F4-Taste. Das ruft dann hier den Metaeditor auf und hier klicken wir auf Datei, neue Datei, Expert Advisor aus Vorlage, weiter. Ich vergebe hier mal den Namen SimpleExterneKerzenanzahl. Hänge noch ein EA dran. Klicke auf weiter, weiter und fertigstellen. Alles oberhalb dieser OnTick-Funktion hier kann gelöscht werden und wir entfernen auch die zwei Kommentarzeilen. Zunächst starten wir mit einem Include-Befehl. Damit importieren wir vereinfachte Handelsfunktionen aus der Datei trade.mqh. Die ist Bestandteil von MQL5. Im nächsten Schritt erstellen wir uns eine Instanz von der Klasse CTrade. Die brauchen wir später, um damit Positionen zu eröffnen und danach erstellen wir eine externe Variable für die Anzahl der Kerzen. Die bekommt hier vorne eine Ergänzung. Einen sogenannten Modifier-Input. Das bedeutet so viel wie externe Benutzereingabe. Die Variable soll Kerzenanzahl heißen und der Initialwert ist 1. Innerhalb der OnTick-Funktion müssen wir uns zunächst den Ask- und den Bid-Preis besorgen. Das geht mit der Funktion SymbolInfoDouble. Für das aktuelle Währungspaar auf dem Chart. Wir nutzen SYMBOL_ASK oder SYMBOL_BID um uns jeweils den Ask- oder den Bid-Preis zu holen. Und mit NormalizeDouble und _Digits sorgen wir dafür, dass auch je nach Währungspaar die richtige Anzahl von Nachkommastellen berechnet wird. Mit MqlRates erstellen wir uns jetzt ein Array für die Preisdaten. Das bekommt den Namen PriceInfo. Im nächsten Schritt nutzen wir ArraySetAsSeries um unser neu erstelltes Array von der aktuellen Kerze an abwärts zu sortieren. Und danach nutzen wir die Funktion CopyRates für das aktuelle Währungspaar auf dem Chart und das aktuell ausgewählte Zeitfenster, um uns von Kerze 0 bis Kerze 3 die Daten zu besorgen und in unserem PriceInfo-Array zu speichern. Das hier ist eigentlich die alte Darstellung. Man kann das durch _Symbol und _Period ersetzen. Denn wenn man das einmal markiert und die F1-Taste drückt, dann lernen wir, man kann das untereinander austauschen. Jetzt möchte ich gern noch eine Variable für unser Signal. Die ist vom Typ string, damit sie Textketten aufnehmen kann. Wir weisen hier aber zunächst noch keinen Wert zu, denn den möchten wir noch berechnen. Für unseren einfach gleitenden Durchschnitt brauchen wir noch ein Array. Das nenne wir hier myMovingAverageArray. Und um den Moving-Average, also den gleitenden Durchschnitt zu berechnen, gibt es die interne Funktion iMA. Die ist Bestandteil von MQL5 und benötigt hier eine Reihe von Parametern für die Berechnung. Der erste Parameter ist für das aktuelle Währungspaar. Der zweite Parameter steht für die aktuell ermittelte Zeiteinheit auf dem Chart. Hier ist die variable für die Kerzenanzahl, die wir selbst bestimmen können. Dieser Parameter hier könnte ein Verschiebung nach rechts oder links bewirken. Das brauchen wir in diesem Fall nicht, darum steht der Parameter auf 0. MODE_SMA steht für SimpleMovingAverage, also einfachen gleitenden Durchschnitt. MODE_EMA währe beispielsweise ein einfacher exponentieller Durchschnitt. Und der letzte Parameter hier PRICE_CLOSE steht für die Berechnung anhand der Schlusskurse. Um unser Array mit Daten zu füllen, nutzen wir CopyBuffer. Damit wird anhand der movingAverage-Definition, die wir oben getroffen haben, für Buffer 0, also für diese rote Signallinie vom gleitenden Durchschnitt, von der aktuellen Kerze an, für drei Kerzen, jeder Wert pro Kerze in unserem MovingAverageArray gespeichert. Und damit können wir jetzt die Signale ermitteln. Zunächst möchten wir gerne wissen, ob der Schlusskurs für Kerze 1 aus unserem PriceInfo-Array größer ist als der Wert von unserem MovingAverageArray für Kerze 1. In dem Fall liegt der Preis über der Linie. Und als nächste Option möchten wir gerne wissen, ob das vorher noch anders herum war. Falls also der Schlusskurs für Kerze 2 aus unserem PriceInfo-Array noch kleiner war, als der Wert für die gleiche Kerze, in unserem MovingAverageArray, dann möchten wir gerne kaufen, also weißen wir den Begriff Kaufen unsere Signalvariable zu. Natürlich gibt es diese Überkreuzung auch anders herum. Wenn also der Preis jetzt, für die Kerze 1, unter dem gleitenden Durchschnitt liegt und vorher noch oberhalb vom gleitenden Durchschnitt war, dann möchten wir gerne verkaufen, also setzen wir unser Signal auf den Wert verkaufen. Und wenn unser Signal den Wert verkaufen hat und die Funktion PositionsTotal eine Rückgabewert kleiner 1 liefert, dann bedeutet das, wir haben keine offenen Positionen und ein Verkauf-Signal. Und in dem Fall nutzen wir trade.Sell um 10 Microlot zu verkaufen. Steht unser Signal aber auf kaufen und wir haben ebenfalls keine geöffneten Positionen, dann nutzen wir trade.Buy um 10 Microlot zu kaufen. Zum Schluss hätten wir gerne noch eine Chartausgabe. Das übernimmt der Comment-Befehl. Der wird uns auf dem Chart den Text „Das Signal ist“ gefolgt von dem ermittelten Signal ausgeben. Und in einer neuen Zeile den Text „Kerzenanzahl“ gefolgt von der, von uns eingestellten Anzahl für die Kerzen. Das war es so weit. Wenn Sie nicht verstehen was diese Codezeilen hier bewirken sollen oder wenn Ihnen das alles zu schnell ging, dann möchten Sie sich vielleicht zunächst die anderen Videos aus dieser Grundlagenserie noch einmal anschauen oder vielleicht ist auch der Premiumkurs auf unserer Webseite interessant für Sie. Für den Moment klicken wir hier oben auf kompilieren oder drücken die F7-Taste auf der Tastatur. In meinem Fall hat das hier ohne Fehler funktioniert und wenn das bei Ihnen auch der Fall ist, dann können Sie jetzt hier oben auf dieses kleine Symbol hier klicken oder die F4-Taste drücken, um in den Metatrader zurückzukehren. Und im Metatrader klicken wir jetzt auf Ansicht, Strategietester oder drücken die Tastenkombination Steuerung und R. Bitte wählen Sie hier die neu erstellte Datei SimpleExterneKerzenanzahlEA.ex5 aus. Markieren Sie hier die Option für den visuellen Modus und starten Sie Ihren Test. Hier läuft unser Expert Advisor auch schon los. Wir sehen hier in den Einstellungen für den SimpleMovingAverage dass anhand von 50 Kerzen berechnet wird. Das liegt daran, dass ich den Wert schon geändert habe. Stoppen wir den Test hier einmal. Klicken auf Eingaben und nehmen beispielsweise 35 Kerzen. Dann wird nach einem erneuten Klick auf Test starten, der Wert jetzt für 35 Kerzen berechnet. Unser Expert Advisor funktioniert also wie gewünscht. Und Sie haben in diesem kurzen Video gelernt, wie Sie für einen einfachen gleitenden Durchschnitt, eine externe Variable für die gewünscht Anzahl der Kerzen für die Berechnung erstellen können. Und Sie haben das selbst programmiert, mit diesen paar Zeilen hier in MQL5.