Markets Positioning Codex in MQL5 (Teil 1): Bitwise Learning für Nvidia
Einführung
Heute dient dieser Artikel als Pilotausgabe einer neuen Serie, die wir mit „Markets Positioning Codex in MQL5“ einleiten werden. Diese Artikel werden sich auf die Erforschung des automatisierten algorithmischen Handels für Strategien konzentrieren, die hauptsächlich auf Aktien zugeschnitten sind und überwiegend eine Kaufpositionierung aufweisen. Unsere Anpassung des „Codex“-Konzepts beruht nicht nur auf „bitweisem Lernen“, einem strukturierten Ansatz zur Zerlegung von Indikatorsignalen in diskrete Muster, sondern auch auf der Einbeziehung des immer wichtiger werdenden „maschinellen Lernens“. Die Verwendung von diskreten Mustern, wie wir sie in den vorangegangenen Serien behandelt haben, kann später für überwachtes Training und Testen kombiniert werden. Ziel dieses strategischen Ansatzes ist es, verlässliche Signale für die Marktpositionierung zu finden, indem wir eindeutige Signalmuster isolieren und rigoros auswerten.
In diesem Artikel konzentrieren wir uns auf Nvidia Corporation (NVDA), ein gut etabliertes, sehr liquides und hochdynamisches Unternehmen, das zu einem großen Teil von technologischen Innovationszyklen und Unternehmensfusionen und -übernahmen angetrieben wird. Wir wollen diese Marktkomplexität nutzen und die Robustheit des Relative Strength Index (RSI) und des DeMarker-Oszillators in einem disziplinierten, taktischen Nur-Kaufen-Ansatz demonstrieren. Das vorgesehene Testfenster ist von August 2021 bis Juni 2024, um die Einschränkungen des Strategy-Testers von MetaTrader 5 zu umgehen, da Aktiensplits von Unternehmen beim Testen nicht berücksichtigt werden können. Im Live-Handel wird dies von den meisten Brokern gehandhabt, aber Strategy Tester muss dies noch in den Griff bekommen. Bei NVDA, dem wertvollsten Unternehmen der Welt, lagen die beiden jüngsten Aktiensplits sehr nahe an unseren Start- und Endterminen für den Test.
Eine unserer Hauptprämissen bei dieser Serie ist, dass in den letzten Artikeln, den MQL5-Assistenten-Artikeln, die bitweisen Muster, die wir hatten, nur unabhängig voneinander zu funktionieren schienen und bei der Verwendung des Bitmap-Eingabe-Integer-Parameters „patterns-used“ keine Traktion boten, wenn sie miteinander kombiniert wurden. Wir wollen daher ausführlich testen, ob dieses Phänomen, das eine strikte/unabhängige Verwendung von Mustern in Abhängigkeit von den eigenen Kenntnissen/Erfahrungen des Händlers erfordert, auch dann gilt, wenn wir eine bestimmte Position halten, z. B. wenn wir nur beim Testen long gehen. Als wir noch keine spezifischen Positionsanforderungen hatten, war das Argument gegen die Kombination mehrerer Muster, dass sie sich vorzeitig gegenseitig aufheben und somit beim Training „kurvenangepasste“ Ergebnisse liefern würden, die sich nicht auf die reale Umgebung übertragen ließen.
Dieser erste Artikel in dieser Reihe gibt daher den Ton an, indem er 10 Signalmuster betrachtet, indem er nur ihre Kaufsignale kodiert. Unsere Überlegungen sind wie immer explorativ. Wir führen Tests für jeweils ein Signalmuster durch, und als späten Zusatz habe ich Tests nicht nur für alle Muster, sondern auch für Signalmuster in Paaren hinzugefügt. Dies habe ich getan, nachdem der Entwurf des Artikels fertig war und kurz vor der Veröffentlichung stand. Es zeigte sich, dass unsere Option, jedes der 10 Signalmuster auf einmal zu kombinieren, zu anderen Ergebnissen führte.
Mit diesem Beitrag und hoffentlich vielen weiteren, die im Rahmen dieser Serie folgen werden, wird der „Market Positioning Codex“ nicht nur eine Art Blaupause für die Entdeckung und Erstellung neuer Handelssignale in MQL5 bieten, sondern auch die Interpretation von Handelsalgorithmen bereichern, indem er komplexe, oft oszillierende Eingaben in brauchbare Code-Ideen umsetzt.
Nvidia Corp. (NVDA)
Dieses Unternehmen ist aufgrund seiner Vorreiterrolle im Halbleiterbereich ein wichtiger, wenn nicht sogar der wichtigste Vermögenswert in diskretionären und Handelsstrategien, insbesondere in Bezug auf GPUs, die für Hochleistungsberechnungen, künstliche Intelligenz und Spiele eingesetzt werden. Da einer ihrer wichtigsten Kunden, OpenAI, sowie ihre Konkurrenten derzeit im Rampenlicht stehen, hat ihre Aktie eine große Volatilität und vor allem eine Aufwärtsbewegung erfahren, die sie nun zum wertvollsten Unternehmen der Welt macht.
Wichtige Marktereignisse, die dieses Unternehmen in den letzten fünf Jahren beeinflusst haben, waren seine beiden großen Aktiensplits. Das erste dieser Ereignisse fand im Juli 2021 statt, als das Unternehmen einen Aktiensplit im Verhältnis 4:1 durchführte, wodurch der Kurs vorübergehend auf 25 % seines vorherigen Wertes sank. Der zweite und letzte Split erfolgte im Juni 2024 im Verhältnis 10:1. Aktiensplits verändern die Art und Weise, wie der Kurs einer Aktie wahrgenommen wird, indem sie den Aktienkurs ziemlich stark senken, während die Anzahl der Aktien erhöht wird. Die Betonung liegt hier auf „Wahrnehmung“, denn während die meisten Finanzdienstleister und sogar Broker, die MetaTrader unterstützen, über Anpassungssysteme verfügen, um solche Splits zu handhaben, ist dies bei Strategy Tester in MetaTrader nicht der Fall. Das bedeutet, dass offene Positionen, die aus unserer Sicht Kaufpositionen sind, je nach Margin-Level sofort zu einem Margin-Call auf dem Konto führen können.
Bei den meisten Brokern, einschließlich derjenigen, die MetaTrader anbieten, würden diese Positionen geschlossen und mit erhöhtem Volumen zu den neuen niedrigen Aktiensplitkursen wieder eröffnet, ohne dass sich dies auf die vorherigen Gewinne der eröffneten Position auswirkt. Insgesamt wäre es also hilfreich, wenn diese Split-Ereignisse vor der Ausführung von Tests in Strategy Tester voreingestellt werden könnten, um dieser Anomalie Rechnung zu tragen. Die Verwendung nutzerdefinierter Indikatorpreise, die von solchen Vermögenswerten abgeleitet sind, bei denen es keine Aktiensplits gibt, kann auch eine andere Lösung oder ein Ersatz für die Vermögenswerte mit Aktiensplits sein. Neben dem Testen von Margin Calls besteht ein noch größeres Problem darin, dass die wichtigsten Unterstützungs- und Widerstandsniveaus eines Aktienkurses falsch interpretiert werden, selbst wenn das Konto profitable Testergebnisse aufweist.
Da wir die Aufteilungsdaten im Voraus kennen und es wichtig ist, dass die Preise während unserer Testläufe konstant bleiben, wurde das Testfenster, das wir für diesen Artikel verwenden, so angepasst, dass es vom 1. August 2021 bis zum 1. Juni 2024 läuft. Innerhalb dieses Testfensters trainieren/optimieren wir vom 1. August 2021 bis zum 1. Juni 2023. Dieser Zeitraum umfasst einen Großteil der historischen Rallye von NVDA, insbesondere die dynamische Kursentwicklung, die die anfänglichen KI-gesteuerten Trends, einige Korrekturen sowie Verschiebungen in der Mikrostruktur beinhaltete. Dies gibt uns eine fast gleichmäßige Einstellung, um zu überprüfen, ob unsere Indikatormuster in der Lage sind, inmitten von „Unternehmensumstrukturierungsereignissen“ zu bestehen.
Während wir also eine nutzerdefinierte Symbolinstanz von NVDA ohne diese Aktiensplits erstellen könnten, sollte die Verwendung der rohen Brokerdaten in dem von uns gewählten kleinen Fenster ähnliche Ergebnisse ohne „Interferenzen“ oder „Verzerrungen“ unsererseits über einen Zeitraum der Aktie ergeben, der zwischen zwei großen Unternehmensanpassungen lag. In den kommenden Artikeln werden wir uns mit der Durchführung einiger dieser Tests und der Anpassung der Aktiensplits aus Python heraus beschäftigen. Die Python-IDE bietet eine Reihe von Vorteilen, von denen einige, wie die Ausführungseffizienz, bereits in früheren Artikeln angesprochen wurden, aber auch eine breitere Bibliothek von Indikatoren und Tools, die wir nicht nur beim Training, sondern auch bei der Indikatorenauswahl nutzen werden. Auch wenn wir die Indikatorpaarung RSI und DeMarker für die Verwendung mit NVDA „vorbestimmt“ haben, wird die Auswahl der Indikatorpaare in den kommenden Stücken noch strenger sein.
Die verwendeten Indikatoren
Wir wählen willkürlich, nur für diesen Artikel und nicht für den nächsten, die Indikatorpaarung aus RSI-Oszillator und DeMarker-Oszillator. Beide werden im Allgemeinen für die technische Analyse verwendet, um ein Gefühl für die Marktbedingungen zu bekommen und Handelssignale zu erkennen. Sie sind ebenfalls kostenlos. Beginnen wir mit einer grundlegenden Rekapitulation des RSI.
Dieser Oszillator, der RSI, wurde entwickelt, um die jüngsten Kursbewegungen zu bewerten, um sowohl überkaufte als auch überverkaufte Zustände zu beurteilen. Seine Ausgabemetriken liegen immer zwischen 0 und 100. Er soll Tempo und Ausmaß von Kursbewegungen widerspiegeln und hilft Händlern, Veränderungen der Dynamik zu erkennen. Die klassische Formel lautet:

wobei:
RS, die relative Stärke, ist das Verhältnis der mittleren Aufwärtsbewegungen des Kurses zu den mittleren Abwärtsbewegungen. Der Mittelungszeitraum n beträgt in der Regel 14.

Die Schritte zur Berechnung dieses Wertes beginnen mit der Ermittlung der Veränderungen nach oben und unten, die wir im Folgenden als Ui und Di darstellen.
![]()
Die Berechnung der geglätteten Durchschnitte der beiden obigen Werte kann auch mit der Wilder-Methode oder dem Exponential Moving Average erfolgen. Die RS- und RSI-Werte werden dann einfach aus diesen beiden Werten durch Anwendung der oben genannten Formeln ermittelt. RSI-Werte, die nahe an der 70er-Schwelle liegen, werden in der Regel als Hinweis auf eine überkaufte Situation oder erhöhte Chancen für eine Kursumkehr nach unten gewertet. Auf der anderen Seite markieren Indikatoren, die an der 30er-Schwelle liegen, eine überverkaufte Situation und erhöhen die Wahrscheinlichkeit einer Umkehr nach oben. Es ist erwähnenswert, dass der RSI bei sehr starken Trends für längere Zeit in den extremen Bereichen verbleiben kann, weshalb es sinnvoll sein kann, ihn mit einem anderen, vorzugsweise komplementären Indikator zu kombinieren. Aus diesem Grund verwenden wir in diesem Artikel auch den DeMarker-Oszillator.
Dieser Oszillator, der DeMarker, wurde entwickelt, um eine Aussage über die zugrunde liegende Nachfrage zu treffen, indem die Preisextreme der aktuellen Periode mit denen der vorangegangenen Periode verglichen werden. Dies kann nützlich sein, um sowohl Höchst- als auch Tiefststände des Marktes zu erkennen, wiederum in überkauften und überverkauften Situationen. Die Grundformel lautet:

wobei:

- SMA ist ein einfacher gleitender Durchschnitt
- H und L sind die Höchst- und Tiefstpreise in einer Zeitreihe t.
Dieser Oszillator gibt Ergebnisse im Bereich von 0 bis 1 aus, und wie der RSI markieren Werte von 0,7 oder darüber überkaufte Bedingungen, während Werte von 0,3 oder darunter überverkaufte Zustände anzeigen. Nichtsdestotrotz ergänzen sich RSI und DeMarker gegenseitig.
Während der RSI Kursveränderungen im Allgemeinen untersucht, legt der DeMarker das Hauptaugenmerk auf Kursextremzonen. Auf diese Weise können Händler sowohl Momentum-Positionen als auch bevorstehende Umschwünge erfassen. In diesem Artikel wird also untersucht, ob diese beiden Oszillatoren Händlern dabei helfen können, reichhaltigere, mehrdimensionale Signale zu entwickeln, die Marktnuancen aufdecken, vor allem in unserer Nur-Kauf-Einstellung, in der wir die Kursentwicklung von NVDA betrachten.
Muster-0: Indikator Versteckte Divergenz
Unser erstes Signal konzentriert sich auf das Aufspüren von Divergenzen, die bei der Betrachtung von Preisbewegungen und Momentum-Oszillatoren verborgen bleiben. Die Messwerte des RSI und des DeMarker werden mit den Steigungsbedingungen kombiniert, um einen Trend der Märkte zu bestätigen oder zu widerlegen. Die versteckte Aufwärts-Divergenz wird angezeigt, wenn der Kurs ein niedrigeres Tief verzeichnet, während der RSI und der DeMarker höhere Tiefs anzeigen. Dies wird so interpretiert, dass die zugrunde liegende Stärke trotz einer scheinbaren Schwäche vorhanden ist. Auf einem Preischart kann sich dies wie folgt darstellen.
Der Kurs erreicht ein tieferes Tief, während sowohl der RSI als auch der DeMarker ein höheres Tief erreichen (versteckte Aufwärts-Divergenz) und der RSI Slope(3) > 0 ist.
Die versteckte Abwärts-Divergenz wird ihrerseits registriert, wenn der Kurs ein höheres Hoch erreicht und beide Oszillatoren auf niedrigere Hochs fallen, ein Zeichen für eine nachlassende Dynamik, obwohl der Kurs eine gewisse Stärke aufweist. Unsere MMS-Quelle für diese beiden Bedingungen ist im Folgenden aufgeführt:
//+------------------------------------------------------------------+ //| Check for Pattern 0. | //1) Price-Indicator Hidden Divergence (slope + deviation) | //+------------------------------------------------------------------+ bool CSignalRSI_DeMarker::IsPattern_0(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY) { return(Low(X() + 1) > Low(X()) && DeMarker(X() + 1) < DeMarker(X()) && DeMarker(X()) < 0.4 && RSI(X() + 1) < RSI(X()) && RSI(X()) < 30.0 && RSI(X()) - RSI(X() + 3) > 0.0); } else if(T == POSITION_TYPE_SELL) { return(High(X() + 1) < High(X()) && DeMarker(X() + 1) > DeMarker(X()) && DeMarker(X()) > 0.6 && RSI(X() + 1) > RSI(X()) && RSI(X()) > 70.0 && RSI(X()) - RSI(X() + 3) < 0.0); } return(false); }
Oben versuchen wir, die erwähnte Logik zu implementieren, indem wir die Tiefst- und Höchststände des Preisspeichers mit den jeweiligen Tiefst- und Höchstständen des Indikators in einem gleitenden Fenster vergleichen. Wir berechnen die Steigung des RSI über ein Intervall von 3 Balken als die Differenz oder Veränderung des RSI über diese Spanne. Dies dient als zusätzlicher Filter, der sicherstellt, dass sich die Dynamik verbessert, wenn sie bei Käufen größer als Null ist. Bei der Überprüfung von Verkäufen wäre diese Steigung negativ, aber wir untersuchen für diesen Artikel keine Verkaufspositionen. Ein Vorwärtstest, bei dem nur dieses Signal, Muster-0, verwendet wird, ergibt folgenden Bericht:
Unser Nvidia-Vorwärtstest auf dem 4-Stunden-Zeitfenster vom 2023.06.01 bis zum 2024.06.01 konnte das anfängliche Depot von 10k auf 11.904,57 heben. Das entspricht einer Rendite von etwa 19 Prozent. Dies ist aus 39 Handelsgeschäften. Wie bereits in der Einleitung erwähnt, wurden nur Käufe getätigt, und von den 39 Einträgen waren 38 im grünen Bereich, mit nur einem Verlierer. Dies brachte uns zu einem Gewinnfaktor von 15,24 mit einer erwarteten Auszahlung von 50 Dollar pro Handel. Unsere Sharpe Ratio lag bei über 8, während der maximale Drawdown im Bereich von 4,5 Prozent blieb, was etwa 500 Dollar unter den 10.000 lag. Die LR-Korrelation war mit 1,00 zu perfekt, wenn man bedenkt, dass die Qualität der Preisentwicklung bei etwa 99 Prozent liegt. Dies deutet möglicherweise darauf hin, dass die Einträge gut auf den Trend von Nvidia abgestimmt waren. Der Z-Score von über 2 bei 95,6 Prozent könnte darauf hindeuten, dass auch unsere Gewinnserien kein zufälliges Rauschen waren. Zusammenfassend lässt sich sagen, dass wir Fortsetzungsgeschäfte nach einem Rücksetzer auf sehr saubere Weise einfangen. Zur Überprüfung dieser Performance, auch wenn sie nicht in der Stichprobe enthalten ist, muss man dieses Muster in eher rückläufigen Marktphasen anwenden und prüfen, wie gut es in der Lage ist, Kapital zu erhalten.
Muster-1: Bruch der Steigung mit Preisbestätigung
Unser zweites Signal, Muster-2, wird aus frühen Momentumveränderungen gebildet. Wenn diese innerhalb der Steigungen des RSI und des DeMarker erkannt oder registriert werden und wir dies mit der Bestätigung der Kursbewegung durch einen Exponential Moving Average kombinieren, haben wir möglicherweise eine solide Aufwärts-Formation. Dieses Muster kann in einem Chart wie folgt aussehen, wenn die Aufwärtsbedingungen erfüllt sind.
Der RSI Slope(5) kreuzt von negativ → positiv und der DeMarker Slope(5) > 0 für 2 aufeinanderfolgende Bars und der Preis schließt über dem 8-Perioden-EMA.
Eine Kaufbedingung ist gegeben, wenn die RSI-Steigung über 5 Balken von negativ auf positiv umschlägt, was einen Wechsel von einem fallenden zu einem Aufwärts-Momentum signalisieren kann. Der DeMarker ist auch über 5 Balken, behält die Positivität auf mindestens 2 aufeinanderfolgenden Balken bei, was unterstreicht, dass dieser Schwung anhält. Schließlich schließt der Kurs oberhalb des EMA und bestätigt damit, dass der Kurs jeden kurzfristigen Widerstand überwunden hat. Wir setzen dies in MQL5 wie folgt um:
//+------------------------------------------------------------------+ //| Check for Pattern 1. | //2) Leading-Indicator Slope Break with Price Confirmation | //+------------------------------------------------------------------+ bool CSignalRSI_DeMarker::IsPattern_1(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY) { return(DeMarker(X()) - DeMarker(X() + 5) > 0.0 && RSI(X() + 1) - RSI(X() + 5 + 1) < 0.0 && RSI(X()) - RSI(X() + 5) > 0.0 && Close(X()) > Cl(X()) && Close(X() + 1) > Cl(X() + 1)); } else if(T == POSITION_TYPE_SELL) { return(DeMarker(X()) - DeMarker(X() + 5) < 0.0 && RSI(X() + 1) - RSI(X() + 5 + 1) > 0.0 && RSI(X()) - RSI(X() + 5) < 0.0 && Close(X()) < Cl(X()) && Close(X() + 1) < Cl(X() + 1)); } return(false); }
Die Verkaufsbedingungen sind erfüllt, wenn der RSI von einem positiven in einen negativen Bereich wechselt, was bedeutet, dass wir jetzt ein fallendes Momentum haben, und der DeMarker ebenfalls einen negativen Verlauf für 2 aufeinanderfolgende Bars anzeigt. Die Kursspannen werden, wie bei einem Aufwärtstrend, über 5 Balken gemessen. Der Kurs müsste dann auch unter dem EMA schließen, um die Abwärtsthese zu bestätigen oder endgültig zu untermauern. Der Vorwärtstest dieses Musters ergab den folgenden Testbericht:
Die Weiterführung dieses grundlegenden, auf der Steigung basierenden Musters auf dem 4-Stunden-Chart verwandelt 10.000 in 12.454, was einer Performance von 24,5 Prozent entspricht. Es wurden 46 Handelsgeschäfte platziert, von denen wiederum 45 Gewinner sind, und wir haben nur einen Verlierer, was eine Gewinnquote von über 97 Prozent ergibt. Mit einem Gewinnfaktor von fast 18 und einem Sharpe von 8,78 ist die LR-Korrelation mit 0,99 nahezu perfekt, was wiederum auf eine enge Trendausrichtung im Gegensatz zu Zufällen hindeutet. Die Inanspruchnahme des Kapitals blieb mit 6,2 Prozent moderat, während die Inanspruchnahme des Saldos mit 1,19 Prozent noch geringer ausfiel. Im Allgemeinen erfasst Muster-1 also kurzfristige Beugungen unter Verwendung von EMA-Bestätigungen, aber angesichts der Tatsache, dass diese Statistiken mit nur 46 Handelsgeschäfte zu glänzend sind und dass Sicherheitsmaßnahmen wie die Platzierung von Stop-Loss oder die Filterung der Volatilität nicht berücksichtigt werden, könnte dieser Forward Walk immer noch als Kurvenanpassung betrachtet werden, sofern diese Maßnahmen vorhanden sind und auch in verschiedenen Marktregimen getestet werden.
Muster-2: M/W-Formationen mit Preisrückzug
Unser drittes Signal, Muster-2, sucht nach dem klassischen M für Dooppel-Hochs und W für Doppel-Tiefs; Formationen sowohl auf dem RSI als auch auf dem DeMarker-Oszillator. Anschließend werden sie mit wichtigen Kursrückschlägen oder Ausschlägen von früheren entscheidenden Niveaus zusammengeführt. Im Wesentlichen nutzt es die Fähigkeit der Oszillatoren, Schwungumkehrungen aus wiederholten Höchst- oder Tiefstständen zu erkennen, wobei der Preis wichtige Unterstützungs- oder Widerstandsniveaus erneut testet, um anstehende Umkehrungen zu validieren. Da wir nur auf NVDA-Käufe testen, könnte das Kaufsignal in einem Chart wie folgt aussehen:
Der RSI bildet ein W (zwei Talsohlen, zweite Talsohle ≥ erste) innerhalb der letzten 12 Balken UND der DeMarker zeigt ebenfalls ein W-Muster UND der Kurs geht auf einen früheren Widerstand zurück, der zur Unterstützung wurde (früheres Swing-Hoch) und hält.
Formal wären die Kaufbedingungen erfüllt, wenn sowohl der RSI als auch der DeMarker in einem der letzten 12 Kursbalken W-förmige Muster aufweisen. Der Kurs würde dann auf ein früheres Widerstandsniveau zurückfallen, das nun als Unterstützung dient - ein Fall von Halten über einem früheren Hochschwung. Wir implementieren die M- und W-Bildungsprüfungen zusammen mit Muster-2 wie folgt in MQL5:
//+------------------------------------------------------------------+ //| Detect "M" (double-top) pattern | //+------------------------------------------------------------------+ bool CSignalRSI_DeMarker::IsM(const vector &v) { int n = (int)v.Size(); if(n < 5) return false; // Search sequentially for an M: high1 -> valley -> high2 for(int i = 1; i < n - 3; i++) { if(!LocalMax(v, i)) continue; // first peak (high1) for(int j = i + 1; j < n - 2; j++) { if(!LocalMin(v, j)) continue; // middle trough for(int k = j + 1; k < n - 1; k++) { if(!LocalMax(v, k)) continue; // second peak (high2) double high1 = v[i]; double valley = v[j]; double high2 = v[k]; // Geometric validation: // - both peaks should be above the valley // - second peak should not be significantly higher than the first (allow tiny tolerance) if(high1 > valley && high2 > valley && high2 <= high1 * 1.001) return true; } } } return false; }
//+------------------------------------------------------------------+ //| Detect "W" (double-bottom) pattern | //+------------------------------------------------------------------+ bool CSignalRSI_DeMarker::IsW(const vector &v) { int n = (int)v.Size(); if(n < 5) return false; // Search sequentially for a W: low1 → peak → low2 for(int i = 1; i < n - 3; i++) { if(!LocalMin(v, i)) continue; // first trough (low1) for(int j = i + 1; j < n - 2; j++) { if(!LocalMax(v, j)) continue; // middle peak for(int k = j + 1; k < n - 1; k++) { if(!LocalMin(v, k)) continue; // second trough (low2) double low1 = v[i]; double peak = v[j]; double low2 = v[k]; // Simple geometric validation: // peak must be above both lows, // and second low not much lower than the first. if(peak > low1 && peak > low2 && low2 >= low1 * 0.999) return true; } } } return false; }
//+------------------------------------------------------------------+ //| Check for Pattern 2. | //3) M/W Formation on Indicator + Price Pullback | //+------------------------------------------------------------------+ bool CSignalRSI_DeMarker::IsPattern_2(ENUM_POSITION_TYPE T) { vector _rsi, _demarker; _rsi.Init(fmax(5, m_past)); _demarker.Init(fmax(5, m_past)); for(int i = 0; i < fmax(5, m_past); i++) { _rsi[i] = RSI(i); _demarker[i] = DeMarker(i); } //Print(__FUNCTION__ + ": rsi, ", _rsi); //Print(__FUNCTION__ + ": demarker, ", _demarker); //_demarker.CopyIndicatorBuffer(m_demarker.Handle(), X(), 0, fmax(5, m_past)) && if(T == POSITION_TYPE_BUY) { return(IsW(_rsi) && IsW(_demarker) && Close(X()) > Close(X() + 1) && Close(X() + 1) < Close(X() + 2)); } else if(T == POSITION_TYPE_SELL) { return(IsM(_rsi) && IsM(_demarker) && Close(X()) < Close(X() + 1) && Close(X() + 1) > Close(X() + 2)); } return(false); }
Das Verkaufssignal ist umgekehrt definiert, wenn sowohl der RSI als auch der DeMarker M-förmige Formationen aufweisen, ein Zeichen für Doppelspitzen. Wie beim Aufwärtssignal muss der zweite Höchststand dieser Formation dem ersten entsprechen oder niedriger sein als dieser. Der Kurs würde sich bis zu einem aktuellen Unterstützungsniveau erholen, dort scheitern und dieses Niveau in einen Widerstand umwandeln, da es nicht gelingt, nach oben zu gehen. Der Vorwärtstest dieses Signals nach der Optimierung ergibt folgenden Bericht:
Wiederum wächst unser Vorwärtstest vom 2023.06.01 bis zum 2024.06.01 mit unserem dritten Signalmuster, Muster-2, von 10.000 auf knapp über 14.000, was einen Nettogewinn von 4.325 ergibt. Dieses Signalmuster löste 54 Handelsgeschäfte aus, die wiederum alle unserem Thema für diesen Artikel folgten und uns einen „undefinierten“ Gewinnfaktor bescherten, da sie alle im Geld schlossen. Diese Performance brachte uns rund 80 Dollar pro Handelsgeschäft ein, und unsere Sharpe Ratio lag mit 9,23 ebenfalls auf einem sehr hohen Niveau. Die LR-Korrelation liegt interessanterweise unter dem perfekten Wert von 1,0, was wahrscheinlich auf einige ungünstige Ausschläge nach vorne zurückzuführen ist, anders als bei Muster-0. In den meisten Fällen erkannten die M/W-Strukturen jedoch nicht nur frühzeitig Erschöpfungszustände am Ende einer Bewegung, sondern trafen auch genau den richtigen Punkt, wenn es um Follow-Through-Zonen in Fällen ging, in denen der Preis ein bestimmtes Niveau vor einer Fortsetzung erneut testete.
Nach diesen Vorbemerkungen ist zu betonen, dass diese Ergebnisse wohl zu perfekt sind, als dass man ihnen blind vertrauen könnte. Trotz eines zwischenzeitlichen Aktienrückgangs von maximal 8 Prozent wurden keine Positionen im Minus geschlossen. Mit 54 aufeinanderfolgenden Gewinnern ist die Prognose hier keine schlechte Strategie, sondern, wie bei den oben bereits behandelten Mustern, eine „schön überangepasste Kurve“. Es sollten Risikokontrollen, Volatilitätsfilter und eine striktere Ausstiegslogik implementiert werden, wenn das Muster-2 unruhigen Märkten oder einem Wechsel zu einer Baisse standhalten soll. Man könnte argumentieren, dass es vielversprechend sein könnte, wenn wir Muster-2 als Timing-Tool für Erschöpfungseintritte verwenden, das mit stärkeren Trendfiltern auf höherer Ebene gepaart ist. Wenn es jedoch auf sich allein gestellt ist, wäre es ein Schlag ins Gesicht!
Muster-3: Kompressionsausbruch mit Indikator-Divergenz
Unser nächstes Signal, mit dem Index 3, ist auf Spotting Phasen von NVDA mit komprimierten Preis-Aktion konzentriert. Diese ist durch enge Handelsspannen gekennzeichnet. Der zentrale Gedanke hinter diesem Muster ist, dass auf Marktphasen mit geringer bis kaum vorhandener Volatilität, in denen die ATR oder eine geeignete Volatilitätsmetrik bescheidene Werte liefert, in der Regel Ausbruchssignale oder sehr starke Richtungsbewegungen folgen. Muster-3 verwendet daher Indikator-Divergenzen, um diese Ausbrüche zu bestätigen, wenn sie auftreten. Auf einem Chart könnte das Kaufsignal wie folgt aussehen:
Der Preis hat sich in einer engen Spanne befunden (ATR klein / nahe des Hoch-Tief-Bands für 8 Balken) und bricht dann über das Hoch der Spanne aus, wobei der RSI > RSI.mean(20) ist und einem steigenden DeMarker; wenn RSI und DeMarker während der Kompression höhere Tiefs gebildet haben, ist der Trend stärker.
Das Kaufsignal für dieses Muster liegt dann vor, wenn der Preis für eine bestimmte Anzahl von Balken in einer engen Spanne gehalten wurde, wobei diese Anzahl in unserem Fall ein optimierter oder abgestimmter Parameter ist. Wir markieren das Festhalten an einer Spanne als abnehmende Höchst- minus Tiefstwerte über diesen einstellbaren oder optimierbaren Zeitraum. Bei dieser Kompression zeigen sowohl der RSI als auch der DeMarker höhere bzw. niedrigere Tiefs an, was ein Zeichen für Divergenz und damit für eine erhöhte Wahrscheinlichkeit von akkumuliertem Momentum ist. Der Ausbruch wird bestätigt, wenn der Kurs über das vorherige Hoch steigt und der RSI ebenfalls oberhalb seines 20-Perioden-Mittelwerts liegt oder sich über einen optimierbaren Zeitraum im Aufwärtstrend befindet. Der DeMarker sollte ebenfalls nach oben tendieren. Sobald die Divergenz zwischen den Oszillatoren gleichzeitig mit höheren Tiefstständen auftritt, wird die Aufwärts-Tendenz für dieses Muster-3 verstärkt. Wir implementieren wie folgt in MQL5:
//+------------------------------------------------------------------+ //| Check for Pattern 3. | //4) Compression Breakout with Indicator Divergence | //+------------------------------------------------------------------+ bool CSignalRSI_DeMarker::IsPattern_3(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) && Close(X()) > Hi(X()) && RSI(X()) > RSI(X() + m_past) && DeMarker(X()) > DeMarker(X() + 1)); } else if(T == POSITION_TYPE_SELL) { return(Hi(X() + m_past + 1) - Lo(X() + m_past + 1) > Hi(X() + 1) - Lo(X() + 1) && Close(X()) < Lo(X()) && RSI(X()) < RSI(X() + m_past) && DeMarker(X()) < DeMarker(X() + 1)); } return(false); }
Die Logik des Verkaufssignals ist ein Spiegelbild des obigen Aufwärts-Signals, da sich der Kurs ebenfalls in einer engen Spanne befindet und der RSI und der DeMarker fallen. Darauf würde ein Kursdurchbruch unter das vorherige Tief der Handelsspanne folgen. Wie beim Aufwärts-Muster sprechen auch hier der RSI, der unter seinem Mittelwert liegt, und der DeMarker, der abwärts tendiert, für einen Durchbruch des Kurses nach unten. Muster-3 ist wichtig, weil es die Ruhe vor dem Sturm erkennt und darauf abzielt, daraus Kapital zu schlagen, indem es die Aufmerksamkeit auf wichtige Preisdurchbrüche lenkt. Eines der wichtigsten Instrumente, die hier zum Einsatz kommen, ist, wie bereits erwähnt, das Aufspüren von Divergenzen. Bei einem Testlauf dieses Musters auf den Aktienkurs der Nvidia Corp. vom 2023.06.01 bis zum 2024.06.01, bei dem die Handelsgeschäfte ausschließlich auf Basis des Musters 3 und seiner optimierten Einstellungen platziert wurden, erhielten wir die folgenden Ergebnisse:
Der obige Bericht des Strategietesters für unser viertes Signalmuster, Muster-3, zeigte, ähnlich wie das, was wir bereits behandelt haben, einen soliden Ausbruchsansatz für den Handel mit Nvidia. Wir haben nach wie vor nur eine Kauflogik verfolgt, die zufällig mit der vorherrschenden Hausse in der US-Tech-Branche über diesen Zeithorizont übereinstimmt, indem wir von unserem Muster verlangten, dass es Ausbrüche bestätigt, bei denen der RSI seinen Mittelwert übersteigt, während der DeMarker im Aufwärtstrend ist. In diesem Vorwärtsgang feuerte der Expert Advisor 78 Handelsgeschäfte ab, die alle in den schwarzen Zahlen endeten und einen Nettogewinn von über 3k bei einer anfänglichen Einlage von 10k einbrachten. Diese 30-prozentige Rendite mit einer Auszahlung von fast 39 Dollar hatte einen Gewinnfaktor von 9,63 mit einer LR-Korrelation von 0,99. Auch der maximale Drawdown betrug nur 5,7 Prozent. Diese beeindruckende Serie von 78 aufeinanderfolgenden Gewinnen zeigt, dass dieses Muster trotz der festen Gewinnziele sauber am NVDA-Trend teilnimmt, was im Wesentlichen bedeutet, dass die Einstiege so präzise sind, dass sie das Rauschen innerhalb des Balkens auffangen und dennoch mit beträchtlichen Gewinnen schließen können.
Obwohl Muster-3 Stärken bei der Identifizierung von Ein- und Ausstiegspunkten während der Hausse von NVDA zeigt, gibt es Bereiche, die verbessert werden könnten. Der stärkste Rückgang betrug fast 40 Prozent und der größte Einzelverlust mehr als 3.700, zwei Statistiken, die die Risiken von Muster-3 für fehlgeschlagene Ausbrüche oder starke Umkehrungen unterstreichen. Die Fähigkeit des Systems, sich zu erholen, wie der Erholungsfaktor und die regelmäßige Gewinnzahl zeigen, versucht dies zu kompensieren, aber es besteht die Notwendigkeit eines effektiveren Stoppmanagements.
Muster-4: Swing scheitert an Oszillator-Bestätigung
Unser abschließendes Muster für diesen Artikel ist das klassische Swing-Konzept, wie es von Larry Williams in Mode gebracht wurde. Wir übernehmen sie hier für den RSI und den DeMarker als Bestätigungen für Momentumverschiebungen, ohne von den typischen Schwellenwerten abhängig zu sein. Eine Chartdarstellung des Musters 4 für einen Kauf könnte wie folgt aussehen:
RSI scheitert an einer Aufwärtsbewegung (RSI fällt unter 30, steigt über sein vorheriges Hoch, ohne unter den Tiefpunkt zurückzukehren) UND DeMarker > 0,45 und der Preis schließt über dem hohen Umkehrpunkt.
Die Kaufbedingung wird ausgelöst, wenn der RSI unter den überverkauften Bereich fällt, der in der Regel bei 30 liegt, und dann über diesen Wert steigt und die vorherigen Höchststände übertrifft, ohne zurückzugehen. Eine gescheiterter Aufwärtsbewegung, Der DeMarker bestätigt seinerseits ebenfalls das Momentum, indem er sich über die 0,45-Marke bewegt. Zusätzlich zu diesen beiden Oszillatorwerten würde der Kurs über dem vorherigen hohen Umkehrpunkt schließen und somit das Aufwärts-Signal konsolidieren. Wir setzen dies in MQL5 wie folgt um:
//+------------------------------------------------------------------+ //| Check for Pattern 4. | //5) Failure Swing (Williams-style) on RSI + Dem confirmation | //+------------------------------------------------------------------+ bool CSignalRSI_DeMarker::IsPattern_4(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY) { return((Close(X()) >= Hi(X()) || Close(X()) >= High(X() + 1)) && RSI(X() + 2) < RSI(X() + 1) && RSI(X() + 1) > RSI(X()) && RSI(X()) <= 30.0 && DeMarker(X()) > 0.45); } else if(T == POSITION_TYPE_SELL) { return((Close(X()) <= Lo(X()) || Close(X()) <= Low(X() + 1)) && RSI(X() + 2) > RSI(X() + 1) && RSI(X() + 1) < RSI(X()) && RSI(X()) >= 70.0 && DeMarker(X()) < 0.55); } return(false); }
Die Verkaufsbedingung ist definiert, wenn der RSI den überkauften Schwellenwert, in der Regel 70, durchbricht, um anschließend unter die vorherigen Tiefststände zu fallen, ohne die vorherigen Höchststände erneut zu erreichen, was wiederum einen Abwärts-Fehlschlag darstellt. Der DeMarker würde unter 0,55 bleiben und der Kurs würde unter dem vorherigen Swing-Tief schließen, um das Verkaufssignal zu bestätigen. Ein Vorwärtstest unter ähnlichen Bedingungen wie bei den vier Mustern, die wir bereits oben betrachtet haben, ergibt nach einem Optimierungslauf das folgende Ergebnis:
Unser fünftes Signal, Muster 4, ist mit einer gewissen Präzision an die Aufwärtstrends von Nvidia gekoppelt, sodass wir eine Rendite von 30 Prozent erzielen können. Im Vorwärtstest wurden 57 Handelsgeschäfte getätigt, auch hier waren alle Gewinner, was zu einem Sharpe Ratio von 9,20 und einer LR-Korrelation von 0,99 führte. Diese Performance könnte, wie bereits bei früheren Mustern festgestellt, zu sehr in das Aufwärts-Regime von Nvidia verliebt sein, wenn man bedenkt, dass der Gewinnfaktor unbestimmt ist und der Aktien-Drawdown fast bei Null liegt. Zusätzliche Stresstests in einem fallenden Trend, wahrscheinlich mit der Einführung von Volatilitätsfiltern und einem gewissen Risikomanagement, könnten eine wichtige Voraussetzung sein, bevor dieses Muster, wie bei den vier vorangegangenen, weiter berücksichtigt wird. Der vollständige Quelltext, der vom MQL5-Assistenten verwendet werden kann, ist unten angefügt.
Schlussfolgerung
Abschließend sei gesagt, dass dieser erste Teil des „Markets Positioning Codex in MQL5“ einige Grundlagen für eine strukturierte Erforschung von Signalmustern des Typs One-Position durch Tests mit Nvidia geschaffen hat. Wir beabsichtigen, eine Vielzahl von Aktien in diesen Serien zu testen, und daher werden unsere Tests mit einer Position eine Vielzahl von Kaufpositionen beinhalten. Für unsere in diesem Artikel getestete Aktie, Nvidia, wurde der Zeitraum von einem anhaltenden Aufwärts-Momentum dominiert, was bedeutet, dass das Testen von Nur-Kauf-Systemen sinnlos ist? Nun, nein. Unsere Verwendung von Expert Advisors mit nur einer Position ist dazu gedacht, den Handel mit mehr als einem Signalmuster besser zu nutzen.
In der vorangegangenen Serie war ein großer Nachteil des bitweisen Lernens, dass die individuelle Leistung der einzelnen Signalmuster nicht beibehalten werden konnte, wenn die Signalmuster kombiniert wurden, weil sie dazu neigten, sich gegenseitig aufzuheben, sodass die rosigen Trainingsergebnisse einfach Kurvenanpassungen waren, die bei Preisen außerhalb der Stichprobe nicht repliziert werden konnten. Dieser Ein-Positionen-Ansatz versucht daher, dies zu erforschen/auszunutzen, und zusätzlich werden wir in zukünftigen Stücken auch 2-Muster- oder 3-Muster-Kombinationen in Betracht ziehen.
| Name | Beschreibung |
|---|---|
| EMC-1.mq5 | Zusammengestellter Expert Advisor, dessen Kopfzeile Referenzen auflistet |
| SignalEMC-1.mqh | Nutzerdefinierte Signalklassendatei |
Übersetzt aus dem Englischen von MetaQuotes Ltd.
Originalartikel: https://www.mql5.com/en/articles/20020
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.
Die Übertragung der Trading-Signale in einem universalen Expert Advisor.
MetaTrader 5 Machine Learning Blueprint (Teil 5): Sequentielles Bootstrapping – Verzicht auf Kennzeichen, Verbesserung der Ergebnisse
Eine alternative Log-datei mit der Verwendung der HTML und CSS
Bivariate Copulae in MQL5 (Teil 2): Implementierung archimedischer Copulae in MQL5
- 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.









