English 日本語
preview
Klassische Strategien neu interpretieren (Teil 18): Suche nach Kerzenmustern

Klassische Strategien neu interpretieren (Teil 18): Suche nach Kerzenmustern

MetaTrader 5Beispiele |
28 0
Gamuchirai Zororo Ndawana
Gamuchirai Zororo Ndawana

Kerzenmuster werden seit langem von professionellen Händlern verwendet, um sich auf den Finanzmärkten zurechtzufinden und die Stimmung der Anleger einzuschätzen. Diese Muster können manchmal zutreffend sein und zuverlässige Ergebnisse liefern. Es ist jedoch auch bekannt, dass sie je nach der vorherrschenden Marktlage schwanken können. In diesem Artikel wollen wir uns mit den verfügbaren Kerzenmustern befassen und untersuchen, ob algorithmische Verbesserungen vorgenommen werden können, um die Einschränkungen ihrer klassischen Interpretation zu überwinden.

In der heutigen Diskussion werden wir uns auf Kerzenmuster konzentrieren, die gemeinhin als Engulfing-Kerzen bezeichnet werden. Es gibt viele Herausforderungen, die es Praktikern schwer machen, zuverlässige Kerzenmuster zu finden. Das erste Problem, auf das die meisten Praktiker stoßen, ist die Tatsache, dass es sehr viele verschiedene Kerzenmuster gibt, denen jeder Händler folgen kann. Erschwerend kommt hinzu, dass dieser Raum nur manuell durchsucht werden kann, was bedeutet, dass der Praktiker die Regeln und Bedingungen in seinem Algorithmus, die das spezifische Kerzenmuster beschreiben, das ihm vorschwebt, oft von Hand definieren muss.

Wie wir wissen, gibt es eine Vielzahl von Kerzenmustern, und es kann für neue und unerfahrene Mitglieder unserer Gemeinschaft einschüchternd sein, diesen Bereich von Hand zu durchsuchen. Dieser Artikel soll einen praktischen Leitfaden bieten, wie wir ein bekanntes Kerzenmuster verbessern können. Das Engulfing-Kerzenmuster, das wir heute untersuchen werden, wird von den meisten Händlern als Zeichen eines potenziellen Ausbruchs auf dem Markt erkannt. Diese Kerzenmuster deuten häufig auf ein steigendes offenes Interesse und damit auf die Möglichkeit eines starken Ausbruchs auf einer Seite des Marktes hin.

In den meisten unserer Artikel in dieser Serie konzentrieren wir uns auf KI-gestützte Handelsstrategien und technische Indikatoren als wichtigste Signalgeneratoren. Nur selten geben wir Kerzenmustern die Möglichkeit, die Entscheidungsfindung des Algorithmus zu beeinflussen. Es gibt viele Gründe, warum es schwieriger sein kann, Kerzenmuster in Handelsstrategien zu integrieren.

Zum einen ist der durch die Kerzenmuster definierte Raum beträchtlich. Es gibt so viele Kerzenmuster, die existieren können, und jedes von ihnen hat seine eigenen Varianten, in denen sie Gestalt annehmen können. Da die Kerzenmuster nicht immer die gleiche Form haben, ist es ziemlich schwierig, diesen Raum zu durchsuchen und neue Muster zu finden, da dies von Hand geschehen muss. Es ist ein schwer algorithmisch zu durchforstender Raum.

Außerdem können die Muster selbst wiederholt werden, wobei jedes Mal andere Ergebnisse erzielt werden. Daher kann man argumentieren, dass Kerzenmuster nicht robust sind, da jedes Auftreten desselben Musters zu unterschiedlichen Ergebnissen führen kann. Dies ist nicht unbedingt ein Hinweis auf die beabsichtigte Richtung des Marktes.


Die klassische Strategie visualisieren

Damit sind wir bereit, mit der Visualisierung der klassischen Umsetzung der Handelsstrategie zu beginnen. Normalerweise wird eine Engulfing-Kerze dadurch definiert, dass der Eröffnungskurs der Kerze höher ist als der Schlusskurs der vorangegangenen Kerze und das Gegenteil für den Schlusskurs zutrifft. In den meisten Fällen handelt es sich bei einer engulfing candle um ein klassisches Muster aus zwei Kerzen. Er dient als Einstiegssignal und wird in der Regel nicht auf niedrigen Zeitrahmen verwendet. In dem von uns verwendeten Code-Beispiel werden wir die Strategie auf dem täglichen Zeitrahmen implementieren. In Abbildung 1 haben wir zur Veranschaulichung das Muster einer Engulfing-Kerze für das EURUSD-Paar hervorgehoben.


Abbildung 1: Erkennen des klassischen Engulfing-Kerze

Richtig erkannt, folgt auf das Kerzenmuster in der Regel eine starke Preisbewegung in die erwartete Richtung, wie wir in Abbildung 2 für den Leser visualisiert haben. Dies ist der Grund, warum das Muster in Handelskreisen so beliebt ist.

Wie wir jedoch bald sehen werden, ergeben sich bei der Umsetzung des Algorithmus in Code einige Herausforderungen. Wir haben diese klassische Version der Strategie verwendet, um ein grundlegendes Leistungsniveau für unsere Anwendung festzulegen. Nachdem wir dieser klassischen Version der Strategie einige Verfeinerungen hinzugefügt hatten, konnten wir mehr Rauschen aus dem Markt herausfiltern und höhere Rentabilitätsniveaus erzielen, wobei wir weniger Abschlüsse benötigten als die Anzahl der Abschlüsse, die die lautere Version des Musters erforderte.


Abbildung 2: Das Muster erzeugt ein angemessenes Maß an Zuversicht aufgrund seiner früheren Leistungen

In dieser Serie werden wir über 5 einzigartige Kerzenmuster suchen. Aber für heute wollen wir uns zunächst nur auf die Engulfing-Kerzen konzentrieren. Wie bei den meisten unserer Anwendungen beginnen wir mit der Definition von Systemkonstanten, um sicherzustellen, dass wir in beiden Tests die gleiche Losgröße verwenden. 

//+------------------------------------------------------------------+
//|                                        Candle Stick Patterns.mq5 |
//|                                  Copyright 2025, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2025, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"

//+------------------------------------------------------------------+
//| This application attempts to reliably use different candlestick  |
//| patterns. The application will employ the following:             |
//|                                                                  |
//|   1) Engulfing Candle                                            |
//|   2) Momentum Candle                                             |
//|   3) Doji Candle                                                 |
//|   4) Shooting Star Candle                                        |
//|   5) Hammer Candle                                               |
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| System constants                                                 |
//+------------------------------------------------------------------+
#define LOT_SIZE SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN)

Importieren Sie die Handelsbibliothek.

//+------------------------------------------------------------------+
//| Trading libraries                                                |
//+------------------------------------------------------------------+
#include  <Trade\Trade.mqh>
CTrade Trade;

Jetzt laden wir die technischen Indikatoren, die wir benötigen. Wir werden den ATR-Indikator verwenden, um Stop-Loss- und Take-Profit-Levels für unsere Anwendung zu definieren.

//+------------------------------------------------------------------+
//| Indicators                                                       |
//+------------------------------------------------------------------+
int atr_handler;
double atr[];

Wie bei den meisten Anwendungen benötigen wir ein paar globale Variablen. Diese werden dafür verantwortlich sein, den Lauf der Zeit und die Veränderungen des Preisniveaus zu verfolgen.

//+------------------------------------------------------------------+
//| Global variables                                                 |
//+------------------------------------------------------------------+
MqlDateTime time_stamp,current_time;
double bid,ask;

Bei der ersten Initialisierung der Anwendung werden der Zeitstempel-Parameter und das ATR eingerichtet.

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- Set the time
   TimeLocal(time_stamp);
   atr_handler = iATR(Symbol(),PERIOD_CURRENT,14);
//---
   return(INIT_SUCCEEDED);
  }

Wenn unsere Anwendung nicht mehr verwendet wird, geben wir den Speicher frei, der zuvor mit dem benötigten Indikator verbunden war.

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
IndicatorRelease(atr_handler);
  }

Immer wenn neue Preisdaten eingehen, aktualisiert das System zunächst die aktuelle Uhrzeit und prüft, ob der aktuelle Tag und der gespeicherte Zeitstempel nicht übereinstimmen. Wenn dies der erste Tick seit der Initialisierung ist, spiegelt der Zeitstempel immer noch den Anfangswert wider. Wenn ein neuer Tag erkannt wird, wird der Zeitstempel aktualisiert, gefolgt von einer Aktualisierung der Marktdaten – einschließlich der ATR-Pufferwerte und der aktuellen Geld- und Briefkurse.

Wenn keine offenen Positionen vorhanden sind, sucht der Algorithmus nach dem Engulfing-Kerzenmuster. Typischerweise erstreckt sich dieses Muster über zwei Kerzen – die aktuelle (sich noch bildende) Kerze und die Kerze des Vortages. Dementsprechend werden iOpen und iClose mit 0 bzw. 1 indiziert, um auf die aktuelle bzw. die vorherige Kerze zu verweisen.

Ein „bullish engulfing“ liegt vor, wenn die aktuelle Kerze unter dem Schlusskurs des Vortages eröffnet und der aktuelle Schlusskurs den Eröffnungswert des Vortages übersteigt, sodass eine Kerze entsteht, die die vorherige Kerze vollständig verschlingt. Die umgekehrten Bedingungen definieren das fallendes Setup.

Diese Regeln generieren Einstiegssignale mit Take-Profit-Levels in 1,5-fachen ATR-Intervallen, wobei ein 1:1-Risiko-Ertrags-Verhältnis eingehalten wird.

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- Update the current time
   TimeLocal(current_time);

//--- Check if a new candle has fully formed
   if(time_stamp.day != current_time.day)
     {
     //--- Update the time
      TimeLocal(time_stamp);
      
      //--- A new candle has formed
      //--- Update the ATR reading
      CopyBuffer(atr_handler,0,0,1,atr);
      ask = SymbolInfoDouble(Symbol(),SYMBOL_ASK);
      bid = SymbolInfoDouble(Symbol(),SYMBOL_BID);
      
      //--- First check if we have no open positions
      if(PositionsTotal() == 0)
        {
         //--- Then check for a trade
         //--- Check for a bullish engulfing candle stick pattern
         if((iOpen(Symbol(),PERIOD_D1,0)<iClose(Symbol(),PERIOD_D1,1)) && (iClose(Symbol(),PERIOD_D1,0)>iOpen(Symbol(),PERIOD_D1,1)))
           {
            //--- Then, enter long positions 
           Trade.Buy(LOT_SIZE,Symbol(),ask,(ask - (atr[0]*1.5)),(ask + (atr[0]*1.5)));
           }

         //--- Otherwise we may check for bearish engulfing candlestick pattern
         if((iOpen(Symbol(),PERIOD_D1,0)>iClose(Symbol(),PERIOD_D1,1)) && (iClose(Symbol(),PERIOD_D1,0)<iOpen(Symbol(),PERIOD_D1,1)))
           {
            //--- Then, enter long positions 
           Trade.Sell(LOT_SIZE,Symbol(),ask,(ask + (atr[0]*1.5)),(ask - (atr[0]*1.5)));
           }
        }
     }
//--- Otherwise, the current candle has not fully formed
  }
//+------------------------------------------------------------------+

Am Ende der Anwendung löschen wir wie immer alle Systemvariablen.

//+------------------------------------------------------------------+
//| System definitions                                               |
//+------------------------------------------------------------------+
#undef LOT_SIZE

Auswahl der Backtest-Tage für unsere Benchmark-Version der Anwendung. Wir werden Daten aus 2 Jahren verwenden, die sich von 2023 bis 2025 erstrecken.

Abbildung 3: Testen der Benchmark-Version des klassischen Kerzenmusters

Die ersten Leistungsindikatoren, die wir erhalten haben, sind ermutigend. Es scheint, dass die Engulfing-Kerzen ein gewisses Maß an Zuverlässigkeit besitzt. In dem 2-Jahres-Zeitraum erwirtschaftete es einen Nettogewinn von insgesamt 127,64 $ (115). Dies wurde mit einer Genauigkeit von 55,7 % erreicht, mit einer gesunden Verteilung von langen und kurzen Einträgen. Wiederkehrende Leser werden sich daran erinnern, wie schwierig es für uns war, solche symmetrischen Handelsverteilungen aus einem statistischen Modell in unserer letzten Diskussion in der vergangenen Woche zu erhalten, der Link ist hier.

Abbildung 4: Die statistischen Ergebnisse, die mit dem klassischen Aufbau erzielt wurden

Die ursprüngliche Version des Kerzenmusters ergab eine Kapitalkurve mit Rentabilitätsniveaus, die solide erscheinen und einen langfristigen Aufwärtstrend aufweisen. Dies gibt uns zusätzliches Vertrauen, dass die Strategie die Mühe wert ist, die es braucht, um sie weiter zu verfeinern.

Abbildung 5: Die von der Benchmark-Strategie erstellte Kapitalkurve weist einen langfristigen Aufwärtstrend auf


Visualisierung der neu konzipierten Strategie

Nach reiflicher Überlegung kamen mir mehrere Verbesserungsmöglichkeiten in den Sinn.

Die erste bestand darin, die beiden Kerzen nicht nur anhand ihres Eröffnungs- und Schlusskurses zu vergleichen, sondern auch anhand der Höchst- und Tiefstwerte ihrer Dochte. Auf diese Weise werden Störungen herausgefiltert und die auffälligeren Kerzen hervorgehoben, d. h. diejenigen, die durch ein ausreichendes Volumen unterstützt werden, um einen Trend oder eine starke Richtungsänderung zu unterstützen.

Die zweite Verbesserung ist eher technischer Natur und bezieht sich auf die Funktionsweise des Backtests auf der MetaTrader 5-Plattform. Bei den Backtests eines Handelsroboters in MetaTrader 5 beginnt die Simulation zu Beginn einer jeden Kerze – um Mitternacht. Infolgedessen wird jede Handelslogik, die von den Eröffnungs-, Hoch-, Tief- und Schlusswerten einer vollständig ausgebildeten Tageskerze abhängt, zu diesem Zeitpunkt unwirksam. Aus der Sicht von MQL5 ist es daher praktischer, das Muster als eine Struktur aus drei Kerzen zu behandeln, bei der jeder neue Tag sowohl auf den Vortag als auch auf den vorherigen Tag verweist.

In der Praxis überprüfen wir zu Wochenbeginn am Montag, ob die Kerze vom Freitag die vom Donnerstag verschlungen hat. Diese Erkenntnis fließt dann in unsere Handelsentscheidungen für den Montag ein, anstatt zu versuchen zu bestimmen, ob die Kerze vom Montag die vom Freitag verschlingt, da sich die Kerze vom Montag bei Markteröffnung noch bildet. Auf der Grundlage dieser Überlegungen haben wir ein verfeinertes Muster entwickelt, das in Abbildung 6 dargestellt ist.


Abbildung 6: Identifizierung der verbesserten Version des Kerzenmusters, nach dem wir jetzt suchen

Die ersten Testergebnisse waren ermutigend und ließen darauf schließen, dass die Strategie vielversprechend ist. Aber wie immer müssen die Daten letztlich für sich selbst sprechen.

Abbildung 7: Die vorläufigen Ergebnisse, die wir mit unserem vorgeschlagenen Kerzenmuster erzielt haben, sind ermutigend

Wir haben die Handelsanwendung entsprechend aktualisiert und die Eingaben so konditioniert, dass Kerzendochte geprüft werden, anstatt sich ausschließlich auf Eröffnungs- und Schlusskurse zu verlassen. Wir haben auch eine bessere Verwendung für den Eröffnungskurs gefunden: Anstatt ihn direkt mit dem Schlusskurs zu vergleichen, haben wir seine Entwicklung über die letzten zwei Tage ausgewertet. Ein steigender Eröffnungskurs während einer Engulfing-Bewegung signalisierte eine Aufwärts-Stimmung, während ein fallender Eröffnungskurs auf eine Abwärts-Stimmung hindeutete.

//--- Then check for a trade
//--- Check for a bullish engulfing candle stick pattern
if((iLow(Symbol(),PERIOD_D1,1)<iLow(Symbol(),PERIOD_D1,2)) && (iHigh(Symbol(),PERIOD_D1,1)>iHigh(Symbol(),PERIOD_D1,2)) && (iOpen(Symbol(),PERIOD_D1,1)>iOpen(Symbol(),PERIOD_D1,2)))
  {
   //--- Then, enter long positions 
  Trade.Buy(LOT_SIZE,Symbol(),ask,(ask - (atr[0]*1.5)),(ask + (atr[0]*1.5)));
  }

//--- Otherwise we may check for bearish engulfing candlestick pattern
if((iLow(Symbol(),PERIOD_D1,1)<iLow(Symbol(),PERIOD_D1,2)) && (iHigh(Symbol(),PERIOD_D1,1)>iHigh(Symbol(),PERIOD_D1,2)) && (iOpen(Symbol(),PERIOD_D1,1)<iOpen(Symbol(),PERIOD_D1,2)))
  {
   //--- Then, enter long positions 
  Trade.Sell(LOT_SIZE,Symbol(),ask,(ask + (atr[0]*1.5)),(ask - (atr[0]*1.5)));
  }

Derr erneute Durchlauf im selben Testfenster führte zu besseren Ergebnissen. 

Abbildung 8: Die verbesserte Version unserer Anwendung ist bereit zum Testen

Der Gesamtnettogewinn stieg von 126 $ auf 160 $, während die Gesamtzahl der Handelsgeschäfte zurückging – ein Beweis für eine effizientere Nutzung des Kapitals. Dies deutet darauf hin, dass die Vorgängerversion ein unnötiges Risiko bei der Erkennung von Engulfing-Kerzen mit sich brachte. Interessanterweise blieb der Anteil profitabler Handelsgeschäfte mit 55 % in etwa gleich, was sinnvoll ist, da beide Strategien Variationen desselben zugrunde liegenden Kerzenkonzepts sind.

Abbildung 9: Die detaillierten Ergebnisse, die wir mit unserer verbesserten Version der Handelsanwendung erzielt haben

Schließlich haben wir bei der Analyse der Kapitalkurve des verbesserten Musters einen klaren Ausbruch zu neuen Höchstständen beobachtet, der mit der ursprünglichen Strategie nie erreicht wurde.

Abbildung 10: Die Kapitalkurve, die sich aus unserer überarbeiteten Version der Handelsstrategie ergibt


Schlussfolgerung

Abschließend hat dieser Artikel gezeigt, wie man die beliebte Engulfing-Kerzen in einer für die MQL5-Plattform besser geeigneten Form effektiv anwenden kann. Es zeigt, dass Kerzenmuster auch in ihrer klassischen Form weiterhin einen praktischen Wert haben und dass sie mit durchdachten Verfeinerungen robuster und kapitaleffizienter werden können.

Wir haben auch gezeigt, wie diese Muster mit dem ATR-Indikator kombiniert werden können, um ein besseres Risikomanagement zu erreichen, da Kerzenformationen allein keine integrierten Risikohinweise bieten. Wir freuen uns darauf, diese Erkundung in unserer nächsten Diskussion fortzusetzen, in der wir das zweite Kerzenmuster in unserer fünfteiligen Serie verbessern werden.

Dateiname Beschreibung der Datei
Candle Stick Benchmark.mq5  Die Benchmark-Version unserer Anwendung, die wir zur Ermittlung der wichtigsten Leistungsindikatoren entwickelt haben.
Candle Stick Patterns.mq5  Die verbesserte Anwendung, die wir erstellt haben, übertrifft die zuvor erreichten Leistungsniveaus.

Übersetzt aus dem Englischen von MetaQuotes Ltd.
Originalartikel: https://www.mql5.com/en/articles/20223

Blaupause für maschinelles Lernen (Teil 4): Die versteckte Schwachstelle in Ihrer ML-Pipeline – Gleichzeitigkeit der Kennzeichnungen Blaupause für maschinelles Lernen (Teil 4): Die versteckte Schwachstelle in Ihrer ML-Pipeline – Gleichzeitigkeit der Kennzeichnungen
Entdecken Sie, wie Sie eine kritische Schwachstelle beim maschinellen Lernen im Finanzbereich beheben können, die zu einer Überanpassung der Modelle und einer schlechten Live-Performance führt – die Gleichzeitigkeit der Kennzeichen. Bei der Verwendung der Triple-Barrier-Methode überschneiden sich die Trainingskennzeichen zeitlich, wodurch die zentrale IID-Annahme der meisten ML-Algorithmen verletzt wird. Dieser Artikel bietet eine praktische Lösung in Form einer Stichprobengewichtung. Sie werden lernen, wie man die zeitliche Überlappung zwischen Handelssignalen quantifiziert, Stichprobengewichte berechnet, die die einzigartigen Informationen jeder Beobachtung widerspiegeln, und diese Gewichte in Scikit-Learn implementiert, um robustere Klassifikatoren zu erstellen. Das Erlernen dieser grundlegenden Techniken wird Ihre Handelsmodelle robuster, zuverlässiger und profitabler machen.
Langfristige Handelsgeschäfte optimieren: Engulfing-Kerzenmuster und Liquiditätsstrategien Langfristige Handelsgeschäfte optimieren: Engulfing-Kerzenmuster und Liquiditätsstrategien
Dies ist ein EA, der auf einem hohen Zeitrahmen basiert und langfristige Analysen, Handelsentscheidungen und Ausführungen auf der Grundlage von Analysen auf einem höheren Zeitrahmen von W1, D1 und MN vornimmt. Dieser Artikel befasst sich ausführlich mit einem EA, der speziell für langfristige Händler entwickelt wurde, die geduldig genug sind, um ihre Positionen während turbulenter Kursbewegungen im unteren Zeitrahmen zu halten, ohne ihre Ausrichtung häufig zu ändern, bis die Take-Profit-Ziele erreicht sind.
Eine alternative Log-datei mit der Verwendung der HTML und CSS Eine alternative Log-datei mit der Verwendung der HTML und CSS
In diesem Artikel werden wir eine sehr einfache, aber leistungsfähige Bibliothek zur Erstellung der HTML-Dateien schreiben, dabei lernen wir auch, wie man eine ihre Darstellung einstellen kann (nach seinem Geschmack) und sehen wir, wie man es leicht in seinem Expert Advisor oder Skript hinzufügen oder verwenden kann.
Formulierung von dynamischen Multi-Pair EA (Teil 5): Scalping vs. Swing Handelsansätze Formulierung von dynamischen Multi-Pair EA (Teil 5): Scalping vs. Swing Handelsansätze
Dieser Teil befasst sich mit der Entwicklung eines dynamischen Multi-Pair Expert Advisors, der in der Lage ist, sich zwischen den Modi Scalping und Swing Trading anzupassen. Sie deckt die strukturellen und algorithmischen Unterschiede bei der Signalerzeugung, der Handelsausführung und dem Risikomanagement ab und ermöglicht es dem EA, Strategien auf der Grundlage des Marktverhaltens und der Nutzereingaben intelligent zu wechseln.