MQL5 TUTORIAL GRUNDLAGEN – 91 SIMPLES CHANNEL OBJEKT

video
play-sharp-fill

 

In diesem Video wollen wir uns einmal anschauen, wie man ein Channel-Objekt darstellen kann. Dieser Channel zeigt hier die niedrigste und die höchste Kerze. Also lassen Sie uns einmal schauen, 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 einmal den Namen SimplesChannelObjekt, klicke auf weiter, weiter und fertigstellen. Jetzt kann alles oberhalb dieser OnTick-Funktion hier gelöscht werden und auch die zwei Kommentarzeilen können weg.

Wir starten mit einer Funktion die uns die Anzahl der Kerzen auf dem Chart zurückliefern wird.

Das geht über ChartGetInteger. Der erste Parameter hier steht für die Chart-ID. Parameter Nummer 2, CHART_FIRST_VISIBLE_BAR, liefert uns die Nummer der ersten sichtbaren Balken auf dem Chart, ich denke hiermit sind Kerzen gemeint. Der letzte Parameter steht für das Unterfenster.

In unserem Fall verwenden wir Unterfenster 0. Das bedeutet, dass ist das Fenster mit den Kerzen.

Wenn Sie hin und wieder mit Oszillatoren arbeiten, dann wissen Sie, dass diese Oszillatoren in einem weiteren Fenster dargestellt werden. Das hat dann eine andere ID. Jetzt erstellen wir uns eine Variable für die Nummer der niedrigsten Kerze und ein dazu passendes Array mit dem Namen Low, dass die Preise für die niedrigsten Kerzen aufnehmen kann.

Das Ganze wiederholen wir noch einmal für die Variable der höchsten Kerze und das dazu passende Array. Im Anschluss nutzen wir ArraySetAsSeries, um unser Array von der aktuellen Kerze an abwärts zu sortieren. Auch das wiederholen wir nochmal für das Array mit den Höchstpreisen.

Und nun können wir unser Array mit Daten füllen. Das übernimmt die Funktion die CopyLow für das aktuelle Währungspaar auf dem Chart und für die auf dem Chart ausgewählte Zeiteinheit. Wir starten von der aktuellen Kerze 0. Wir hätten gerne die Preise für alle Kerzen auf dem Chart und möchten diese in unserem Array Low speichern.

Wenn man CopyLow einmal markiert und die F1-Taste drückt, dann sieht man, dass wir hier die Minimalpreise der Bars, also der Kerzen für das angegeben Paar bekommen. Das Ganze gibt es auch für die Höchstpreise der Kerzen. Die entsprechende Funktion heißt CopyHigh.

Auch die nutzen wir für das aktuelle Währungspaar auf dem Chart und die auf dem Chart angegeben Zeiteinheit, von der aktuellen Kerze 0, für alle Kerzen auf dem Chart, um die Höchstpreise in unser Array mit dem Namen High zu kopieren. Und jetzt ermitteln wir die höchste aller Kerzen indem wir diese Funktion hier nutzen.

Die heißt ArrayMaximum. Die liefert uns das maximale Element in unserem Array. Das Ganze gibt’s auch noch mal als ArrayMinimum für die niedrigste Kerze. Und diese Parameter hier bedeuten: Bitte such im Array mit dem Namen aus Parameter 1 von der aktuellen Kerze 0 für alle Kerzen auf dem Chart das Maximum bzw. hier das Minimum.

Um unser Kanalobjekt zu zeichnen benötigen wir jetzt die Preisinformation die wir über MqlRates bekommen.

MqlRates bewahrt diverse Informationen zu den Kerzenpreisen auf. Unter anderem auch die Zeitpunkte und die brauchen wir, um das Objekt zu zeichnen. Auch dieses Array wird mit ArraySetAsSeries von der aktuellen Kerze an abwärts sortiert. Und dann befüllen wir es mit der Hilfe der Funktion CopyRates mit Daten für das aktuelle Währungspaar auf dem Chart und die dort ausgewählte Zeiteinheit. Möchten wir startend mit Kerze 0 für alle Kerzen auf dem Chart die Daten in unser PriceInformation-Array kopieren.

Damit haben wir soweit alles was wir brauchen, um das Objekt zu zeichnen, aber bevor wir das tun, möchten wir erst eventuell vorhandene alte Objekte löschen. Das übernimmt die Funktion ObjectDelete. Für das aktuelle Währungspaar werden alle alten Objekte mit dem SimpleChannelObject entfernt.

Beim ersten Aufruf werden wir so ein Objekt nicht haben, aber bei jeder weiteren Aktualisierung soll das alte Objekt gelöscht werden bevor das Neue gezeichnet wird. Und das tun wir mit Hilfe von ObjectCreate. Damit können wir ein Objekt mit Namen, Typ und ursprünglichen Koordinaten erzeugen.

Im Klartext bedeutet das, es gibt diverse unterschiedliche Objekttypen, die man auf dem Chart darstellen lassen kann.

Im ersten Parameter legen wir fest, für welches Währungspaar das passieren soll. Parameter Nummer 2 steht für den Namen des Objektes. In unserem Fall SimpleChannelObjekt. Parameter Nummer 3 steht für den Objekttypen. Wir nutzen hier OBJ_CHANNEL. Wenn man das mit F1 markiert, dann sieht man, dass es hier noch diverse andere Objekttypen gibt.

Zum Beispiel auch unterschiedliche Kanäle. Wir nutzen dieses hier für einen abstandsgleichen Kanal und legen in Parameter 4 fest, dass wir das gerne für das Chart mit den Kerzen machen möchten. Jetzt kommen die eigentlichen Koordinaten. Und zwar legen wir hier zunächst den Zeitpunkt fest.

Wir möchten von dem Zeitpunkt zu dem die niedrigste Kerze gezeichnet wurde, eine Linie zeichnen. Das wäre zum Beispiel diese Kerze hier. Und zwar in unserem Fall für den niedrigsten Preis, dieser niedrigsten Kerze. Die Linie soll bis zur aktuellen Kerze gezeichnet werden. Das ist Kerze 0. Und hier nutzen wir wieder den gleichen Parameter wie hier oben.

Das sorgt dafür, dass wir eine waagerechte Linie erhalten. Die zweite Linie unseres Kanals soll für die höchste Kerze gezeichnet werden. Und zwar für den Zeitpunkt an dem die höchste Kerze erschienen ist. Das wäre in diesem Fall diese Kerze hier für den höchsten Preis dieser Kerze. Das wars soweit für unser Objekt. Jetzt legen wir noch einige Eigenschaften fest. Mit Hilfe von ObjectSetInteger möchten wir gerne für die Chart-ID 0 und das Objekt mit dem Namen SimpleChannelObject die Eigenschaft OBJPROP_COLOR ändern.

Hier kann man sich eine Farbe wie Rot oder Gelb aussuchen. Als nächste Eigenschaft ändern wir den Objektstil. Das wäre die OBJPROP_STYLE-Eigenschaft. Ich hab hier solide für eine durchgezogene Linie gewählt. Mit Hilfe von OBJPROP_WIDTH legen wir die Stärke der Linie fest. In meinem Fall 1 für einen Pixel und als letzte Eigenschaft möchte ich gerne noch eine Vorschaufunktion aktivieren. Die wird dafür sorgen, dass die Linie durch die aktuelle Kerze und in die Zukunft gezeichnet werden kann.

Das machen wir indem die Eigenschaft OBJPROP_RAY_RIGHT auf true setzen. Das wars im großen Ganzen. Wenn Ihnen das hier zu schnell ging oder wenn Sie keine Ahnung haben, was diese Codezeilen hier bewirken sollen, dann möchten Sie sich vielleicht zunächst die anderen Videos aus der Grundlageserie noch einmal anschauen.

Vielleicht ist aber auch unser Premiumkurs auf unserer Webseite interessant für Sie. Für den Moment klicken wir hier mal auf Ansicht, Werkzeugleiste und dann auf diesen Kompilieren-Button oder drücken die F7-Taste. In meinem Fall hat das ohne Fehler funktioniert und wenn das bei Ihne 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 Steuerung und R.

Bitte wählen Sie hier die neu erstellte Datei SimplesChannelObjekt.ex5 aus, markieren Sie die Option für den visuellen Modus und starten Sie Ihren Test. Hier läuft unser Kanalobjekt auch schon los. Wir sehen, es werden gelbe Linie für die höchste und die niedrigste Kerze gezeichnet.

Wir können mal in das Chart hineinzoomen, dann sehen wir, dass auch die Darstellung entsprechend angepasst wird, wenn wir mehr Kerzen auf dem Chart haben. Unser Expert Advisor funktioniert also wie gewünscht.

Und Sie haben in diesem kurzen Video gelernt, wie Sie ein Channel-Objekt in MQL5 programmieren können und Sie haben das selbst getan, mit diesen paar Zeilen hier in MQL5.