Diesmal möchten wir uns einen Expert Advisor für eine sogenannte Trading Range erstellen.
Eine Trading Range ist der Bereich in dem sich unser Kurs bewegt.
In diesem Fall haben wir einen Wert von 1,82.
Aber hier haben wir plötzlich nur noch sehr kleine Kerzen und wir sehen jetzt auch schon wie unsere Spanne hier herunter geht.
Diese Linie hier bewegt sich am Hochpunkt der höchsten der letzten hundert Kerzen und die untere Linie wird unterhalb der niedrigsten Kerze der letzten hundert Kerzen gezeichnet und mit diesem messbaren Wert hier oben könnte man jetzt beispielsweise ein Einstiegssignal für volatile Zeiten entwickeln.
Denn wer sich aus einem Seitwärtsmarkt heraushalten möchte der könnte beispielsweise warten, bis die Trading Range hier oberhalb von 1 liegt.
Ich zoome mal ein bisschen näher ran dann kann man das hier noch deutlicher erkennen und beschleunige das Ganze.
Dann schauen wir uns mal an was passiert wenn dieser Wert hier plötzlich oberhalb von 1 liegt.
So und das ist jetzt der Fall und man sieht hier deutlich den Ausbruch anhand dieser ziemlich monströsen Kerze hier.
Wie können wir uns jetzt also einen Expert Advisor mit so einer Trading Range erstellen?
Dazu klicken wir im Metatrader auf diesen kleinen Button hier oder drücken die F4 Taste, das ruft hier den Metaeditor auf und hier haben wir uns eine Datei, FortgeschritteneTradingRange.mq5, erstellt.
Die verfügt über eine einzige Funktion und das ist die Funktion void OnTick, die immer aufgerufen wird wenn es eine Preisänderung auf dem Chart gibt.
Zunächst benötigen wir eine Variable für unsere Trading Range.
Die ist vom Typ double und bekommt auch den Namen TradingRange und die wird zunächst einmal mit dem Wert 0 belegt denn wir werden sie später weiter unten berechnen.
Dann benötigen wir noch Variablen für die höchste und die niedrigste Kerze.
Die bekommen auch den entsprechenden Namen und sind vom Wert Integer weil es sich dabei um eine Ganzzahl, nämlich um die Nummer der entsprechenden Kerze hier auf dem Chart handelt.
Jetzt brauchen wir noch 2 Arrays für die höchste und niedrigste Kerze.
Die bekommen den Namen hoch und tief und mit ArraySetAsSeries wird das Array hoch und auch das Array tief absteigend von der aktuellen Kerze sortiert.
Denn jetzt wollen wir unser hoch Array mit der Funktion CopyHigh für das aktuelle Chart und die auf dem Chart eingestellte Zeiteinheit von der Kerze null für einhundert Kerzen mit den Preisdaten der Hochs für die letzten einhundert Kerzen füllen.
Ein Hoch wäre in diesem Fall bei der kleinen Kerze hier der obere Punkt hier am Docht.
Das hier wär das tief, das holen für uns jetzt mit CopyLow ebenfalls für das aktuelle Chart und die auf dem Chart ausgewählte Zeiteinheit von der aktuellen Kerze null für einhundert Kerzen und die Daten landen in unserem Array mit dem Namen Tief.
Jetzt können wir anfangen die höchste Kerze zu berechnen.
Wir weisen der Variable höchste Kerze mit dem Befehl ArrayMaximum die Nummer der höchsten Kerze aus unserem Hoch Array zu und zwar aus dem Bereich von der aktuellen Kerze rückwirkend für einhundert Kerzen.
Das Gleiche erledigt die Funktion ArrayMinimum, die sucht aus unserem Array tief ebenfalls von der aktuellen Kerze, innerhalb der letzten einhundert Kerzen, nach der niedrigsten Kerze.
Jetzt brauchen wir noch ein Array für die Preisdaten auf dem Chart.
Das erstellen wir mit Hilfe der Funktion MqlRates und unser Array bekommt den Namen Preisinformation, auch das wird wieder von der aktuellen Kerze an abwärts sortiert, indem wir die Funktion ArraySetAsSeries benutzen.
Danach kopieren wir die Preisdaten in unser Array – mit der Funktion CopyRates – für das aktuelle Chart und die aktuell auf dem Chart eingestellte Zeiteinheit.
Wir starten wieder bei Kerze null, also bei der aktuellen Kerze.
Und mit diesem Ausdruck hier können wir uns die Preisdaten für alle Kerzen auf dem Chart holen und alle diese Daten landen jetzt in unserem Array mit dem Namen Preisinformation, welches wir hier oben definiert haben.
Um die obere Linie zu zeichnen nutzen wir ObjectCreate.
Auch hier nutzen wir wieder das aktuelle Chart.
Unsere Linie wird den Namen Linie eins bekommen.
Mit OBJ_HLINE erstellen wir uns eine horizontale Linie.
Wenn man hier mal F1 drückt dann sieht man dass es noch eine ganze Menge andere Objekte gibt die man in ähnlicher Form erstellen könnte.
Der nächste Parameter hier gibt das Fenster an in dem wir unsere Linie darstellen möchten.
Manche Indikatoren zeigen ein separates Fenster unterhalb des Charts an.
Wir möchten hier aber das Hauptfenster benutzen.
Der nächste Parameter wäre für das Datum.
Auch hier können wir eine 0 nehmen und dieser Ausdruck hier besorgt uns von der höchsten Kerze, aus unserem Array mit dem Namen Preisinformation, den höchsten Wert.
Mit ObjectSetInteger stellen wir hier für das aktuelle Chart und unser Objekt mit dem Namen Linie1 mit OBJPROP_COLOR die Farbe Magenta ein.
Ähnlich wird die Breite der Linie gesetzt.
Auch dafür nutzen wir ObjectSetInteger für das aktuelle Chart und die Linie1.
Und hier benutzen wir die Konstante OBJPROP_WIDTH.
Das steht für die Breite.
Solche Konstanten hier kann man sich ebenfalls in der Hilfe anzeigen lassen.
Hier stehts auch OBJPROP_WIDTH, Weite der Linie, ein Integer Wert.
Unser Integer Wert ist 3, das macht die Linie hier ein bisschen dicker.
Jetzt müssen wir natürlich noch die Objektlinie bewegen.
Das funktioniert mit ObjectMove.
Auch hier wieder für das aktuelle Chart und das Objekt mit dem Namen Linie1.
Und die restlichen Parameter hier sind die gleichen wie hier oben als wir das Objekt erstellt haben und damit ist unsere obere Linie fertig.
Die untere Linie sieht ähnlich aus.
Der einzige Unterschied sind der Name, der jetzt Linie2 heisst und der Ausdruck hier und hier unten.
Denn für die untere Linie brauchen wir natürlich den niedrigsten Punkt von der niedrigsten der letzten einhundert Kerzen und auch diesen Wert holen wir uns aus unserem Array mit dem Namen Preisinformation.
So jetzt berechnen wir unsere Trading Range noch.
Unsere Trading Range wird errechnet indem wir vom höchsten Punkt der höchsten Kerze im Array Preisinformation den niedrigsten Punkt der niedrigsten Kerze aus dem gleichen Array abziehen.
Und im letzten Schritt kommt die Chart Ausgabe.
Dazu nutzen wir den Comment Befehl, der zeigt uns an: Der Wert für die Trading Range ist, gefolgt von dem berechneten Wert.
So, wenn alles fertig ist, können wir hier auf Kompilieren klicken und da das hier ohne Fehler funktioniert hat, können wir hier oben mit diesem kleinen Button oder der F4-Taste den Metatrader aufrufen.
Und im Metatrader klicken wir auf Ansicht – Strategietester und hier wählen wir jetzt die Datei FortgeschritteneTradingRange.ex5 aus und starten unseren Test.
Und so sieht unser Expert Advisor bei der Arbeit aus.
Im Moment haben wir eine grosse Trading Range.
Beschleunigen wir das Ganze mal ein wenig und zoomen in unser Chart, dann kann man ganz gut erkennen was für unterschiedliche Bandbreiten in so einem Chart doch vorkommen.
Ok, das wars, in diesem Video haben Sie gelernt wie Sie eine dynamische Trading Range mit optischen Hilfslinien in MQL5 programmieren können und Sie haben das selbst programmiert mit diesen paar Zeilen hier in MQL5.