MQL5 TUTORIAL GRUNDLAGEN – 73 SIMPLER SPREAD FILTER

video

In diesem Video wollen wir uns einmal anschauen, wie man für Währungspaare, bei denen sich der Spread ändert, einen Filter bauen kann, der das Trading erlaubt oder nicht erlaubt. Um das zu tun, klicken Sie im Metatrader bitte hier oben auf dieses kleine Symbol 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 einmal den Namen SimplerSpreadFilter, klicke auf Weiter, Weiter und Fertigstellen. Jetzt kann alles oberhalb der OnTick Funktion gelöscht werden. Und auch die zwei Kommentarzeilen werden entfernt. Wir starten mit einem include Statement. Damit importieren wir uns hier die Datei Tade.mqh. Und die erlaubt es uns, eine Instanz von der Klasse CTrade zu bilden. Wir haben hier den Namen trade vergeben und wir werden diese Instanz gleich nutzen, um Positionen zu eröffnen. Dazu ermitteln wir innerhalb der OnTick Funktion den Ask Preis und den Bid Preis. Das übernimmt die Funktion SymbolInfoDouble für das aktuelle Währungspaar auf dem Chart. Wir nutzen entweder SYMBOL_ASK oder SYMBOL_BID, je nachdem, ob wir den Ask oder den Bid Preis berechnen. Und mit NormalizeDouble und _Digits stellen wir sicher, dass für das jeweilige Währungspaar auch die richtige Anzahl von Nachkommastellen ermittelt wird. Das kann sich nämlich je nach Währungspaar unterscheiden. Im Anschluss benötigen wir eine Variable für unser Signal. Die ist vom Typ string, damit sie Textketten aufnehmen kann. Wir weisen hier aber noch keinen Wert zu, denn den möchten wir gleich ermitteln. Dazu erstellen wir uns zunächst mit der Funktion MqlRates ein Array, welches die Preisdaten aufnehmen kann. Mittels ArraySetAsSeries sortieren wir dann das Array von der aktuellen Kerze an abwärts. Jetzt nutzen wir CopyRates, um für das aktuelle Währungspaar und die aktuell ausgewählte Zeiteinheit von der Kerze null für drei Kerzen die Preise in unser Preis Array zu kopieren. Und damit wir etwas haben, was uns den aktuellen Spread anzeigt, nutzen wir die Funktion SymbolInfoIneger für das aktuelle Währungspaar auf dem Chart. Und mit diesem Parameter, SYMBOL_SPREAD, alles in Großbuchstaben, ermitteln wir jetzt den aktuellen Spread Wert und weisen ihn der Variable CurrentSpread zu. Jetzt hätte ich gerne noch eine Variable für den Spread Filter. Auch die ist vom Typ string und wird Textketten aufnehmen. Eigentlich könnten wir das Ganze auch so gestalten, dass der Benutzer eingeben darf, wieviel Spread maximal erlaubt ist. Darum erstelle ich hier im Kopfbereich eine sogenannte Input Variable. Die ermöglicht es, im laufenden Betrieb einen Maximalwert anzugeben. Wir vergeben zunächst erstmal den Startwert 15. Aber später kann der Benutzer diesen Wert auch anpassen. Und dann können wir hier unten prüfen, ob der aktuelle Spread Wert den maximal erlaubten Wert übersteigt. Und wenn das der Fall ist, dann setzen wir hier unseren Spread Filter auf: Trading ist nicht erlaubt. Im anderen Fall, wenn der aktuelle Spread Wert kleiner oder gleich ist, als der maximal erlaubte Wert, dann bekommt unser Spread Filter hier den Wert: Trading erlaubt, zugewiesen. Damit wir tatsächlich Positionen sehen, erstellen wir uns hier noch eine einfache Einstiegsregel. Wenn also der Schlusskurs von Kerze eins größer ist, als der Schlusskurs von Kerze zwei, dann weisen wir hier den Begriff buy unserer Signal Variable zu. Andernfalls, wenn der Schlusskurs von Kerze eins kleiner ist, als der Schlusskurs von Kerze zwei, dann möchten wir verkaufen. Also weisen wir den Begriff sell unserem Signal zu. Und unser Filter muss auf Trading erlaubt stehen, damit wir überhaupt eine Positionseröffnung in Erwägung ziehen. Denn nur, wenn unser Signal auf Verkaufen steht und die Funktion PositionsTotal kleiner ist als eins, das bedeutet, wir hätten ein Verkaufssignal und geöffneten Positionen, dann möchten wir einen Sell Trade für zehn Mikrolot eröffnen, wenn unser Spread Filter auf Trading erlaubt steht. Im anderen Fall, wenn wir ein Kaufsignal haben und ebenfalls keine geöffnete Position, dann möchten wir gerne einen Buy Trade für zehn Mikrolot eröffnen. Aber alles das hier wird nur ausgeführt, wenn unser Filter das erlaubt. Damit wir das Ganze auch nachverfolgen können, erstellen wir uns hier mit dem Comment Befehl noch eine Chart Ausgabe. Die wird uns den aktuellen Spread, den maximal erlaubten Spread und das Ergebnis von unserem Spread Filter auf dem Chart anzeigen. Das war es soweit auch. Falls Sie nicht verstehen, was diese Code Zeilen 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. Das hier war übrigens wieder ein Vorschlag von einem Premiumkurs Mitglied. Und wenn Sie bereits Mitglied im Premiumkurs sind und eine Idee für so ein Video hier haben, dann schreiben Sie mir einfach ein E-Mail. Für den Moment klicken wir hier auf Kompilieren. Ich habe hier was falsch gemacht. Und zwar eine Klammer zu viel. Die müssen wir noch entfernen und wiederholen das nochmal. Dann funktioniert das bei mir hier ohne Fehler. Und wenn das bei Ihnen auch so ist, dann können Sie jetzt hier oben auf dieses kleine Symbol klicken oder die F4 Taste drücken, um in den Metatrader zurückzukehren. Und im Metatrader klicken wir auf Ansicht, Strategietester oder drücken die Tastenkombination Ctrl+R. Bitte wählen Sie hier die neu erstellte Datei SimplerSpreadFilter.ex5 aus. Markieren Sie die Option für den visuellen Modus und starten Sie Ihren Test. Hier sehen wir, dass unser Spread Filter schon tätig ist. Er zeigt uns an, ob Trading erlaubt oder nicht erlaubt ist, je nachdem, ob der aktuelle Spread den erlaubten Spread übersteigt. Unsere erste Position wurde auch schon eröffnet. Und Sie haben in diesem kurzen Video gelernt, wie Sie für den von Ihnen gewählten Spread Wert einen individuellen Filter bauen können, der sich über die Eingabe Funktion von Nutzer verändern lässt. Und Sie haben das selbst programmiert, mit diesen paar Zeilen hier in MQL5.