Markets Positioning Codex in MQL5 (Teil 2): Bitweises Lernen, mit Multi-Patterns für Nvidia
Einführung
In unserem letzten Pilotartikel zum Thema Marktpositionierung haben wir die Aktie der Nvidia Corp (NVDA) als Aktivposten verwendet, um festzustellen, ob Strategien des Typs One-Position Traction haben können, wenn sie nach umfangreichen Tests live eingesetzt werden. Unser Testfenster war aufgrund der Aktiensplit-Aktivitäten bei Nvidia eingeschränkt, und so mussten wir über ein schmales 2-Jahres-Band trainieren, bevor wir einen 1-Jahres-Vorwärtstest durchführen konnten, wobei beide Zeiträume in der Lücke zwischen den beiden jüngsten Aktiensplits von NVDA lagen. Die meisten Broker, auch diejenigen, die MetaTrader anbieten, handhaben diese Aktiensplits, auch wenn sie im Strategy Tester übersehen werden, häufig so, dass sie die Positionen der Händler zum hohen Kurs schließen und sie mit erhöhtem Volumen zum neuen Kurs wieder öffnen, ohne dass die Gewinne der Position geschmälert werden. Wir setzen unsere Untersuchung von NVDA fort, indem wir die Muster-5 bis -9 für die Indikatorenkombination RSI und DeMarker betrachten.
Muster-5: Steigungskonfluenz mit Reichweitenausdehnung
Das sechste Signal, das wir haben, erkennt Marktbewegungen, die eine „hohe Überzeugung“ haben, indem wir die Steigungsmetriken des RSI und des DeMarker mit der Hoch-Tief-Kursausdehnung zusammenführen. Dies signalisiert in der Regel eine Zunahme der Händleraktivität und der Volatilität. Die Kaufbedingung wird markiert, wenn die RSI-Steigung über 3 Balken positiv ist, und der DeMarker zeigt ebenfalls einen ähnlichen Zustand über seine 3 Balken an. Die Preisspanne des aktuellen Kursbalkens, wobei „aktuell“ für den jüngsten abgeschlossenen Kursbalken steht, der den Index 1 erhalten würde, wäre auch größer als die eines vorangegangenen Balkens mit einem optimierten Abstand in der Vergangenheit. Sobald der aktuelle Schlusskurs innerhalb der oberen 25 Prozent seiner Spanne liegt, würde dies einen Kaufdruck signalisieren. Das Chart würde wie folgt aussehen:
RSI-Steilheit(3) > 0, DeMarker-Steilheit(3) > 0, UND aktueller Balkenbereich (Hoch-Tief) > 1,2 * Durchschnitt(Bereich,10) (d.h. Bereichserweiterung) – Kurs muss in den oberen 25% des Balkens schließen.
Nebenbei bemerkt, sind die Verkaufsvoraussetzungen bei unserem Nur-Kaufen-Ansatz auch dann erfüllt, wenn der RSI und der DeMarker über einen Zeitraum von drei Balken negativ sind und die aktuelle Hoch-Tief-Spanne stärker gestiegen ist als die vergangene Balken-Spanne. Dieser vergangene Benchmark ist abstimmbar/optimierbar, und wir passen seinen Zeitraum an den unserer verwendeten Durchschnittswerte an, um die Anzahl der optimierten Parameter zu reduzieren. Der Leser kann dies natürlich anpassen, aber der Grundgedanke dabei ist, dass man sich vor einer Kurvenanpassung hüten sollte. Der aktuelle Schlusskurs würde auch in den unteren 25 Prozent der aktuellen Kursspanne liegen, um das Vorhandensein von Verkaufsdruck zu bestätigen. Wir setzen dies in MQL5 wie folgt um:
//+------------------------------------------------------------------+ //| Check for Pattern 5. | //6) Slope Confluence with Volume/Range Expansion //+------------------------------------------------------------------+ bool CSignalRSI_DeMarker_SL::IsPattern_5(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY) { return(Hi(X() + m_past + 1) - Lo(X() + m_past + 1) < Hi(X() + 1) - Lo(X() + 1) && RSI(X()) - RSI(X() + 3) > 0.0 && DeMarker(X()) - DeMarker(X() + 3) > 0.0); } else if(T == POSITION_TYPE_SELL) { return(Hi(X() + m_past + 1) - Lo(X() + m_past + 1) < Hi(X() + 1) - Lo(X() + 1) && RSI(X()) - RSI(X() + 3) < 0.0 && DeMarker(X()) - DeMarker(X() + 3) < 0.0); } return(false); }
Muster-5 ist so konstruiert, dass es Balken herausfiltert, die eine gleichzeitige Beschleunigung des Momentums aufweisen, gemessen an den Steigungen, und einer starke Kursbewegung durch die Erweiterung der Handelsspanne aufgezeichnet werden. Indem wir verlangen, dass die beiden Oszillatoren in der Richtung übereinstimmen, validieren wir eine volumenabhängige Bereichserweiterung. Wir erfassen also überzeugende Bewegungen und nicht nur Ausschläge, die vorübergehend sein könnten. Die Ergebnisse des Vorwärtstests für dieses Muster, das vom 2023.06.01 bis zum 2024.06.01 läuft, auf dem 15-Minuten-Zeitrahmen ergeben folgenden Bericht:
Mit unserem obigen Bericht zeigt Muster-5, das auf einer Konvergenz der Steigungen mit einer Volumenexpansion basiert, eine enge, aber bescheidene Performance. Ausgehend von einer Einlage von 10k können wir einen Nettogewinn von 2.251 USD verbuchen. Es wurden keine Verlierer verzeichnet, 42 Positionen wurden eröffnet, alle in der Kaufrichtung gemäß unserem Testprotokoll, bei dem wir beabsichtigen, mehrere Signalmuster gleichzeitig zu testen. Bei einem unbegrenzten Gewinnfaktor lag die erwartete Auszahlung bei 53,6 und der größte Gewinner bei 173,76. Wir haben mit einer festen Marge und nicht mit festen Losen getestet, was bedeutet, dass diese Zahlen nicht unbedingt die gleiche Aussagekraft haben, aber sie sind dennoch bemerkenswerte Marker. Der Kapital-Drawdown lag bei unter einem Prozent, der Salden-Drawdown war nicht vorhanden. Der Erholungsfaktor betrug 2,5 bei einer Sharpe Ratio von 6,32. Zusammen mit einer perfekten LR-Korrelation von 1,00 bedeutet dies, dass die Einstiegslogik mit dem vorherrschenden Trend von NVDA übereinstimmte.
Aus konzeptioneller Sicht – die Ausrichtung des RSI und der DeMarker-Kurve in Verbindung mit der Ausweitung der Handelsspanne hält weiterhin an den Ausbrüchen nach oben nach einer Kompression fest, scheint dies jedoch in diesem Vorwärtstest selektiv zu tun. Da wir keine gebuchten Verluste haben, liegt das Hauptrisiko bei Muster-5 wahrscheinlich in den Kapitalrückgängen der offenen Positionen sowie im Auftreten von zukünftigen falschen Expansionen. Diese waren in unserem Testfenster nicht anzutreffen, da wir uns in einer großen Aufwärtstrend zwischen zwei großen Aktiensplits befanden. Daher könnten zusätzliche Maßnahmen wie explizite Volatilitätsprüfungen, eine striktere Stopplogik oder eine konservative, auf die Volatilität abgestimmte Positionsgröße zu einer Verbesserung beitragen.
Muster-6: Vorlaufende und nachlaufende Preisindikatoren
Unser siebtes Signal, Muster-6, platziert Handelsgeschäfte auf der Grundlage von Rücksetzer-Einstiegen, indem es Fälle erkennt, in denen der Preis dazu neigt, mit einem klaren impulsiven Break zu führen, während der RSI und der DeMarker hinterherhinken, ohne eine Erschöpfung anzuzeigen. Die grafische Darstellung kann wie folgt aussehen:
Der Kurs macht einen impulsiven Satz nach oben (höheres Hoch) und zieht sich dann auf die 21-EMA zurück; der RSI ist immer noch > 45 und der DeMarker > 0,45 (kein starker Rückgang des Indikators) – steigen Sie ein, wenn die RSI-Steigung positiv wird.
Die Kaufbedingung wird ausgelöst, wenn der Kurs eine impulsive Aufwärtsbewegung vollzieht, die ein höheres Hoch markiert, und dann in Richtung eines entscheidenden Unterstützungsniveaus zurückfällt, das in diesem Artikel ein periodenoptimierter, exponentieller gleitender Durchschnitt ist. Dieser EMA bedeutet eine wichtige dynamische Unterstützung, und wenn der RSI über 45 bleibt, während der DeMarker ebenfalls nördlich von 0,45 liegt, kann dies als kein ernsthafter Verlust der Dynamik interpretiert werden. Der Einstieg in eine Kaufposition sollte erfolgen, wenn der RSI in den positiven Bereich dreht, was bedeutet, dass die Dynamik wieder zugenommen hat. Wir setzen dies in MQL5 wie folgt um:
//+------------------------------------------------------------------+ //| Check for Pattern 6. | //7) Price Leading, Indicator Lagging (confirm pullback entries) //+------------------------------------------------------------------+ bool CSignalRSI_DeMarker_SL::IsPattern_6(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY) { return(High(X() + 2) < High(X() + 1) && High(X() + 1) > High(X()) && Close(X()) <= Cl(X()) && RSI(X()) > 45.0 && DeMarker(X()) > 0.45); } else if(T == POSITION_TYPE_SELL) { return(Low(X() + 2) > Low(X() + 1) && Low(X() + 1) < Low(X()) && Close(X()) >= Cl(X()) && RSI(X()) < 55.0 && DeMarker(X()) < 0.55); } return(false); }
Eine Verkaufsbedingung liegt hingegen vor, wenn der Kurs eine impulsive Bewegung nach unten vollzieht, indem er einen neuen Tiefststand erreicht, um dann nach oben bis zu einem fiktiven Widerstandsniveau zurückzugehen. Dieser Widerstand ist dynamisch, und wie bei der Kaufbedingung handelt es sich um einen EMA einer optimierbaren Periodenlänge. Der RSI dürfte unter 55 liegen, während der DeMarker ebenfalls nicht über 0,55 liegt, ein Zeichen für ein schwaches, aber flackerndes rückläufiges Momentum. Der Einstieg kann erfolgen, wenn der RSI ins Negative dreht und damit bestätigt, dass der Abwärtstrend anhält. Die Vorwärtsprüfung dieses Signals nach dem Training vom 2021.08.01 bis zum 2023.06.01 hat uns folgenden Bericht geliefert:
Dieses Signalmuster, das sich auf vorlaufende Preis- und nachlaufende Indikatoren stützt, bringt uns einen Gewinn von 2.532 bei einer Starteinlage von 10k. In diesem Prozess werden insgesamt 26 Positionen eröffnet, die alle im grünen Bereich schließen. Der erwartete Gewinn lag bei 97 und der Sharpe-Wert bei respektablen 5,32 und einer perfekten LR-Korrelation von 1,0. Noch bemerkenswerter war jedoch der maximale Kapital-Drawdown, der beim Test mit den verfügbaren Ticks des Brokers nahe bei Null lag. Wir waren in der Lage, Pull-Back-Bestätigungen in geordnete Fortsetzungsläufe umzumünzen.
Das Konzept dieses Musters stützt sich auf die Vorstellung, dass die Preisdynamik führt, und die Indikatoren sollen bestätigen, dass diese Bewegungen noch im Gange und nicht erschöpft sind. Der größte Einzelgewinn betrug 195, ebenfalls ohne Verluste, eine Aussage, die unser übergeordnetes Thema fortsetzt, dass es sich hier nicht um Unbesiegbarkeit handelt, sondern um eine sanfte Periode, in der wir zufällig das Muster vorwärts laufen. Die 26-fache Gewinnsträhne, falls das in diesem Zusammenhang überhaupt eine Rolle spielt, ist auf dem Papier beeindruckend, sagt aber nichts über die Performance in einem fallenden oder schwankendenm Umfeld aus. Ein zusätzliches Stoppsystem scheint nicht verhandelbar zu sein, da bei unseren Tests nicht einmal Trailing Stops eingesetzt werden. Diese Änderungen können leicht in den Dialogfeldern des Assistenten für die Montage vorgenommen werden. Die Notwendigkeit, über dynamische Ausstiegsregeln sowie volatilitätsbewusste Stopps nachzudenken, wie sie von den vorgefertigten nutzerdefinierten Modulen im MQL5-Assistenten angeboten werden, ist sicherlich etwas, das man in Betracht ziehen sollte, wenn man vorhat, eine rauere Situation als ein bullisches NVDA-Regime zu überleben.
Muster-7: Indikator Fehlanpassung
Das achte Signal, Muster-7, nutzt eine besondere Diskrepanz zwischen dem DeMarker-Oszillator und dem RSI-Oszillator aus, um frühe Einstiegssignale zu nutzen. Wir halten Ausschau nach M- bzw. W-Formationen im DeMarker, während die relative Position des RSI zur neutralen 50er-Marke ebenfalls unter Beobachtung steht. Wir haben unseren typischen Chart-Eindruck für dieses Muster wie folgt:
Der DeMarker bildet ein W (zwei steigende Tiefs), während der RSI noch unter 50 liegt, aber nach oben dreht (RSI-Steigung(2)>0). Wir steigen ein, wenn der Kurs oberhalb des letzten kleinen hohen Umkehrpunkts schließt.
Die Kaufbedingung wird ausgelöst, wenn der DeMarker eine W-Formation bildet, bei der die beiden unteren U-Tiefs ansteigen oder letztere auf oder über dem vorherigen liegen, und der RSI südlich der 50er-Marke liegt, aber über zwei Kursbalken hinweg eine positive Steigung aufweist. Der Einstieg kann erfolgen, wenn der Kurs über dem letzten kleinen hohen Umkehrpunkt schließt und damit eine Aufwärtsthese bestätigt. Wir implementieren dies wie folgt in MQL5:
//+------------------------------------------------------------------+ //| Check for Pattern 7. | //8) Indicator Mismatch (one leading, one confirming) //+------------------------------------------------------------------+ bool CSignalRSI_DeMarker_SL::IsPattern_7(ENUM_POSITION_TYPE T) { vector _demarker; _demarker.Init(fmax(5, m_past)); for(int i = 0; i < fmax(5, m_past); i++) { _demarker[i] = DeMarker(i); } if(T == POSITION_TYPE_BUY) { return(IsW(_demarker) && RSI(X()) - RSI(X() + 2) > 0.0 && Close(X()) >= High(X() + 1)); } else if(T == POSITION_TYPE_SELL) { return(IsM(_demarker) && RSI(X()) - RSI(X() + 2) < 0.0 && Close(X()) <= Low(X() + 1)); } return(false); }
Die Verkaufsbedingung wird registriert, wenn der DeMarker dieses Mal eine M-Formation bildet, die auch durch zwei rückläufige Kleinbuchstaben N gekennzeichnet ist, wobei letztere am oder unter dem Prior liegen und der RSI über 50 liegt, aber eine negative Steigung aufweist. Der Einstieg kann erfolgen, sobald der Kurs unter den letzten kleinen tiefen Umkehrpunkt fällt. Unsere obige Quelle erkennt die lokalen Extrema des DeMarkers in einem Fenster, das immer mindestens 5 beträgt, und überprüft auch die Oszillatorflanken, bevor sie nach einer entsprechenden Preisaktionsvalidierung sucht. Ein Vorwärtstest des Musters 7 lieferte uns folgenden Bericht:
Das achte Signalmuster liefert ein sauberes Gewinnprofil, indem es die anfängliche Einlage von 10k um 2.570 erhöht, nachdem 52 Handelsgeschäfte platziert wurden. Es ist vielleicht nicht überraschend, dass wir mit dieser Idee der Indikatorfehlanpassung wieder eine Gewinnquote von 100 Prozent erzielen können. Die Sharpe Ratio liegt bei 8,17 und damit über den beiden anderen Mustern, die wir oben betrachtet haben, und die LR-Korrelation ist mit 0,99 nahezu perfekt. So können wir die Kursentwicklung von Nvidia genau verfolgen und unnötige negative Ausschläge vermeiden. Der schlimmste Kapitalrückgang lag bei 9 Prozent, was zwar groß, aber verkraftbar ist und auf einen stabileren Verlauf der Kapitalkurve hindeutet, wenn ein Ausbruch in die Fortsetzung des Markts stattfindet. Muster-7 ist abhängig von RSI und DeMarker Bestätigungen und ist in der Lage, diese Arbeit, indem sie synchronisierte Timing zu erfassen konsequent den Markt Fortsetzungen bei gleichzeitiger Vermeidung des Rauschens bei einer Rückkehr zum Mittelwert.
Das Konzept dieses Musters besteht darin, den DeMarker als Signal für die Stärke oder Schwäche des vorherrschenden Markttrends zu nutzen, während der RSI die Rolle eines langsameren Momentumfilters spielt. Diese Partnerschaft mit unseren Tests läuft eher wie eine kontrollierte Übergabe als wie ein Tauziehen ab. Unser größter Gewinn lag bei über 600 mit einem ebenfalls guten durchschnittlichen Gewinn. Da wir keine Verluste erlitten haben, konnten unsere übergroßen Gewinner keine Dellen in der Kapitalkurve ausgleichen, oder wir hatten keinen Erholungsfaktor, über den wir schreiben konnten. Wir haben 52 Einzelgewinne erzielt, in einem etwas volatilen, aber überwiegend steigenden Umfeld, das wie bei den anderen impliziert, dass wir einige Wiederholungen außerhalb dieses Zeitfensters benötigen, um bessere Schlussfolgerungen ziehen zu können. Dieses Zusammenspiel von Vorlauf und Nachlauf ist sicherlich vielversprechend, doch scheint es angebracht zu sein, das Muster weiter zu untersuchen und nicht nur außerhalb der ihm zugeschriebenen Komfortzone zu testen. In diesem Fall können die oben erwähnten Volatilitätsfilter und Stop-Loss-Management-Mechanismen, die für die vorangegangenen Muster vorgeschlagen wurden, als Ergänzungen betrachtet werden.
Muste- 8: Sequentielle Steigungsleiter
Unser vorletztes Muster setzt eine mehrperiodige Steigungsprüfung als Strategie ein, um die Vorhersagezuverlässigkeit zu erhöhen, indem bei der Messung der RSI-Steigung Momentum-Filter für den kurzen, mittleren und längeren Zeithorizont übereinander gelegt werden. Dies wird mit der aktuellen DeMarker-Steigung als einschlägige Bestätigung eines bestimmten Trends gepaart. Für das Kaufsignal sieht die Chartdarstellung wie folgt aus:
RSI Steigung(1)>0, Steigung(3)>0, Steigung(5)>0 (monotone positive Steigungen über short→long) UND DeMarker Steigung(1)>0.
Mit dieser Logik wird die Kaufbedingung protokolliert, wenn der RSI über einen Balken, drei Balken und fünf Balken positiv ist, während der DeMarker über einen ebenfalls im Plus ist. Damit soll eine monoton ansteigende Steigungsleiter von aufeinanderfolgenden, sich ausdehnende Zeithorizonten dargestellt werden. Sie soll auf einen Aufwärtsschwung hinweisen. Wir setzen dies in MQL5 wie folgt um:
//+------------------------------------------------------------------+ //| Check for Pattern 8. | //9) Sequential Slope Ladder (multi-period confirmation) //+------------------------------------------------------------------+ bool CSignalRSI_DeMarker_SL::IsPattern_8(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY) { return(RSI(X()) - RSI(X() + 1) > 0.0 && RSI(X()) - RSI(X() + 3) > 0.0 && RSI(X()) - RSI(X() + 5) > 0.0 && DeMarker(X()) - DeMarker(X() + 1) > 0.0); } else if(T == POSITION_TYPE_SELL) { return(RSI(X()) - RSI(X() + 1) < 0.0 && RSI(X()) - RSI(X() + 3) < 0.0 && RSI(X()) - RSI(X() + 5) < 0.0 && DeMarker(X()) - DeMarker(X() + 1) < 0.0); } return(false); }
Die Kehrseite der Medaille ist, dass der RSI über die Zeiträume von einem, drei und fünf Balken ebenfalls eine negative Steigung aufweist, und auch der DeMarker-Oszillator befindet sich derzeit im negativen Bereich. Dieses Signal ist das erste, das wir in Betracht ziehen, bei dem die Preisentwicklung überhaupt nicht berücksichtigt wird, was an sich schon gefährlich sein sollte. Ein Vorwärtstest vom 2023.06.01 bis 2024.06.01, der auf ein Training vom 2021.08.01 bis 2023.06.01 folgte, ergab folgenden Bericht:
Muster-8 war die Strategie einer sequenziellen Leiter der Steigungen, die darauf abzielte, Impulse von gestapelten RSI- und DeMarker-Kursen zu erhalten, die inmitten der Hausse von NVDA eine weitere saubere Leistung erbrachten, während wir ausschließlich Kaufpositionen ausführten. Netto erzielt Muster-8 2894 auf das 10k-Konto und es ergibt sich ein Gewinn von 54,6 pro Handelsgeschäft. Wir haben 53 Positionen eröffnet, die alle im grünen Bereich schlossen, was bedeutet, dass wir einen ungebundenen oder NaN-Gewinnfaktor haben, wobei die angegebene Null lediglich ein Platzhalter ist. Der indizierte Kapitalabzug lag bei 8,8 Prozent mit einem absoluten Betrag von knapp über 900 USD. Ausgehend von einem Startkapital von 10.000 Euro liegen diese Zahlen bequem innerhalb unserer Risikozone und bieten dennoch Raum für das Rauschen während der offenen Positionen ohne erzwungene Ausstiege.
Eine weitere Analyse der Handelsgeschäfte von Muster-8 zeigt, dass rein momentumbasierte Eingänge nicht nur genau, sondern wahrscheinlich auch unnachgiebig sind, wenn man die Gewinnrate von 100 % bei 53 Eingängen betrachtet. Dennoch birgt diese Leistung die Gefahr der Selbstzufriedenheit. Wie bereits erwähnt, haben wir bei unseren anderen Mustern kein richtiges Gespür dafür, wie schlimm die Verlierer sein werden oder ob ein paar schlecht getimte Umkehrungen einen Teil der aufgelaufenen Gewinne zunichte machen könnten. Der durchschnittliche Gewinn von 49-55 deutet auch darauf hin, dass der Vorteil von Muster-8 auf Wiederholungen beruht, im Gegensatz zu Home-Run- oder Recovery-Handelsgeschäfte.
Auch hier gelten die gleichen Maßnahmen, die wir für die Muster-5 bis -7 oben empfohlen haben. Explizite Stopps sind notwendig, ebenso wie Volatilitätsfilter. Die Bestätigung der Kursentwicklung kann auch dafür sorgen, dass die unvermeidlichen Drawdowns unsere Kapitalkurve nicht zerstören, wenn das Marktregime von NVDA diese Stop-Ladder-Logik nicht mehr belohnt, und wir noch einen weiteren Tag handeln können.
Muster-9: Erkennung falscher Ausbrüche
Das letzte Signalmuster für eine Kaufposition bei NVDA, das die Oszillatoren RSI und DeMarker verwendet, zielt darauf ab, falsche Ausbrüche und Fallen zu erkennen, indem es das Scheitern der Preisbewegung mit den „Nicht-Bestätigungen“ von RSI und DeMarker kombiniert. Auf dem Papier soll dies asymmetrische Einstiegsmöglichkeiten signalisieren, die eine günstige Risiko-Ertrags-Dynamik bieten. In einem Chart kann dies wie folgt aussehen:
Der Kurs bricht kurzzeitig unter eine Unterstützung (Schlusskurs darunter), erholt sich aber innerhalb von 3 Bars von der Unterstützung (Schlusskurs wieder darüber) UND der RSI hat nicht bestätigt (RSI hat kein neues Tief gebildet), während der DeMarker einen Aufwärtstrend anzeigt – interpretieren Sie dies als Bärenfalle und kaufen Sie bei der Wiederanstieg der Kurse.
Um zu kaufen, muss der Kurs unter eine wichtige Unterstützungsmarke fallen, indem er darunter schließt. Gelingt es dem Kurs, diesen Rückgang innerhalb von 3 Kursbalken wieder auszugleichen, indem er über dieser Unterstützung schließt, während der RSI den Kursrückgang nicht als Zeichen eines nachlassenden Momentums unterstützt und der DeMarker ebenfalls einen Aufwärtstrend anzeigt, würde dies den Kaufdruck verstärken. Käufe können getätigt werden, wenn der Kurs oberhalb dieses Unterstützungsniveaus schließt und sich wieder öffnet. Wir codieren dies in MQL5 wie folgt:
//+------------------------------------------------------------------+ //| Check for Pattern 9. | //10) False Break / Trap Detection (price action deviation) //+------------------------------------------------------------------+ bool CSignalRSI_DeMarker_SL::IsPattern_9(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY) { return(Close(X() + 2) < Cl(X() + 2) && Close(X() + 1) < Cl(X() + 1) && Close(X()) >= Cl(X()) && RSI(X()) - RSI(X() + 1) > 0.0 && DeMarker(X()) - DeMarker(X() + 1) > 0.0); } else if(T == POSITION_TYPE_SELL) { return(Close(X() + 2) > Cl(X() + 2) && Close(X() + 1) > Cl(X() + 1) && Close(X()) <= Cl(X()) && RSI(X()) - RSI(X() + 1) < 0.0 && DeMarker(X()) - DeMarker(X() + 1) < 0.0); } return(false); }
Die Bärenfalle spiegelt das oben beschriebene Phänomen wider: Der Kurs bricht über ein Widerstandsniveau aus und schließt sogar darüber, bevor er innerhalb von 3 Kursbalken oder weniger einen Rückschlag erleidet und unter dem Niveau schließt. Der RSI würde den Ausbruch ebenfalls nicht bestätigen, da er keinen neuen Höchststand erreicht, während der DeMarker ebenfalls abwärts tendieren würde. Leerverkäufe werden getätigt, wenn der Kurs unterhalb des Widerstands schließt und eröffnet. Der Vorwärtstest für Muster-9 liefert folgende Ergebnisse von Strategy Tester:
Unser letztes Signalmuster, das das Signal einer Bärenfalle in seiner verfeinerten Form verwendet, zeigte eine kontrolliertere Performance, indem es das 10k-Startguthaben nur um 1300 gegenüber 37 Handelsgeschäfte verbesserte. Wenn alle Positionen absichtlich Käufe sind, wie in der Einleitung argumentiert, sind wieder alles Gewinner. Da es keine Verluste gibt, ist der oben ausgedruckte Gewinnfaktor von 0 nominal für einen ungebundenen Wert. Die erwartete Rendite war angesichts der geringen Gewinne, die wir im Vergleich zu den anderen Signalmustern erzielten, bescheiden, aber die Sharpe Ratio von 14,19 zeigt, dass der Vorteil dieses Musters sowohl effizient als auch widerstandsfähig ist. Danach war der Kapital-Drawdown für NVDAs Volatilitätsverhältnisse mit 2,6 Prozent oder 277 USD in absoluten Zahlen fast verschwindend gering, was weit von den Löchern von fast 40 bis 50 Prozent entfernt ist, die wir in den Berichten über andere Signalmuster oben und im letzten Artikel gesehen haben. Man könnte also sagen, dass dies durchaus im Rahmen dessen liegt, was jeder Händler für „überlebensfähig“ halten würde, selbst bei dem verwendeten Hebel von 1:100.
Das Ergebnis ist ein Signalmuster, das nicht nur die meiste Zeit über die richtige Richtung angibt, sondern auch vorsichtiger ist, was die Beteiligung an einem Trend angeht. Während 37 verlustfreie Gewinne verdächtig perfekt sind, sorgen der moderate erwartete Gewinn von 36 USD und der größte Gewinn von bescheidenen 85 USD dafür, dass unsere Kapitalkurve nicht auf Lotterieerwartungen hindeutet. Es ist eine Schinderei, kein Ruhm. Die Frage nach der zu verwendenden Hebelwirkung ist jedoch von Bedeutung, da einige wichtige Gerichtsbarkeiten eine Verringerung dieses Betrags erzwingen würden, was wiederum die Renditen verringern würde, während das Risikoprofil ein gewisses Trostpflaster darstellt. Sogar in diesem Aufwärtstrend, in denen wir Nvidia testen, ist es kein sanfter Ritt, da sowohl negative als auch positive Ausschläge erduldet wurden. Bei einem Live-Einsatz sollte man eindeutig auf die Größe seiner Positionen achten und nicht davon ausgehen, dass unsere Testjahre die einzig plausiblen Aussichten sind, und darüber hinaus einige der in den obigen Mustern vorgeschlagenen Maßnahmen ergreifen.
Mehrere Muster mit bis zu 10 Auswahlmöglichkeiten
Wir implementieren nur Kaufbedingungen, um herauszufinden, ob dies bei Vorwärtstest besser abschneidet als unsere früheren Versuche beim Testen mehrerer Muster, bei denen wir sowohl Kauf- als auch Verkaufspositionen eingenommen haben. Unsere Bedingungen sind natürlich aufgrund der Aufwärtstrendphase von NVDA, die wir studieren, stark verzerrt, die auch aufgrund der Aktiensplits des Unternehmens weiter eingeschränkt werden musste. Unser MQL5-Code für Kauf- und Verkaufsbedingungen lautet wie folgt;
//+------------------------------------------------------------------+ //| "Voting" that price will grow. | //+------------------------------------------------------------------+ int CSignalRSI_DeMarker::LongCondition(void) { PatternsUsed(GetDualMap(m_dual_map)); int result = 0, results = 0; //--- if the model 0 is used if(((m_patterns_usage & 0x01) != 0) && IsPattern_0(POSITION_TYPE_BUY)) { result += m_pattern_0; results++; } //--- if the model 1 is used if(((m_patterns_usage & 0x02) != 0) && IsPattern_1(POSITION_TYPE_BUY)) { result += m_pattern_1; results++; } //--- if the model 2 is used if(((m_patterns_usage & 0x04) != 0) && IsPattern_2(POSITION_TYPE_BUY)) { result += m_pattern_2; results++; } //--- if the model 3 is used if(((m_patterns_usage & 0x08) != 0) && IsPattern_3(POSITION_TYPE_BUY)) { result += m_pattern_3; results++; } //--- if the model 4 is used if(((m_patterns_usage & 0x10) != 0) && IsPattern_4(POSITION_TYPE_BUY)) { result += m_pattern_4; results++; } //--- if the model 5 is used if(((m_patterns_usage & 0x20) != 0) && IsPattern_5(POSITION_TYPE_BUY)) { result += m_pattern_5; results++; } //--- if the model 6 is used if(((m_patterns_usage & 0x40) != 0) && IsPattern_6(POSITION_TYPE_BUY)) { result += m_pattern_6; results++; } //--- if the model 7 is used if(((m_patterns_usage & 0x80) != 0) && IsPattern_7(POSITION_TYPE_BUY)) { result += m_pattern_7; results++; } //--- if the model 8 is used if(((m_patterns_usage & 0x100) != 0) && IsPattern_8(POSITION_TYPE_BUY)) { result += m_pattern_8; results++; } //--- if the model 9 is used if(((m_patterns_usage & 0x200) != 0) && IsPattern_9(POSITION_TYPE_BUY)) { result += m_pattern_9; results++; } //--- return the result //if(result > 0)printf(__FUNCSIG__+" result is: %i",result); if(results > 0 && result > 0) { return(int(round(result / results))); } return(0); } //+------------------------------------------------------------------+ //| "Voting" that price will fall. | //+------------------------------------------------------------------+ int CSignalRSI_DeMarker::ShortCondition(void) { return(0); }
Unser Code ist, wie schon in früheren Artikeln, im Wesentlichen ein gewichtetes Abstimmungssystem, das die Überzeugung der Käuferseite von einem Handelssystem festlegt, das mit dem MQL5-Assistenten. Sein Funktionsprinzip besteht darin, dass jedes der zehn Signalmuster, die in unserem Fall aus der Kombination der Indikatoren RSI und DeMarker, wie in den vorangegangenen Abschnitten beschrieben, abgeleitet werden, unabhängig voneinander auf steigende Kursbedingungen schließen kann. Die zehn Muster, die wir typischerweise als IsPattern-0() bis IsPattern9() darstellen, werten in der Regel verschiedene Indikatormerkmale aus, zu denen Divergenzen, synchronisierte Momentumverschiebungen oder strukturelle M/W-Formationen gehören können, wie wir oben bei den RSI-DeMarker-Mustern gesehen haben. Die Funktion LongCondition() fasst daher alle diese Musterprüfungen in einem gemeinsamen Signal zusammen, das einen gewichteten Mittelwert der kollektiven Abstimmung aller ausgewählten Muster in Richtung eines Kauf-Ergebnisses ausgibt.
Die Wahl des Musters wird durch die Integer-Variable m_patterns_usage gesteuert, die als Bit-Maske fungiert. Jedes „Bit“ darin (wenn es zur Basis 2 oder 0 und 1 umgerechnet wird) entspricht einem der zehn exklusiven Signalmuster. Wird dieser Variablen beispielsweise der ganzzahlige Wert 1 zugewiesen, wird nur das Muster 0 aktiviert, während die Muster 2,4,8,16,...,512 jeweils die Muster-1 bis -9 aktivieren. Dies ist bei der Umsetzung der ausschließlichen Nutzung der Fall. Beim Kombinieren von Mustern werden diesem Wert jedoch verschiedene ganzzahlige Werte zugewiesen, normalerweise im Bereich von 0 bis 1023. Wir hören bei 1023 auf, weil wir 10 Muster haben, und 1024 ist 2 hoch 10.
Die Funktion PatternsUsed() weist den Wert dieser Variable m_patterns_usage aus dem Eingabewert zu, während die Interpretation der Bitmaske in der Funktion LongCondition() erfolgt. Wir optimieren/trainieren für eine geeignete Kombination von Mustern, 0 bis 0 für den RSI und DeMarker über 2021.08.01 bis 2023.06.01 wie bei den einzelnen Mustern und führen dann einen Vorwärtstest für den Zeitraum 2023.06.01 bis 2024.06.01 durch. Unsere Ergebnisse sind im Folgenden aufgeführt:
Unser obiger Testbericht stammt aus der Ausführung des Expert Advisors, wobei der Eingabeparameter für die verwendeten Muster 605 zugewiesen wurde. Dies entspricht der Verwendung der Signalmuster 0,2,3,4,6 und 9. Dieser Vorwärtsgang scheint robust zu sein. Von der anfänglichen Einlage in Höhe von 10.000 USD können wir 2.309 USD einnehmen. Streng genommen ist das ein bisschen wenig, wenn man bedenkt, dass 10 Signalmuster zur Verfügung standen, vor allem, wenn man bedenkt, dass wir in der Lage waren, mit nur einem Signalmuster höhere Renditen zu erzielen, wie wir bereits in diesem und im letzten Artikel berichtet haben. Es wurden 40 Handelsgeschäfte getätigt, die alle im Plus lagen. Mit einem Erholungsfaktor von 2,95 und einer Sharpe Ratio von 6,99 sind unsere Renditen im Verhältnis zur Volatilität gut.
Auch das Risiko schien gedämpft, denn der maximale Aktienabzug lag bei 7,61 Prozent, was 703 USD entspricht. Unsere Modellierqualität war mit 99 Prozent ebenfalls anständig.
Im Großen und Ganzen handelt es sich bei diesem Vorwärtsgang um einen Proof of Concept, der sich bewährt hat. Zu Beginn des Artikels haben wir uns darauf konzentriert, nur Kaufpositionen zu eröffnen, mit der endgültigen Absicht, mehrere Muster zu testen, die alle Positionen in einer bestimmten Richtung eröffnen. In anderen Artikeln habe ich bereits über die Torheit geschrieben, mehr als ein Muster in einem Expert Advisor zu verwenden, da Signale dazu neigen, sich gegenseitig aufzuheben, wenn sie vorwärts laufen, sodass die guten Ergebnisse, die beim Training/Optimierung erzielt wurden, nicht repliziert werden können, da die Trainingsergebnisse auf eine Kurvenanpassung hinausliefen, bei der sich Käufe und Verkäufe gegenseitig aufheben.
40 Handelsgeschäfte, allesamt Gewinne, kein nennenswerter Saldo-Drawdown. Wir scheinen uns dafür ausgesprochen zu haben, einseitige Positionen nur dann zu eröffnen, wenn man mit mehreren Signalmustern handeln möchte. Das übergeordnete Ziel der Verwendung mehrerer Muster war jedoch, überdurchschnittliche Renditen zu erzielen, die mit Sicherheit über denen von Einzelmustern lagen, und hypothetisch eine „Summe ist besser als die Einzelteile“-Situation. Ersteres, das eigentliche Hauptziel, haben wir eindeutig verfehlt. So wie die Dinge stehen, kann man immer noch argumentieren, dass der Handel mit nur einem Signalmuster, das gut abschneidet, nördlich von 30 Prozent, wie wir bereits bei einigen Signalmustern gesehen haben, eine umsichtigere Strategie ist, wenn man nicht in größeren Fenstern testet und ein Stop-Management und die vorgeschlagenen Volatilitätsfilter einsetzt.
Schlussfolgerung
Aus dem Testen unserer 10 Signalmuster auf Nvidia Corp, beginnend mit dem letzten Artikel und jetzt abschließend mit diesem, könnte ein zusammenfassendes gemeinsames Thema etwas sein, das die meisten Händler vermuten, aber nie offen per se offenbaren, Märkte belohnen Präzision, aber bestrafen blindes Vertrauen. Obwohl viele unserer Signalmuster-Modelle anständige Gewinne erzielten, war ein chronisches Problem die schlechte Gewinn/Verlust-Asymmetrie. So zeigten beispielsweise die Range-Expansion des Musters 5 sowie die Konvergenz der Steigungen eine beneidenswerte Momentum-Erfassung, die jedoch mit einer Menge Drawdowns einherging, was viele Händler dazu veranlasst, ihre Handelsgeschäfte zu hinterfragen. Auch Muster-6, bei dem wir vorlaufende Preis- und nachlaufende Indikatoren verwendeten, schien elegant und effizient zu sein, mit einem gewissen gemessenen Drawdown, und dennoch mussten wir eine Form von strengerer Stopp-Platzierung einführen, um längere Volatilitätsläufe zu überstehen.
Im Gegensatz zu diesen anfänglichen Signalmustern zeigte das Muster-8, bei dem wir uns auf eine Leiter der sequentiellen Steigungen verließen, die Gefahren einer Trennung von Signallogik und Preisstruktur. Seine Dynamik brach im Vorwärtstest nur methodisch ein, da er in eine bestimmte Richtung tendierte, was zeigt, dass selbst bei guten Gewinnquoten unbegrenzte Verluste hart erarbeitete Gewinne zunichte machen können.
Das eigentliche Highlight ist jedoch die Konfiguration von mehreren Mustern. Dies war unser letzter Test, der gerade oben beschrieben wurde, und in dem wir die Auswahl von bis zu 10 Mustern zur Abstimmung durch eine gewichtete Maske zuließen. Die Bitmaskenkarte mit Gewinnen aus dem Training/Optimierung war 883 oder die Muster-0, -1, -4, -6, -9, und diese ergaben einen Gewinnfaktor von 3,0, eine Sharpe Ratio von mehr als 20, wobei der größte Kapital-Drawdown auf weniger als 19 Prozent beschränkt war. Diese Benchmarks wurden erreicht, indem die Starteinlage mit dem 2,5-fachen multipliziert wurde, was wiederum eine sehr aggressive Leistung darstellt. Wir haben den hohen Hebel von 1 zu 100 verwendet, sodass wir bei einem Hebel von 1 zu 50 theoretisch immer noch eine Rendite von 75 Prozent im Jahr erzielen könnten. Im weiteren Sinne könnte man sagen, dass die Vielfalt der Muster die spezifischen Schwächen der Muster ausgleicht. Man könnte es auch so ausdrücken, dass sich das Ensemble der Multi-Pattern-Auswahl wie ein maschinelles Lernmodell verhielt, bei dem die Mischung aus Bestätigungs-, Umkehr- und Spannexpansionssignalen zu einer einzigen kohärenten Entscheidungsebene zusammengeführt wurde.
Allerdings gibt es im Handel nach wie vor nichts zum Nulltarif. Diese Ergebnisse sehen zwar vielversprechend aus, aber unser Testfenster war durch die Daten des Aktiensplits von NVDA begrenzt, und diese grenzen an eine außergewöhnliche Aufwärtstrend für die Aktie. Ja, wir haben einige Verluste erlitten, obwohl wir nur mit Stopps gekauft haben, aber der Hintergrund des Aufwärtstrends für diesen Test war vorhanden. Wie werden diese bei einem Abwärtstrend abschneiden? Bei der Kurvenausrichtung für die Modellrobustheit lauern immer Gefahren. Diese Muster, einschließlich des Multi-Patterns, sollten in verschiedenen Volatilitätsregimen eine gewisse Bestätigung erfahren. Außerdem sollte dieser Out-of-Regime-Test eine gewisse Ausführungslatenz, Änderungen bei den Spreads und die Empfindlichkeit gegenüber dem Leverage berücksichtigen, da wir bei 1 zu 100 geblieben sind, einige Händler aber nichts über 1 zu 50 verwenden können.
| Name | Beschreibung |
|---|---|
| EMC-1.mq5 | Wizard Assemblierter Expert Advisor mit Referenzen in der Kopfzeile |
| SignalEMC-1.mq5 | Signalklassendatei des mit MQL5 Wizard verwendeten Expert Advisors |
Übersetzt aus dem Englischen von MetaQuotes Ltd.
Originalartikel: https://www.mql5.com/en/articles/20045
Warnung: Alle Rechte sind von MetaQuotes Ltd. vorbehalten. Kopieren oder Vervielfältigen untersagt.
Dieser Artikel wurde von einem Nutzer der Website verfasst und gibt dessen persönliche Meinung wieder. MetaQuotes Ltd übernimmt keine Verantwortung für die Richtigkeit der dargestellten Informationen oder für Folgen, die sich aus der Anwendung der beschriebenen Lösungen, Strategien oder Empfehlungen ergeben.
Klassische Strategien neu interpretieren (Teil 13): Unsere Kreuz-Strategie in neue Dimensionen führen (Teil 2)
Statistische Arbitrage durch kointegrierte Aktien (Teil 7): Punktesystem 2
Eine alternative Log-datei mit der Verwendung der HTML und CSS
Markets Positioning Codex in MQL5 (Teil 1): Bitwise Learning für Nvidia
- 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.










