
MQL5-Assistenten-Techniken, die Sie kennen sollten (Teil 42): ADX-Oszillator
Einführung
Der ADX-Indikator ist ein Oszillator, der die Stärke eines bestimmten Markttrends für das Wertpapier, dem er zugeordnet ist, messen soll. Dieser Artikel untersucht daher, wie auch die vorangegangenen, die verschiedenen Muster, die dieser Indikator in einer nutzerdefinierten Signalklassendatei für assistentengestützte Expert Advisors aufweist. Wie in den vorangegangenen Artikeln über den RSI, die Bollinger-Bänder und den RSI werden wir jeweils ein Muster prüfen und dann mit einem Test abschließen, der alle Muster umfasst, um ein Gefühl dafür zu bekommen, welches Muster die höchste Gewichtung hat.
Bevor wir damit beginnen, haben wir jedoch die Betrachtung der parabolischen SAR noch nicht abgeschlossen, und so beginnen wir mit den abschließenden Kapiteln dazu.
SAR und Volumen-Divergenz
Der Parabolic SAR wird in erster Linie dazu verwendet, potenzielle Umkehrpunkte zu identifizieren und Stop-Loss-Positionen in trendstarken Märkten nachzuziehen. Sie sind „potenzielle Umkehrpunkte“, denn wenn der Kurs sie durchbricht, würde der Indikator umkehren, indem er seine Punkte am entgegengesetzten Ende der Hoch-Tief-Spanne markiert, sodass die erzeugten Punkte auf einem Kurs-Chart potenzielle Umkehrniveaus im Kursgeschehen darstellen. Diese Punkte, die als Punkte markiert sind, folgen dem Kurs entweder (in einem Aufwärtstrend) unter oder (in einem Abwärtstrend) über ihm, sodass Händler nach diesen Umkehrungen Ausschau halten können.
Von einer Volumendivergenz spricht man, wenn sich Preis und Volumen in entgegengesetzte Richtungen bewegen. Für Devisenhändler sind „Volumen“-Daten kein praktisches Konzept, da sie nicht über mehrere Broker und Plattformen verteilt sind. Eine Kompromisslösung hierfür ist die Preisspanne oder die Volatilität. Daher könnte eine Kursausweitung in eine beliebige Richtung, die mit einer sinkenden Volatilität einhergeht, als Signalindikator in Form einer Fortsetzung dienen.
Wenn z.B. der Parabolic SAR von unten nach oben umschlägt (was ein Verkaufssignal anzeigt) und dies von einer fallenden Kursspanne begleitet wird, kann dies als schwaches Verkaufssignal und eher als Vorbote für eine Fortsetzung des vorherigen Long-Trends gewertet werden. Erreicht der Kurs den oberen SAR-Punkt (oberhalb des Kurses in einem Abwärtstrend) und wird eine Volatilitätsdivergenz beobachtet (abnehmende Kurs-Spanne der Balken), signalisiert dies eine mögliche Verstärkung des Abwärtstrends oder den Beginn einer Fortsetzung des Abwärtstrends. Wir kodieren dieses Muster wie folgt:
//+------------------------------------------------------------------+ //| Check for Pattern 7. | //+------------------------------------------------------------------+ bool CSignalSAR::IsPattern_7(ENUM_POSITION_TYPE T) { m_sar.Refresh(-1); m_sar_alt.Refresh(-1); if(T == POSITION_TYPE_BUY && Base(StartIndex() + 1) < Low(StartIndex() + 1) && Base(StartIndex()) > High(StartIndex())) { return(Range(StartIndex()) < Range(StartIndex() + 1) && Range(StartIndex() + 1) < Range(StartIndex() + 2)); } else if(T == POSITION_TYPE_SELL && Base(StartIndex() + 1) > High(StartIndex() + 1) && Base(StartIndex()) < Low(StartIndex())) { return(Range(StartIndex()) < Range(StartIndex() + 1) && Range(StartIndex() + 1) < Range(StartIndex() + 2)); } return(false); }
Bemerkenswert an unserer obigen Quelle ist, dass wir uns jetzt auf den größeren vorherigen Trend konzentrieren und das Signal nicht auf die gleiche einfache Art und Weise verwenden, wie wir es bei Mustern wie dem allerersten Muster, 0, getan haben. Es handelt sich also um ein Gegentrendsignal, da wir nach Fortsetzungsmustern bei einer schwachen Umkehrung suchen. Dieser „schwache“ Umschwung wird durch das Absinken der Preisspanne über 3 Balken bestätigt. Diese Länge von 3 ist einstellbar, aber wir werden uns zu Testzwecken an diese Länge halten.
Umgekehrt sollte ein Kurs, der bei steigender Volatilität eine der beiden SAR-Punktschwellen erreicht, eine Bestätigung des Umschwungs im SAR signalisieren. Dieses Signal, das ebenfalls auf der These der Volumendivergenz beruht, wäre im Wesentlichen wie das Muster 0, das wir in diesem früheren Artikel über SAR behandelt haben, plus eine Überprüfung auf eine zunehmende Preisspanne. Dieses spezielle Muster ist nicht kodiert oder getestet, aber wie immer ist der Leser eingeladen, es zu untersuchen.
Darüber hinaus können Händler bei diesem Muster die Volumendivergenz neben dem Parabolic SAR nutzen, um strategische Stop-Loss-Anpassungen vorzunehmen. Wenn wir zu unserem oben erwähnten ersten Volumen-Divergenz-Setup zurückkehren, bei dem wir nach schwachen Umkehrungen suchten, die auf eine starke Fortsetzung hindeuten, dann deuten diese Signale auf eine Pause in einem Trend hin und können wichtige Unterstützungs- oder Widerstandsniveaus anzeigen. Indem sie dank des schwachen SAR-Flips und der sinkenden Volatilität identifiziert werden, können Händler ihre Stop-Loss-Zonen für ihre offenen Positionen, die dem vorherrschenden Trend folgen, so platzieren oder verschieben, dass sie knapp über diesen Zonen liegen, wenn die Position short ist, oder knapp darunter, wenn die Position long ist.
Der Parabolic SAR kann in schwankenden oder unruhigen Märkten viele Fehlsignale erzeugen, weshalb die Prüfung der Volumendivergenz auf dem Papier ein Segen sein kann. Vor allem bei zunehmender Volatilität kann es helfen, einen vorzeitigen Einstieg in den Markt zu vermeiden, da die steigende Volatilität durch das Durchstoßen der SAR-Marken oft ein deutliches Momentum für einen sich entwickelnden Trend anzeigt. Und wenn dies nicht ausreicht, kann es mit anderen Indikatoren kombiniert werden.
Diese Kombinationen könnten mit Oszillatorindikatoren wie dem RSI besser geeignet sein, und da wir nur die erste Implementierung der SAR-Volumendivergenz kodiert haben, die eher eine Fortsetzung als eine Umkehr bestätigt, muss der Leser darauf vorbereitet sein, diese zusätzlichen Indikatorprüfungen bei einer Umkehr zu kodieren. Das Testen mit Muster 7 für das Devisenpaar EUR USD über das Jahr 2022 auf dem täglichen Zeitrahmen zeigt uns die folgenden Ergebnisse:
Die Bitmap-Muster-Integerzahl, die wir für Muster 7 verwenden, ist 0x80, was dem Dezimalwert und der Eingabe-Integerzahl von 128 entspricht, und sobald sie eingestellt ist, platziert der Expert Advisor nur noch Trades nach Muster 7.
Umgekehrter SAR auf höherem Zeitrahmen
Der parabolische SAR auf einem höheren Zeitrahmen kann sehr gut eine breitere Trendperspektive bieten und dabei helfen, das Rauschen von falschen Umkehrungen herauszufiltern, das in kleineren Zeitrahmen vorherrscht. Wenn der SAR auf einem Wochenchart einen starken Aufwärtstrend signalisiert, kann ein Händler, der einen 4-Stunden-Chart verwendet, Kaufpositionen bevorzugen und Verkaufssignale eines niedrigeren Zeitrahmens als potenzielles Rauschen oder kurzfristiger Rückschlag ignorieren.
In Fällen, in denen die Signale in zwei Zeitrahmen übereinstimmen, ist das Signal noch stärker. Wenn der 4-Stunden-Zeitrahmen aufwärts tendiert und der 15-Minuten-Zeitrahmen einen Umkehr anzeigt, bei dem der SAR das untere Ende der Preisspanne markiert, kann dieser besondere Punkt nicht nur ein starkes Signal, sondern auch einen „schärferen“ Einstieg darstellen. Es gibt auch Strategien, bei denen gegen den Trend gehandelt wird, aber diese können risikobehaftet sein, da die Maxime „der Trend ist dein Freund“ vielen Händlern gute Dienste geleistet hat. Indem man sich auf die Bestätigung des SAR auf mehreren Zeitskalen verlässt, kann man riskante, unzuverlässige Gegenbewegungen vermeiden.
Der SAR dient nicht nur als Einstiegssignal, sondern auch als Ausstiegsindikator. Durch die Verwendung von Expert Advisors, die von einem Assistenten zusammengestellt wurden, und den dazugehörigen Klassen, die Öffnungs- und Schließschwellen ausnutzen, sind wir besser in der Lage, dies zu implementieren, ohne zusätzlichen Code bereitstellen zu müssen. Die Verwendung des am Ende dieses Artikels beigefügten Codes und sein Zusammenbau zu einem Expert Advisor wird in den Artikeln hier und hier für neue Leser behandelt. Die MQ5-Erweiterungsdateien sind lediglich beigefügt, um zu zeigen, wie die zusammengesetzte Datei nach der Ausführung des Assistenten aussehen würde, und auch, um alle erforderlichen Dateien, die bei der Zusammenstellung des Expert Advisors vorhanden sein müssen, korrekt zu referenzieren. Durch die Prüfung mehrerer Zeiträume werden die Ausgänge präziser, was auf dem Papier zu einer besseren Leistung führen sollte.
Händler können die SAR-Levels auf dem höheren Zeitrahmen auch nutzen, um Stop-Loss-Levels für Positionen auf niedrigeren Zeitrahmen festzulegen. Dieser Ansatz stellt sicher, dass der Stopp auf einem signifikanten Niveau platziert wird, wodurch das Risiko eines vorzeitigen Ausstiegs aufgrund kurzfristiger Volatilität verringert wird. SAR-Trends auf höheren Zeitebenen können auf länger anhaltende Markttrends hinweisen, während niedrigere Zeitebenen Einstiegspunkte darstellen, um von diesen größeren Bewegungen zu profitieren. Wir implementieren dies wie folgt in MQL5:
//+------------------------------------------------------------------+ //| Check for Pattern 8. | //+------------------------------------------------------------------+ bool CSignalSAR::IsPattern_8(ENUM_POSITION_TYPE T) { m_sar.Refresh(-1); m_sar_alt.Refresh(-1); if(T == POSITION_TYPE_BUY && Base(StartIndex() + 1) > High(StartIndex() + 1) && Base(StartIndex()) < Low(StartIndex())) { return(Alt(StartIndex()) < LowAlt(StartIndex())); } else if(T == POSITION_TYPE_SELL && Base(StartIndex() + 1) < Low(StartIndex() + 1) && Base(StartIndex()) > High(StartIndex())) { return(Alt(StartIndex()) > HighAlt(StartIndex())); } return(false); }
Wir führen Tests mit ähnlichen Einstellungen wie oben mit Muster 7 durch, verwenden aber den wöchentlichen Zeitrahmen als alternativen Zeitrahmen und erhalten die folgenden Ergebnisse:
Wir verwenden die Eingabe-Bitmap von 256, um das neunte Muster, Muster-8, darzustellen. Zusammenfassend lässt sich also sagen, dass der SAR mit höherem Zeitrahmen den Händlern hilft, den Markt in einem größeren Zusammenhang zu erkennen, in dem die Signale mit niedrigerem Zeitrahmen wirken. Diese kontextbezogene Sichtweise hilft zu vermeiden, dass zu viel gehandelt wird oder auf unbedeutende Signale reagiert wird, die nicht mit dem allgemeinen Trend übereinstimmen.
Überschneidung von SAR und RSI
Der RSI ist, wie in einem kürzlich erschienenen Artikel dieser Serie hervorgehoben, ein Oszillator, der die Geschwindigkeit und Veränderung von Kursbewegungen misst und in der Regel verwendet wird, um überkaufte und überverkaufte Bedingungen zu erkennen. Er arbeitet auf einer Skala von 0 bis 100, wobei Werte über 70 auf überkaufte und unter 30 auf überverkaufte Bedingungen hinweisen. In Verbindung mit dem SAR kann dies eine gegenseitige Ergänzung ermöglichen und zur Ermittlung von Trends dienen.
Der parabolische SAR ist ein wirksames Instrument zur Erkennung des aktuellen Trends oder potenzieller Trendumkehrungen, kann aber auch falsche Signale in unruhigen oder seitwärts tendierenden Märkten erzeugen. Aus diesem Grund könnte der RSI eine zusätzliche Ebene der Momentum-Analyse darstellen, die dabei hilft, zu bestätigen, ob der Markt tatsächlich überkauft oder überverkauft ist, und somit die Stärke oder Schwäche des durch den SAR identifizierten Trends bestätigt. Wenn also der Parabolic SAR unter den Preis kippt, was auf einen Aufwärtstrend hindeutet, und der RSI einen Wert um 30 anzeigt (was auf überverkaufte Bedingungen hindeutet), verstärkt dies das Signal, dass die Trendumkehr wahrscheinlich echt ist und eine Aufwärtsdynamik hat.
Die Kombination mit dem SAR kann jedoch in zweierlei Hinsicht erfolgen. Der RSI ist ein Momentum-Indikator, und oft gibt es Ausbrüche auf dem Markt, bei denen das Momentum oder ein bestimmter Kursverlauf anhaltend sein kann. Obwohl wir den SAR, wie oben dargelegt, standardmäßig zur Bestätigung von „überkauften“ Situationen verwenden würden, kann er in den meisten Fällen auch dazu dienen, das vorherrschende Momentum zu bestätigen, insbesondere wenn man aus den Flip-Indikator-Situationen des SAR herauszoomt und die Punkt-Kurs-Lücken oder Punkt-Veränderungen entlang jedes Trends betrachtet. Diese stellen eindeutig eine Alternative zur SAR-RSI-Kopplung dar. Wir setzen dies jedoch nicht um, sondern stellen es hier nur als Diskussionsgrundlage vor. Stattdessen verwenden wir den „traditionellen“ Ansatz, den wir in MQL5 wie folgt umsetzen:
//+------------------------------------------------------------------+ //| Check for Pattern 9. | //+------------------------------------------------------------------+ bool CSignalSAR::IsPattern_9(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Base(StartIndex()) < Low(StartIndex())) { return(RSI(StartIndex()) <= 30.0); } else if(T == POSITION_TYPE_SELL && Base(StartIndex()) > High(StartIndex())) { return(RSI(StartIndex()) >= 70.0); } return(false); }
Testen mit der Auflistung haben wir oben nicht geben uns eine Menge von Trades, da auf dem täglichen Zeitrahmen neigt dazu, zu bestehen, was alles geht, um den Fall für die zweiten Weg könnten wir diese SAR-RSI Kombination implementieren, wie oben hervorgehoben. Die Ergebnisse dieser Tests werden im Folgenden vorgestellt:
Wie schon bei der Betrachtung von Indikatoren über verschiedene Muster hinweg haben wir einen optimierten Testbericht erstellt, der mehrere Muster mit nutzerdefinierten Schwellenwerten für jedes Muster über den Zeitraum unseres Testfensters auswählt. Diese ähnlichen Testergebnisse für die parabolische SAR werden im Folgenden vorgestellt:
Die Verwendung mehrerer Muster mit jeweils einem idealen Schwellenwert ist meiner Meinung nach geeignet, wenn diese Schwellenwerte nicht wahllos ausgewählt oder über einen engen Zeitraum ohne Vorwärtstests optimiert werden. Es ist besser, sie mit voreingestellten Werten zu verwenden oder zu testen, die auf der eigenen Einschätzung ihrer Leistung im praktischen Einsatz beruhen.
ADX Überblick
Der ADX-Oszillator misst die Stärke eines bestimmten Trends mit Hilfe von 3 Puffern. Von diesen Indikatoren können DI+ und DI- als separate Indikatoren betrachtet werden, da sie die Stärke des Preises in einer bestimmten Richtung messen. Der DI+ (eine Art positiver Richtungsindex) misst die Stärke der Aufwärtsbewegung, während der DI- (negativer Richtungsindex) die Stärke der Abwärtsbewegung angibt. Wenn also DI+ über DI- liegt, bedeutet dies, dass die Käufer mehr Einfluss haben als die Verkäufer und umgekehrt.
Der DI+-Puffer wird aus historischen Kursbewegungen abgeleitet, die über dem vorherigen Höchststand liegen, d. h. wenn der heutige Höchststand größer ist als der gestrige, wird ein positiver DI+-Wert aufgezeichnet. Umgekehrt wird DI- aus dem Teil des aktuellen Tiefs ermittelt, der unter dem Tief des Vortags liegt, sodass ein Pufferwert für DI- protokolliert wird, wenn wir ein Tief unter dem des Vortags erhalten, vorausgesetzt, es wird ein täglicher Zeitrahmen verwendet.
Die Formeln für DI+ und DI- lauten:
DI+ = (Geglättete positive Richtungsbewegung / ATR) × 100
DI- = (geglättete negative Richtungsbewegung / ATR) × 100
Die Komponente Average True Range (ATR) ist ein wichtiger Bestandteil dieser Puffer, da sie zur Normalisierung der Indikatorwerte dient, indem sie die zu diesem Zeitpunkt vorherrschende Volatilität berücksichtigt. Der Grund dafür ist, dass in volatilen Umgebungen erwartungsgemäß große Veränderungen der Höchst- oder Tiefstwerte häufig auftreten. Durch die Normalisierung auf die True Range (TR) werden daher nur die großen Bewegungen (trotz TR) in den Indikatorpuffern angemessen gewichtet. Der TR wird berechnet, indem die größte von drei Differenzen ausgewählt wird, nämlich das aktuelle Hoch abzüglich des aktuellen Tiefs, das aktuelle Hoch abzüglich des vorherigen Schlusskurses und der vorherige Schlusskurs abzüglich des aktuellen Tiefs. Die Signale dieser Puffer werden dann anhand ihrer Kreuzungen sowie mit einer Kombination aus anderen Indikatoren beobachtet, wie wir weiter unten sehen werden.
ADX, kreuzen von DI+ und DI-
Für unser erstes Muster, Muster-0, wird ein Aufwärtssignal angezeigt, wenn DI+ über DI- kreuzt. Es signalisiert, dass der Kaufdruck stärker ist als der Verkaufsdruck und markiert möglicherweise den Beginn eines Aufwärtstrends. Umgekehrt signalisiert das Abwärtssignal (DI- > DI+), wenn DI- über DI+ kreuzt, dass der Verkaufsdruck stärker ist als der Kaufdruck, was den Beginn eines Abwärtstrends markieren könnte. Wir implementieren dieses Muster wie folgt in MQL5:
//+------------------------------------------------------------------+ //| Check for Pattern 0. | //+------------------------------------------------------------------+ bool CSignalADX::IsPattern_0(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && BasePlus(X() + 1) < BaseMinus(X() + 1) && BasePlus(X()) > BaseMinus(X())) { return(true); } else if(T == POSITION_TYPE_SELL && BasePlus(X() + 1) > BaseMinus(X() + 1) && BasePlus(X()) < BaseMinus(X())) { return(true); } return(false); }
Der ADX-Hauptpuffer misst die Stärke des Trends und nicht seine Richtung. Er schwankt zwischen 0 und 100, wobei Werte über 25 auf einen starken Trend hindeuten, während Werte unter 25 auf einen schwachen oder trendlosen Markt hindeuten. Es ist wichtig, noch einmal zu betonen, dass der ADX nicht anzeigt, ob der Trend nach oben oder nach unten gerichtet ist; er misst lediglich die Stärke des Trends. Wenn der ADX steigt und DI+ über DI- liegt, deutet dies auf einen starken Aufwärtstrend hin. Wenn der ADX steigt und DI- über DI+ liegt, deutet dies auf einen starken Abwärtstrend hin.
Die Optimierung dieses Musters für die Schwellen von Eröffnungs- und Schlusskursen sowie die Take-Profit-Levels auf dem täglichen Zeitrahmen für das Jahr 2022 für das Devisenpaar EUR CHF liefert uns diese Ergebnisse in einer der „idealen“ Einstellungen:
ADX über 25 - starker Trendeinstieg
Wir haben uns oben die beiden DMI-Puffer DI+ und DI- angesehen, aber der dritte Puffer des ADX ist sein Hauptpuffer. Es liefert auch Messwerte im Bereich von 0 bis 100. Er wird berechnet, indem zunächst der Richtungsindex bestimmt wird, der sich aus der folgenden Formel ergibt:
wobei:
- DX ist der gesuchte Richtungsindex.
- +DI ist die bereits ermittelte plus gerichtete Bewegung, deren Formel oben dargestellt ist.
- -DI ist das negative Gegenstück, dessen Formel ebenfalls oben steht.
Sobald wir den Richtungsindex (DX) haben, erhalten wir den durchschnittlichen Richtungsindex, indem wir einfach den exponentiellen gleitenden Durchschnitt der letzten 14 Richtungsindexwerte bilden. Alternativ kann auch ein Glättungsansatz verwendet werden, der der nachstehenden Formel folgt:
wobei:
- n ist 14 oder eine beliebige geeignete Mittelungsperiode, die in den ADX-Indikator eingegeben wird.
Wir setzen dies in MQL5 wie folgt um:
//+------------------------------------------------------------------+ //| Check for Pattern 1. | //+------------------------------------------------------------------+ bool CSignalADX::IsPattern_1(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Base(X()) > 25.0 && BasePlus(X()) > BaseMinus(X())) { return(true); } else if(T == POSITION_TYPE_SELL && Base(X()) > 25.0 && BasePlus(X()) < BaseMinus(X())) { return(true); } return(false); }
Bei der Optimierung mit ähnlichen Umgebungseinstellungen wie bei Muster 0, wobei unser Symbol EUR CHF auf der täglichen Zeitspanne für das Jahr 2022 ist, erhalten wir die folgenden Ergebnisse:
ADX fällt unter 25 - Trendschwäche
Muster-2 macht sich die Umkehrung von Muster-1 zunutze, indem es nach Situationen sucht, in denen der ADX-Hauptpuffer unter 25 fällt, um dem aktuellen Trend entgegenzuwirken, wie er durch die Spanne zwischen DI+ und DI- angezeigt wird. Wenn also der ADX von oben auf unter 25 fällt und der DI- über dem DI+ liegt, wird dies als ein Aufwärtstrend interpretiert, da dies ein Zeichen für ein nachlassenden Abwärtstrend ist. Wenn das gleiche ADX-Kreuz auftrat, als der DI+ über dem DI- lag, wäre dies ebenfalls ein frühes Zeichen für einen Abwärtstrend. Wir setzen dies in MQL5 wie folgt um:
//+------------------------------------------------------------------+ //| Check for Pattern 2. | //+------------------------------------------------------------------+ bool CSignalADX::IsPattern_2(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Base(X()+1) > 25.0 && Base(X()) < 25.0 && BasePlus(X()) < BaseMinus(X())) { return(true); } else if(T == POSITION_TYPE_SELL && Base(X()+1) > 25.0 && Base(X()) < 25.0 && BasePlus(X()) > BaseMinus(X())) { return(true); } return(false); }
Optimierungs-Testläufe mit Einstellungen wie in den obigen Mustern führen zu den folgenden Ergebnissen für Muster 2:
ADX-Kreuzen mit gleitendem Durchschnitt
Bei Muster 3 ist der zusätzliche gleitende Durchschnitt, der angewendet wird, kein typischer Preis-Durchschnitt, sondern ein weiterer Puffer mit gleitenden Durchschnittswerten für den ADX-Hauptpuffer. Auch dieser kann als paralleler Puffer zum ADX verfolgt werden, und wenn der ADX ihn in der gleichen Weise kreuzt, wie der Kurs normalerweise gleitende Durchschnittspuffer auf einem Preis-Chart kreuzt, ist dies oft ein starkes Signal. Der ADX selbst ist zwar richtungsneutral, zeigt aber nur die Stärke des vorherrschenden Signals an, egal ob es sich um ein Kauf- oder Verkaufs-Signal handelt, und zwar durch ein ähnliches Kreuzen. Wir setzen dies im Code wie folgt um:
//+------------------------------------------------------------------+ //| Check for Pattern 3. | //+------------------------------------------------------------------+ bool CSignalADX::IsPattern_3(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Base(X()+1) < BaseAverage(X()+1) && Base(X()) > BaseAverage(X()) && BasePlus(X()) > BaseMinus(X())) { return(true); } else if(T == POSITION_TYPE_SELL && Base(X()+1) < BaseAverage(X()+1) && Base(X()) > BaseAverage(X()) && BasePlus(X()) < BaseMinus(X())) { return(true); } return(false); }
Nachfolgend werden Testläufe mit ausgewählten Optimierungsergebnissen in ähnlichen Einstellungen wie bei den obigen Mustern vorgestellt:
ADX und Preisdivergenz
Die Divergenz mit dem ADX basiert auf der vorherrschenden Kursbewegung auf dem Kurschart des Haupttitels. Diese „Divergenz“ ist jedoch insofern etwas eigenartig, als man immer nach einem Rückgang des Haupt-ADX-Puffers gegen einen starken Trend auf dem Preis-Chart in eine der beiden Richtungen sucht. Eine Aufwärts-Divergenz ist also dadurch gekennzeichnet, dass der Kurs des Wertpapiers sinkt, während der ADX im Hauptpuffer des Oszillators sinkt. Und eine Abwärts-Divergenz ist gekennzeichnet durch einen Aufwärtstrend auf dem Kurschart bei gleichzeitigem Rückgang des ADX-Oszillators. Wir setzen dies in MQL5 wie folgt um:
//+------------------------------------------------------------------+ //| Check for Pattern 4. | //+------------------------------------------------------------------+ bool CSignalADX::IsPattern_4(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Close(X()+2) > Close(X()+1) && Close(X()+1) > Close(X()) && Base(X()+2) > Base(X()+1) && Base(X()+1) > Base(X()) && Base(X()) <= 25) { return(true); } else if(T == POSITION_TYPE_SELL && Close(X()+2) < Close(X()+1) && Close(X()+1) < Close(X()) && Base(X()+2) > Base(X()+1) && Base(X()+1) > Base(X()) && Base(X()) <= 25) { return(true); } return(false); }
Ein Testlauf mit einigen der optimalen Einstellungen ergab folgende Ergebnisse:
ADX und Range Breakout
Muster 5 stützt sich, wie Muster 4, auf die Kursentwicklung im Kurschart des Wertpapiers, um sein Signal zu entwickeln und zu bestätigen. In diesem Fall suchen wir jedoch nach Kursausbrüchen nach längeren Konsolidierungsphasen, die durch einen Anstieg des ADX über den Schwellenwert von 25 untermauert werden. Ein Aufwärtssignal ist ein Kursanstieg über den Widerstand, der gleichzeitig mit einem Anstieg des ADX auf über 25 einhergeht. Ebenso ist ein Abwärtssignal ein Preisrückgang durch die Unterstützung, der durch einen Anstieg des ADX über 25 unterstützt wird. Wir setzen dies in MQL5 wie folgt um:
//+------------------------------------------------------------------+ //| Check for Pattern 5. | //+------------------------------------------------------------------+ bool CSignalADX::IsPattern_5(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && ATRAverage(X()+1) > ATR(X()+1) && ATRAverage(X()) < ATR(X()) && ATR(X()) < High(X())-Low(X()) && Base(X()+1) < 25 && Base(X()) > 25 && Close(X()+1) < Close(X())) { return(true); } else if(T == POSITION_TYPE_SELL && ATRAverage(X()+1) > ATR(X()+1) && ATRAverage(X()) < ATR(X()) && ATR(X()) < High(X())-Low(X()) && Base(X()+1) < 25 && Base(X()) > 25 && Close(X()+1) > Close(X())) { return(true); } return(false); }
Die präzise Definition von Konsolidierungen und Ausbrüchen im Code ist sehr mühsam, auch wenn dies für manuelle Händler einfach ist. Wir umgehen dies, indem wir uns auf den ATR-Indikator stützen und seine Messwerte über einen längeren Zeitraum hinweg mit der aktuellen Preisspanne vergleichen. Wenn die ATR über einen angemessenen Zeitraum hinweg gedämpft geblieben ist und unter der jüngsten Kursspanne liegt, könnte dies auf einen Ausbruch hindeuten. Dies ist keineswegs präzise, und ich bin mir sicher, dass gründlichere Implementierungen gemacht werden können, aber für unsere Zwecke in diesem Artikel muss es genügen! Testläufe der besten Optimierungsergebnisse mit ähnlichen Einstellungen wie den oben beschriebenen Mustern ergeben die folgenden Berichte:
Obwohl wir uns bemühen, für alle Muster ähnliche Testumgebungen und Einstellungen zu verwenden, führte dieses spezielle Muster bei Verwendung des täglichen Zeitrahmens kaum zu Abschlüssen. Deshalb wurde eine Ausnahme gemacht, um für den stündlichen Zeitrahmen zu optimieren und zu sehen, ob mehr Ausbrüche zu sehen sind und daher Trades platziert werden können. Die obigen Ergebnisse basieren daher auf den stündlichen und nicht auf den täglichen Werten, wie es bei den anderen obigen Mustern der Fall war.
Schlussfolgerung
Wir müssen unsere Betrachtung des ADX an dieser Stelle unterbrechen, da es 3 weitere Muster gibt, die im Rahmen des nächsten Indikators, den wir betrachten werden, berücksichtigt werden. Zusammenfassend lässt sich sagen, dass wir den ADX auf der Basis von Mustern untersucht haben, was die Signalklasse der assistentengestützten Expert Advisors ermöglicht, da die Klasse „Expert Signal“ bereits einen Code enthält, der die Handhabung dieser Muster erleichtert. Die Assistenten-Assembler-Klassen, die bei der Erstellung von Expert Advisors verwendet werden, bieten eine Vielzahl von Funktionen und Methoden, die es eindeutig überflüssig machen, von Null an zu programmieren, insbesondere wenn man in einer ersten Phase Ideen erforscht oder testet. Neben der Verwendung von Mustern gibt es noch weitere Bereiche, die wir in diesen Serien berücksichtigen müssen, wie z. B. die Verwendung von schwebende Aufträgen, die Anpassung des Auftragsflusses oder der Anzahl gleichzeitiger Positionen, die jederzeit eröffnet werden können, die Verwendung von Indikatoren wie ATR zur Steuerung der Preislücke, die Eingabeparameter nicht nur für den Trailing-Stop, sondern auch für den anfänglichen Stop-Loss und das Take-Profit-Niveau, und vieles mehr. Wir hoffen, dass wir uns diese und weitere Themen in der Zukunft ansehen können, aber in der Zwischenzeit werden wir uns mit den Grundlagen befassen. Muster und gemeinsame Indikatoren.
Übersetzt aus dem Englischen von MetaQuotes Ltd.
Originalartikel: https://www.mql5.com/en/articles/16085





- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.