Entwicklung des Price Action Analysis Toolkit (Teil 51): Revolutionäre Chart-Suchtechnologie für die Entdeckung von Kerzenmustern
Einführung
Kerzenmuster sind nach wie vor eines der beständigsten und visuell intuitivsten Instrumente der technischen Analyse. Sie fangen den ständigen Kampf zwischen Käufern und Verkäufern ein und hinterlassen ein klares Bild der Marktstimmung und -dynamik. Sowohl Händler als auch Entwickler befassen sich immer wieder mit diesem Thema, denn Kerzen sind in vielerlei Hinsicht die wahren Fußabdrücke der Preisbewegung. Sie spiegeln die bisherige Entwicklung des Marktes wider und geben oft Hinweise auf die mögliche nächste Entwicklung. Jede Kerzenmuster erzählt eine Geschichte darüber, was auf einem bestimmten Kursniveau und zu einem bestimmten Zeitpunkt geschehen ist. Diese Formationen werden seit Jahrzehnten untersucht, benannt und klassifiziert, und jede hat ihre eigenen Auswirkungen auf die Vorhersage. Ein bekanntes Beispiel ist das „Engulfing-Aufwärtsmuster“, das oft als frühes Zeichen für eine erneute Kaufkraft angesehen wird.
Das anhaltende Interesse an der Kerzen-Analyse innerhalb der MQL5-Entwicklung rührt von der praktischen Erfahrung auf dem Markt her. Je mehr man das Preisverhalten live beobachtet, desto mehr Herausforderungen tauchen auf – und damit auch Möglichkeiten, intelligentere Lösungen zu schaffen. MQL5 erweist sich als außergewöhnlich reichhaltige Umgebung für diese Kreativität; seine Flexibilität erlaubt es, technische Ideen in vollständige, funktionierende Werkzeuge zu verwandeln, die in der Lage sind, Charts automatisch und visuell zu analysieren.
In diesem Artikel wird CandlePatternSearch.mq5 vorgestellt, ein Expert Advisor, der die traditionelle Untersuchung von Kerzenmuster durch Automatisierung und Interaktivität erweitert. Das System scannt und erkennt eine breite Palette gängiger Muster und ermöglicht es den Nutzern, direkt auf dem Charts nach bestimmten Mustern zu suchen. Erkannte Formationen werden visuell markiert, wodurch es einfacher wird, zu untersuchen, wie jedes Muster den Preis über verschiedene Instrumente und Zeitrahmen hinweg beeinflusst hat. Mit der Zeit hilft diese Fähigkeit den Händlern, wiederkehrende Marktverhaltensweisen zu erkennen und Vertrauen in die Vorhersage wahrscheinlicher Ergebnisse aufzubauen, wenn bestimmte Muster auftreten.
In den folgenden Abschnitten werden wir uns mit dem Überblick über die Funktionen, der technischen Architektur, den Tests und den Ergebnissen und schließlich der Schlussfolgerung befassen. Das nachstehende Inhaltsverzeichnis gibt einen Überblick über die Struktur des Artikels, gefolgt von einer ausführlichen Erörterung der einzelnen Abschnitte.
Überblick über die Funktionen
CandlePatternSearch.mq5 wurde als komplettes Framework zur Erkennung, Anzeige und Überwachung klassischer Kerzenmuster direkt auf MetaTrader 5-Charts entwickelt. Es kombiniert detaillierte Mustererkennungsalgorithmen mit einem reaktionsschnellen grafischen Bedienfeld, das Händlern die Möglichkeit gibt, mit Charts auf eine Weise zu interagieren, die schnelle visuelle Analysen und fundierte Entscheidungen unterstützt.
Die folgenden Hauptmerkmale definieren die Fähigkeiten des Tools:
1. Umfangreiche Musterbibliothek
Der EA unterstützt eine breite Palette von beliebten Einzel-, Doppel- und Dreifach-Kerzenformationen, einschließlich Doji, Hammer, Engulfing Aufwärts-/Abwärts-Muster, Morning Star, Evening Star, Three White Soldiers, Three Black Crows und mehr. Auf diese Weise können Analysten mehrere Preisaktionsszenarien abdecken, ohne dass sie für jedes einzelne einen eigenen Indikator benötigen.
2. Interaktives On-Chart-Bedienfeld
Eine integrierte grafische Nutzeroberfläche bietet direkten Zugriff auf die wichtigsten Funktionen, ohne dass Sie durch die Menüs von MetaTrader 5 navigieren müssen. Händler können nach einem bestimmten Muster anhand des Namens suchen, alle unterstützten Muster innerhalb eines gewählten Rückblickzeitraums scannen, Markierungen löschen oder die Echtzeitüberwachung einschalten – alles über spezielle Schaltflächen und Eingabefelder.
3. Fähigkeit zur Mustersuche
Anstatt manuell durch das Charts zu blättern und nach Formationen zu suchen, kann das Tool nur die Muster aufspüren und hervorheben, die Ihren Suchkriterien entsprechen. Dieser gezielte Ansatz ist ideal für Strategietests oder die Überprüfung der historischen Performance eines bestimmten Kerzen-Setups.
4. Umfassende Scanning-Funktion
Im Full-Scan-Modus werden alle Balken innerhalb des angegebenen Rückblickzeitraums analysiert und jede Übereinstimmung aus der Musterbibliothek des EA markiert. Dies ist besonders nützlich für umfassendere statistische Studien oder um sich einen allgemeinen Überblick über die Marktbedingungen zu verschaffen.
5. Echtzeit-Überwachungsmodus
Wenn dieser Modus aktiviert ist, wird jeder neue Balken kontinuierlich beobachtet, während er sich bildet, und auf neue Muster innerhalb der letzten Kerzen geprüft. Das Überwachungssystem verwendet eine Abkühlungslogik pro Mustertyp, um sich wiederholende Alarme für identische Setups zu vermeiden.
6. Mehrkanaliges Alarmsystem
Erkannte Muster können Chart-Pop-ups, akustische Benachrichtigungen, Push-Nachrichten an die MetaTrader 5 Mobile App und sogar E-Mails auslösen – vollständig konfigurierbar, um Ihren Handelsabläufen zu entsprechen.
7. Visuelles Hervorheben von Mustern
Jede Erkennung wird auf dem Chart mit einem farbigen Rechteck markiert, das die gesamte Formation abdeckt. Dies ermöglicht eine schnelle Identifizierung und ein visuelles Backtesting, ohne die Standard-Chartelemente zu unterbrechen.
8. Anpassbare Parameter
Alle operativen Aspekte – von den Rückblickszeiträumen und dem Alarmverhalten bis hin zur Hervorhebung der Farbe und der maximal angezeigten Muster – können an die persönlichen Handelsvorlieben angepasst oder die Übersichtlichkeit des Charts optimiert werden.

Durch die Zusammenführung dieser Fähigkeiten bietet CandlePatternSearch.mq5 mehr als nur einen statischen Indikator. Es handelt sich um ein aktiv reagierendes Tool, das unter realen Marktbedingungen funktioniert, über jeden Zeitrahmen und jedes Währungspaar hinweg funktioniert und sich sowohl an diskretionäre als auch an systematische Handelsansätze anpasst.
Technische Architektur
Dieser Expert Advisor besteht aus mehreren Schlüsselkomponenten, die zusammenarbeiten, um schnelles Scannen, Mustererkennung, Warnmeldungen und Echtzeitüberwachung zu ermöglichen. Jedes Segment des Designs dient einem bestimmten Zweck – von der Verwaltung von Nutzereingabeeinstellungen über die Analyse von Kerzendaten bis hin zur Darstellung von grafischen Steuerelementen und der Ausführung von Benachrichtigungen.
Die Architektur lässt sich grob in die folgenden Funktionsbereiche unterteilen:
- Eingabeparameter und Konfiguration
- Unterstützte Patterns und Erkennungslogik
- Überwachung in Echtzeit
- Mechanismus der Warnung
- Grafische Nutzeroberfläche (GUI)
- Hervorhebung von Mustern im Charts
- Suchen versus Scannen aller Patterns
Auf jeden dieser Punkte wird im Folgenden näher eingegangen.
1. Eingabe-Parameter
Eine der Stärken des EA liegt in seiner Anpassungsfähigkeit. Alle wichtigen Verhaltensweisen, vom Scanbereich bis hin zum visuellen Stil und den Alarmierungsregeln, werden über leicht einstellbare Eingabeparameter gesteuert. Über diese Eingänge können die Händler das Gerät in Bezug auf Leistung, Signalfrequenz und Klarheit feinabstimmen.
| Parameter | Typ | Standardwert | Beschreibung |
|---|---|---|---|
| LookbackPeriod | int | 1000 | Legt fest, wie viele historische Balken während der anfänglichen Scan-Routinen analysiert werden sollen. Größere Werte decken mehr Daten ab, können aber die Berechnungszeit leicht erhöhen. |
| PatternColor | color | clrDodgerBlue | Legt die Farbe fest, mit der erkannte Kerzenmuster auf dem Charts hervorgehoben werden. |
| MaxDisplayPatterns | int | 100 | Begrenzt, wie viele hervorgehobene Muster gleichzeitig angezeigt werden können, um die Übersichtlichkeit und Leistung des Chartss zu erhalten. |
| EnableAlerts | bool | true | Globaler Schalter für alle Alarmkanäle. Wenn diese Funktion deaktiviert ist, werden keine Benachrichtigungen oder Töne ausgelöst. |
| SoundAlerts | bool | true | Aktiviert oder deaktiviert einen Signalton, wenn ein neues Muster erkannt wird. |
| PushNotifications | bool | false | Sendet Erkennungsmeldungen an die MetaTrader 5-Mobilanwendung zur Fernüberwachung. Erfordert Push-Konfiguration in den Terminaleinstellungen. |
| EmailAlerts | bool | false | Sendet Erkennungsdetails an eine konfigurierte E-Mail-Adresse unter Verwendung der E-Mail-Einstellungen des Terminals. |
| AlertCooldown | int | 60 | Zeit in Sekunden, bevor das gleiche Muster einen weiteren Alarm auslösen kann, um eine Wiederholung während aktiver Märkte zu verhindern. |
Durch die Kombination dieser Einstellungen kann der EA sowohl für leichte als auch für intensive Aufgaben angepasst werden. Ein Händler, der Backtests durchführt, könnte beispielsweise den Lookback-Bereich erhöhen und gleichzeitig Live-Benachrichtigungen deaktivieren, während ein Daytrader einen kürzeren Scan-Zeitraum einstellen und Push-Benachrichtigungen aktivieren könnte, um Chancen in Echtzeit zu erkennen. Intern werden alle Parameter mit Hilfe von Standard-Eingabe-Deklarationen gehandhabt, wodurch sichergestellt wird, dass Änderungen direkt auf der Registerkarte Eingaben des MetaTrader 5 erscheinen. Dieses Design ermöglicht eine sofortige Anpassung, ohne dass der Quellcode bearbeitet oder neu kompiliert werden muss, was vor allem bei der Übertragung von Einstellungen zwischen Charts oder Symbolen hilfreich ist.
//+------------------------------------------------------------------+ //| Input Parameters | //+------------------------------------------------------------------+ input int LookbackPeriod = 1000; // Number of bars to scan input color PatternColor = clrDodgerBlue;// Highlight colour for detected patterns input int MaxDisplayPatterns = 100; // Limit to avoid chart clutter // Alert settings input bool EnableAlerts = true; // Master switch for all alerts input bool SoundAlerts = true; // Play sound for new detection input bool PushNotifications = false; // Send push message to MT5 mobile input bool EmailAlerts = false; // Send detection details via email input int AlertCooldown = 60; // Seconds before same pattern alerts again
Als Nächstes befassen wir uns mit den unterstützten Mustern und der Erkennungslogik, die die internen Algorithmen zur Identifizierung von Kerzenmuster anhand der historischen Kursdaten erläutert.
2. Unterstützte Patterns & Erkennungslogik
In diesem Bereich liegt die Fähigkeit des Tools, klassische Kerzenmuster korrekt zu erkennen. Das Erkennungssystem des EA basiert auf einer strukturierten Bibliothek von Mustern, die jeweils einer speziellen Funktion zugeordnet sind, die eine bestimmte Anzahl von Balken analysiert.
Die Muster sind nach der Anzahl der benötigten Kerzen gruppiert:
Kerzenmuster aus einer Kerze
Diese werden anhand der Eigenschaften eines einzelnen Balkens identifiziert, wie Körpergröße, Schattenlänge und relative Position innerhalb seines Bereichs.
- Doji: Kennzeichnend ist, dass der Eröffnungs- und der Schlusskurs sehr nahe beieinander liegen, was auf eine Unentschlossenheit des Marktes hindeutet.
- Hammer und Umgekehrter Hammer: Kleine Körper in der Nähe des Hochs oder Tiefs der Kerze mit langen Dochten, die auf mögliche Umkehrungen hinweisen.
- Hanging Man: Ähnliche Körperform wie der Hammer, der jedoch nach einem Aufwärtstrend auftritt und möglicherweise einen Abwärtsdruck signalisiert.
- Shooting Star: Kleiner Körper in der Nähe des Tiefs mit einem langen oberen Docht, der auf eine Ablehnung bei höheren Preisen hindeutet.
- Spinning Top: Mäßige Schatten und ein kleiner Körper, der oft ein Marktgleichgewicht widerspiegelt.
- Marubozu: Eine Kerze mit wenig oder gar keinem Schatten, die eine starke Richtungsdynamik aufweist.
Muster aus zwei Kerzen
Diese beruhen auf der Interaktion zwischen aufeinanderfolgenden Stäben, z. B. der Verschlingung des Körpers eines Stabs durch einen anderen.
- Aufwärts-Engulfing / Abwärts-Engulfing: Eine Kerze, deren Körper die vorherige verschlingt, deutet auf einen Richtungswechsel hin.
- Piercing Line / Dark Cloud Cover: Die Position der zweiten Kerze kehrt die Bewegung der vorangegangenen Kerze teilweise um und signalisiert häufig Trendwechsel.
- Aufwärts-Harami / Abwärts-Harami: Der Körper der ersten Kerze enthält die zweite, was auf einen möglichen Schwungverlust hindeutet.
- Tweezer Top / Tweezer Bottom: Übereinstimmende Höchst- oder Tiefstwerte auf aufeinanderfolgenden Balken, die auf eine starke Unterstützung oder Ablehnung des Widerstands hinweisen.
Diese Formationen bestehen aus drei aufeinanderfolgenden Balken und stellen oft anhaltende Stimmungsänderungen dar.
- Morgenstern/Abendstern: Eine starke Kerze, gefolgt von einer kleinen unentschlossenen Kerze, dann eine starke Kerze in die entgegengesetzte Richtung.
- Drei weiße Soldaten: Drei aufeinanderfolgende Aufwärtskerzen, die typischerweise ein starkes Aufwärtsmomentum anzeigen.
- Drei schwarze Krähen: Drei aufeinanderfolgende Abwärtskerzen, die oft einen starken Abwärtsdruck signalisieren.
Algorithmischer Erkennungsansatz
Der EA verwendet die folgenden allgemeinen Schritte, um festzustellen, ob ein Muster bei einem bestimmten Index in den historischen Daten (Kursfeld) vorhanden ist:
1. Daten abrufen: Mit CopyRates wird ein Segment historischer Kurse (Eröffnungs-, Höchst-, Tiefst-, Schlusskurs und Volumen) in ein MqlRates-Array geladen.
2. Bedingungen für die Kerzenzählung prüfen: Jede Erkennungsfunktion prüft zunächst, ob genügend Balken für die Analyse zur Verfügung stehen (z. B. wird ein Dreifach-Kerzenmuster nicht ausgeführt, wenn nach dem ausgewählten Index weniger als drei Kerzen vorhanden sind).
3. Prüfungen auf anteilige/relative Position anwenden:
Die Berechnungen umfassen
- Körpergröße vs. Gesamtkerzenbereich
- Obere/untere Schattenlänge
- Position der Kerze im Verhältnis zu den vorherigen Balken
- Verhältnis zwischen Eröffnungs- und Schlusskurs
4. Bestätigung der Musterübereinstimmung: Wenn alle logischen Bedingungen mit der gespeicherten Definition übereinstimmen (z. B. für einen Doji, Körpergröße < definierter kleiner Schwellenwert), gibt die Funktion eine Zeichenkette mit dem Musternamen zurück.
5. Markieren und fortfahren: Sobald die Formation erkannt wurde, ruft der EA die Mustermarkierungsfunktion auf, um die Formation auf dem Chart visuell hervorzuheben und in der Ergebnisanzeige zu vermerken.

Dieser Ansatz stellt sicher, dass die Regeln jedes Musters in einer eigenen Funktion isoliert sind, wodurch die Bibliothek leicht erweitert werden kann. Das Hinzufügen eines neuen Musters erfordert lediglich das Schreiben einer Erkennungsfunktion und das Aktualisieren der Scan-Arrays – eine größere Umstrukturierung des Codes ist nicht erforderlich.
//+------------------------------------------------------------------+ //| Detect Bullish Engulfing pattern | //+------------------------------------------------------------------+ bool isBullishEngulfing(int index, const MqlRates &rates[]) { // Make sure we have at least 2 bars from 'index' if(index+1 >= ArraySize(rates)) return false; double prevOpen = rates[index+1].open; double prevClose = rates[index+1].close; double currOpen = rates[index].open; double currClose = rates[index].close; // Check if current candle bullish and fully engulfs previous body if(currClose > currOpen && // Current bullish prevClose < prevOpen && // Previous bearish currOpen < prevClose && // Current's open below previous close currClose > prevOpen) // Current's close above previous open { return true; } return false; } //+------------------------------------------------------------------+ //| Detect Doji pattern | //+------------------------------------------------------------------+ bool isDoji(int index, const MqlRates &rates[]) { if(index >= ArraySize(rates)) return false; double open = rates[index].open; double close = rates[index].close; double high = rates[index].high; double low = rates[index].low; double body = MathAbs(close - open); double range = high - low; // Define the ratio threshold for Doji double dojiRatio = 0.1; // 10% of total range if(body <= (range * dojiRatio)) return true; return false; }
3. Überwachungslogik in Echtzeit
Eine der herausragenden Eigenschaften von CandlePatternSearch.mq5 ist seine Fähigkeit, im Echtzeitmodus zu arbeiten. Anstatt nur historische Daten zu scannen, überwacht der EA aktiv jede neu gebildete Kerze auf dem Charts und prüft sofort, ob eines der unterstützten Muster vorhanden ist, wenn sich der Markt weiterentwickelt. Diese Funktion ist besonders wertvoll für Händler, die sofort auf neue Marktsignale reagieren wollen und sich nicht nur auf zurückanalysierte Daten verlassen wollen. Durch die Verknüpfung mit dem Ereignis OnTick des MetaTrader 5 wertet das System bei jeder Kursaktualisierung die Bedingungen aus und behält gleichzeitig die Abklingzeiten der Alarme im Auge, um übermäßige Wiederholungen zu vermeiden.
Prozess Gliederung
- Triggerpunkt: Jeder Markttick aktiviert die Überwachungsroutine über die Ereignisbehandlung von OnTick.
- Prüfung des Abschlusses der Kerze: Der EA prüft, ob der letzte Balken (Index 0) geschlossen wurde oder ob ein neuer Balken begonnen hat. Dadurch werden falsche Erkennungen von sich in der Mitte bildenden Kerzen vermieden.
- Mustersuche: Die jüngsten Kerzen – in der Regel die letzten 3 bis 5 Balken – werden mit jeder Erkennungsfunktion in der Bibliothek verglichen.
- Durchsetzung der Abklingzeit: Wurde dasselbe Muster erst kürzlich erkannt, verhindert ein Cooldown-Timer eine erneute Alarmierung innerhalb des in AlertCooldown festgelegten Zeitraums.
- Markieren und melden: Gültige Muster werden visuell im Charts markiert und die konfigurierten Benachrichtigungsmodi (Ton, Pop-up, Push, E-Mail) werden ausgelöst.
Vorteile
- Unmittelbares Feedback: Händler wissen über neue Setups Bescheid, sobald sie erscheinen.
- Geringerer Suchaufwand: Nur die aktuellsten Kerzen werden live analysiert, was die CPU-Belastung im Vergleich zum Scannen von Hunderten von historischen Balken minimiert.
- Anpassungsfähige Reaktion: Die Meldungen können umgeschaltet werden, ohne dass der EA neu gestartet werden muss, was eine Kontrolle in volatilen Phasen ermöglicht.
// Store last alert times for each pattern datetime lastAlertTime[50]; // assuming 50 possible patterns indexed //+------------------------------------------------------------------+ //| Tick handler for real-time monitoring | //+------------------------------------------------------------------+ void OnTick() { static datetime lastBarTime = 0; // Get latest bar time datetime currentBarTime = iTime(_Symbol, _Period, 0); // Check if a new bar has formed if(currentBarTime != lastBarTime) { lastBarTime = currentBarTime; // Copy recent candle data (last 5 bars) MqlRates rates[]; if(CopyRates(_Symbol, _Period, 0, 5, rates) < 5) return; // Scan patterns for last completed candle (index 1) for(int p = 0; p < totalPatterns; p++) { bool detected = patterns[p].function(1, rates); // Check cooldown before alerting if(detected && (TimeCurrent() - lastAlertTime[p] > AlertCooldown)) { markPatternOnChart(p, 1, rates); sendAlerts(p, rates[1]); lastAlertTime[p] = TimeCurrent(); } } } }
Wir verfolgen die lastBarTime, sodass die Suche nur läuft, wenn eine neue Kerze abgeschlossen ist. Der EA kopiert die letzten 5 Balken und führt dann jede Erkennungsfunktion auf dem letzten abgeschlossenen Balken (Index 1) aus. lastAlertTime[] hält fest, wann jedes Muster zuletzt erkannt wurde, um Alarm-Spam während volatiler Marktbewegungen zu vermeiden.
4. Mechanismus der Meldung
Das System der Meldungen ist so konzipiert, dass es den Händler benachrichtigt, sobald ein ausgewähltes Kerzenmuster bestätigt wird, entweder während des historischen Scannens oder im Echtzeitmodus. Seine Flexibilität liegt in der Unterstützung mehrerer Kommunikationskanäle, die je nach den Präferenzen des Händlers unabhängig voneinander oder zusammen arbeiten können.
Unterstützte Warntypen
- Pop-Up-Benachrichtigung für Charts: Eine einfache In-Terminal-Meldung, die über Alert() angezeigt wird – ideal für die schnelle Aufmerksamkeit bei der aktiven Beobachtung von Charts.
- Ton-Alarm: Es wird eine Audiodatei wiedergegeben, wenn ein Muster erkannt wird. Dies ist nützlich für Händler, die sich vom Bildschirm entfernen, aber in der Nähe des Arbeitsplatzes bleiben.
- Push-Benachrichtigung: Sendet eine Nachricht an die MetaTrader 5 Mobile App, die eine Fernüberwachung von Setups in Echtzeit ermöglicht. Dies erfordert eine Push-Konfiguration in den Einstellungen des MetaTrader 5-Terminals.
- E-Mail-Benachrichtigung: Sendet eine formatierte E-Mail mit Symbol, Zeitrahmen, Mustername und Erkennungszeit. Dies ist nützlich für Händler, die MetaTrader 5 auf einem VPS betreiben oder für längere Zeit von der Plattform getrennt sind.

Interner Arbeitsablauf
Wenn eine Erkennung erfolgt, wird die Warnmeldung durch den Aufruf der Funktion markPatternOnChart oder der Erkennung ausgelöst. Der EA prüft das globale Flag EnableAlerts. Für jeden aktivierten Kanal wird die entsprechende Funktion ausgeführt, zum Beispiel:
- Alert() für Pop-ups auf dem Chart
- PlaySound() für Audio
- SendNotification() für Push
- SendMail() für E-Mail
Abklingzeiten pro Muster werden erzwungen, um wiederholte Alarme zu vermeiden.
//+------------------------------------------------------------------+ //| Send Alerts for a detected pattern | //+------------------------------------------------------------------+ void sendAlerts(int patternIndex, MqlRates candle) { // Retrieve pattern name string name = patterns[patternIndex].name; // Build common message string msg = StringFormat("Pattern Detected: %s on %s M%d\nOpen: %.5f | Close: %.5f | Time: %s", name, _Symbol, _Period, candle.open, candle.close, TimeToString(candle.time, TIME_DATE|TIME_MINUTES)); // Chart pop-up if(EnableAlerts) Alert(msg); // Sound alert if(SoundAlerts) PlaySound("alert.wav"); // Make sure file exists in Sounds folder // Push notification if(PushNotifications) SendNotification(msg); // Email alert if(EmailAlerts) SendMail("CandlePattern Alert", msg); }
Alle Warnmeldungen haben den gleichen Kerntext (msg), damit sie über alle Kanäle hinweg konsistent sind. Die Funktion prüft vor der Ausführung den booleschen Parameter jedes Kanals. Das Hinzufügen neuer Kanäle (z. B. Protokollierung in eine Datei, Senden an eine externe API) würde einfach einen weiteren bedingten Block erfordern. Der nächste logische Schritt in der technischen Architektur ist die grafische Nutzeroberfläche (GUI), die das interaktive Bedienfeld auf dem Charts beschreibt und ein weiteres praktisches Snippet enthält, das zeigt, wie die Schaltflächenklicks verarbeitet werden.
5. Implementierung der grafischen Nutzeroberfläche (GUI)
Eines der Merkmale, die CandlePatternSearch.mq5 so praktisch machen, ist das integrierte Kontrollfeld auf dem Chart. Anstatt dass Händler jedes Mal die Eingaben über das MetaTrader 5-Eigenschaftenfenster anpassen müssen, bietet der EA eine interaktive Schnittstelle, auf der Aktionen wie das Starten einer Suche, das Scannen aller Muster, das Löschen von Markierungen oder das Umschalten der Echtzeitüberwachung mit einem einzigen Klick sofort ausgeführt werden können. Die GUI verwendet MetaTrader 5 Chart-Objekte, vor allem OBJ_BUTTON, OBJ_LABEL und einfache Formen für das Layout, sodass sie ohne zusätzliche Bibliotheken auskommt. Jede Schaltfläche ist mit einem Event-Handler verbunden, der Klicks interpretiert (OnChartEvent) und die richtige Funktion innerhalb des EA ausführt.
Wichtige GUI-Elemente
- Suchfeld: Eine editierbare Eingabe, in die der Nutzer den Namen eines Musters eingeben kann, um es gezielt zu suchen.
- Schaltfläche Search: Startet eine Suche in der Historie nach dem eingegebenen Muster und markiert alle gefundenen Vorkommen.
- Schaltfläche Scan All: Löst einen vollständigen Multi-Pattern-Scan über den Rückblickzeitraum aus.
- Schaltfläche Clear: Entfernt alle Markierungen aus dem Charts, um den Arbeitsbereich zu leeren.
- Monitor Toggle: Aktiviert oder deaktiviert den Echtzeit-Überwachungsmodus.
- Statusanzeige: Ein kleines Rechteck, das den aktuellen Modus, die erkannten Zählungen oder das zuletzt gefundene Muster anzeigt.
Vorteile
- Direkte Kontrolle ohne Neustart des EA: Veränderungen treten sofort ein.
- Schneller Arbeitsablauf: Verringert den Aufwand im Vergleich zur Navigation in den Eingabevariablen.
- Visuelles Feedback: Die Nutzer sehen eine unmittelbare Bestätigung durch Chart-Elemente.
GUI-Schaltflächen erstellen
//+------------------------------------------------------------------+ //| Create basic GUI buttons on initialization | //+------------------------------------------------------------------+ void createGUI() { // Search Button ObjectCreate(0, "btnSearch", OBJ_BUTTON, 0, 0, 0); ObjectSetInteger(0, "btnSearch", OBJPROP_XDISTANCE, 20); ObjectSetInteger(0, "btnSearch", OBJPROP_YDISTANCE, 20); ObjectSetInteger(0, "btnSearch", OBJPROP_XSIZE, 80); ObjectSetInteger(0, "btnSearch", OBJPROP_YSIZE, 20); ObjectSetString(0, "btnSearch", OBJPROP_TEXT, "Search"); // Scan All Button ObjectCreate(0, "btnScanAll", OBJ_BUTTON, 0, 0, 0); ObjectSetInteger(0, "btnScanAll", OBJPROP_XDISTANCE, 110); ObjectSetInteger(0, "btnScanAll", OBJPROP_YDISTANCE, 20); ObjectSetInteger(0, "btnScanAll", OBJPROP_XSIZE, 80); ObjectSetInteger(0, "btnScanAll", OBJPROP_YSIZE, 20); ObjectSetString(0, "btnScanAll", OBJPROP_TEXT, "Scan All"); // Clear Button ObjectCreate(0, "btnClear", OBJ_BUTTON, 0, 0, 0); ObjectSetInteger(0, "btnClear", OBJPROP_XDISTANCE, 200); ObjectSetInteger(0, "btnClear", OBJPROP_YDISTANCE, 20); ObjectSetInteger(0, "btnClear", OBJPROP_XSIZE, 80); ObjectSetInteger(0, "btnClear", OBJPROP_YSIZE, 20); ObjectSetString(0, "btnClear", OBJPROP_TEXT, "Clear"); }
Handhabung von Tastenklicks
//+------------------------------------------------------------------+ //| Handle chart events such as button clicks | //+------------------------------------------------------------------+ void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { // Check if the event is an object click if(id == CHARTEVENT_OBJECT_CLICK) { if(sparam == "btnSearch") { searchPattern(patternNameInput); // custom function } else if(sparam == "btnScanAll") { scanAllPatterns(); } else if(sparam == "btnClear") { clearHighlights(); } } }
- Die Funktion createGUI() erstellt die Schaltflächen mit ihrer Größe, Position und Beschriftung.
- Die Funktion OnChartEvent() wartet auf Klicks – sparam enthält den Objektnamen.
Jeder Name einer Schaltfläche entspricht einer bestimmten EA-Funktion (Suchen, Scannen, Löschen). Das nächste Unterkapitel, das wir behandeln müssen, ist die Hervorhebung der Muster im Chart, in dem erklärt wird, wie Erkennungen visuell markiert werden (Rechtecke, Beschriftungen, Farbkodierung) und warum dies für die Analyse wichtig ist.
6. Hervorhebung der Muster im Chart
Die visuelle Darstellung ist einer der wichtigsten Aspekte von CandlePatternSearch.mq5. Sobald ein Kerzenmuster erkannt wird – sei es durch eine gezielte Suche, einen vollständigen Scan oder eine Echtzeit-Überwachung – markiert der EA die Formation direkt auf dem Chart zur sofortigen Erkennung.
Methode für das Hervorheben
Das Werkzeug verwendet rechteckige Chartsobjekte (OBJ_RECTANGLE), um die Balken, aus denen ein Muster besteht, abzudecken. Jedes Rechteck wird über den Höchst- und Tiefstkurs der Kerze gezeichnet und erstreckt sich horizontal von der ersten bis zur letzten Kerze des Musters. Auf diese Weise sind selbst Mehrkerzenformationen klar und deutlich zu erkennen.
Zur Unterscheidung der Mustertypen:
- Jeder Typ hat eine eigene Farbe (anpassbar über die PatternColor-Eingabe oder pro Muster).
- Die Transparenz ist so eingestellt, dass die zugrunde liegenden Chartskerzen nicht verdeckt werden.
- Optionale Textbeschriftungen können über oder unter dem Rechteck platziert werden, um die Formation zu benennen.
Vorteile der visuellen Hervorhebung
Die visuelle Hervorhebungsfunktion bietet mehrere Vorteile. Sie bietet eine sofortige Erkennung, die es Händlern ermöglicht, Kerzenmuster direkt auf dem Chart zu erkennen, ohne Protokolle lesen oder sich ausschließlich auf Warnungen verlassen zu müssen. Sie unterstützt auch historische Studien, die es dem Nutzer ermöglichen, durch vergangene Daten zu blättern und zu beobachten, wie der Preis nach ähnlichen Setups reagiert hat. Und schließlich dient sie als Instrument für strukturiertes Lernen – Händler, die die Kerzen-Analyse noch nicht beherrschen, können durch die Darstellung von Mustern unter realen Marktbedingungen ihre Erkennungsfähigkeiten verbessern und ihr analytisches Vertrauen stärken.
//+------------------------------------------------------------------+ //| Mark detected pattern on chart | //+------------------------------------------------------------------+ void markPatternOnChart(int patternIndex, int startIndex, const MqlRates &rates[]) { string name = patterns[patternIndex].name; string objName = StringFormat("%s_%d", name, startIndex); // Determine high and low for the pattern double highPrice = rates[startIndex].high; double lowPrice = rates[startIndex].low; int candleCount = patterns[patternIndex].barsRequired; for(int i = 0; i < candleCount; i++) { if(rates[startIndex+i].high > highPrice) highPrice = rates[startIndex+i].high; if(rates[startIndex+i].low < lowPrice) lowPrice = rates[startIndex+i].low; } datetime startTime = rates[startIndex + candleCount - 1].time; datetime endTime = rates[startIndex].time; // Create rectangle object ObjectCreate(0, objName, OBJ_RECTANGLE, 0, endTime, highPrice, startTime, lowPrice); ObjectSetInteger(0, objName, OBJPROP_COLOR, PatternColor); ObjectSetInteger(0, objName, OBJPROP_STYLE, STYLE_SOLID); ObjectSetInteger(0, objName, OBJPROP_WIDTH, 1); ObjectSetInteger(0, objName, OBJPROP_FILL, true); ObjectSetInteger(0, objName, OBJPROP_ZORDER, 0); }
Die Funktion markPatternOnChart() zeichnet ein Rechteck, das sich über die Kerzen erstreckt, die das erkannte Muster bilden. Es berechnet den höchsten Höchstwert und den niedrigsten Tiefstwert innerhalb des Musterbereichs, um die vertikalen Grenzen des Rechtecks genau zu bestimmen. Die Eigenschaft _barsRequired stellt sicher, dass Muster aus mehreren Kerzen vollständig abgedeckt sind.
7. Suchen vs. Scannen aller Muster
CandlePatternSearch.mq5 bietet zwei verschiedene Erkennungsmodi, die auf derselben Erkennungslogik beruhen, aber unterschiedlichen Zwecken dienen.
Modus der Mustersuche
Bei der Mustersuche gibt der Nutzer die genaue Kerzenmuster an, die gesucht werden soll – entweder durch Eingabe des Namens in das Suchfeld auf dem Chart oder durch Übergabe des Namens als Argument an die Suchfunktion. Der Expert Advisor verarbeitet dann die historischen Daten innerhalb des eingestellten LookbackPeriods und markiert nur die Ereignisse, die dem angeforderten Muster entsprechen. Dieser gezielte Ansatz ist gut geeignet, um die historische Performance eines einzelnen Setups zu testen, das Ein- und Ausstiegsverhalten in Bezug auf diese Formation zu untersuchen und Strategien zu entwickeln, die sich auf ein bestimmtes Signal konzentrieren.
Vollständiger Scan-Modus
Im vollständigen Scan-Modus verfolgt der EA einen breiteren Ansatz, ignoriert jeden Namensfilter und wertet jedes Muster in seiner internen Bibliothek anhand der Chartdaten aus. Er hebt alle Treffer innerhalb des Rückblickbereichs hervor, unabhängig vom Typ. Dieser Modus ist besonders nützlich für die Erstellung eines statistischen Überblicks über die Marktstimmung, die Untersuchung der Häufigkeit und des Zusammenspiels mehrerer Setups oder das schnelle Erkennen von Handelsgelegenheiten ohne Voreingenommenheit für ein bestimmtes Signal.
Aus Sicht der Leistung ist die Mustersuche im Allgemeinen schneller, da sie nur eine Erkennungsfunktion pro Kerzenindex ausführt. Ein vollständiges Scannen erfordert, dass alle Erkennungsfunktionen für jeden analysierten Balken ausgeführt werden, was bei einer großen Musterbibliothek schwerer sein kann, aber die optimierte Struktur des EA sorgt dafür, dass er auch über längere Zeiträume hinweg effizient bleibt.
// Search for a specific pattern void searchPattern(string patternName) { MqlRates rates[]; if(CopyRates(_Symbol, _Period, 0, LookbackPeriod, rates) <= 0) return; for(int i = LookbackPeriod-1; i >= 0; i--) { if(matchPatternByName(patternName, i, rates)) markPatternOnChart(getPatternIndex(patternName), i, rates); } } // Scan all patterns in the library void scanAllPatterns() { MqlRates rates[]; if(CopyRates(_Symbol, _Period, 0, LookbackPeriod, rates) <= 0) return; for(int i = LookbackPeriod-1; i >= 0; i--) { for(int p = 0; p < totalPatterns; p++) { if(patterns[p].function(i, rates)) markPatternOnChart(p, i, rates); } } }
- searchPattern() durchläuft die historischen Balken und ruft nur die Match-Funktion für das angegebene Muster auf.
- scanAllPatterns() durchläuft alle Muster für jeden historischen Kerzenindex.
- Beide Funktionen rufen markPatternOnChart() auf, um gefundene Übereinstimmungen visuell hervorzuheben.
Tests und Ergebnisse
Um die Genauigkeit und praktische Anwendbarkeit von CandlePatternSearch.mq5 zu bewerten, wurden mehrere Tests mit synthetischen Instrumenten mit hoher Volatilität und Standard-Devisenpaaren durchgeführt. Die hier gezeigten Screenshots zeigen den EA, der auf dem Volatility 75 (1s) Index im M5-Zeitrahmen läuft und Tick-by-Tick-Daten für die Hochfrequenzbeobachtung verwendet.

Während des Tests für das Setup eines Aufwärts-Engulfing überprüfte der EA 1.000 historische Balken innerhalb der ausgewählten LookbackPeriode und identifizierte erfolgreich 52 Vorkommen, die der definierten Musterlogik entsprachen. Jede Erkennung wurde direkt auf dem Chart durch rechteckige blaue Überlagerungen hervorgehoben, wobei jedes Feld den Zwei-Kerzen-Bereich der Engulfing-Formation abdeckte. Diese unmittelbare visuelle Markierung ermöglichte eine schnelle Erkennung des Aufbaus, ohne dass man in den Protokolldaten navigieren musste.

Das GUI-Bedienfeld auf der Karte erwies sich als äußerst effizient für die Prüfung von Arbeitsabläufen. Wenn man den Namen des Musters in das Suchfeld eingibt und auf „Search“ klickt, ist die Suche in weniger als einer Sekunde abgeschlossen, selbst bei einem regen Tickfluss aus dem Volatilitätsindex-Feed. Das Tool lieferte nicht nur die markierten Muster zurück, sondern aktualisierte auch die Statusanzeige mit der Gesamtzahl der Erkennungen und dem Zeitstempel des letzten Scans, sodass Wiederholungstests zeitlich festgelegt und validiert werden konnten.
Bei wiederholten Versuchen mit verschiedenen Instrumenten (z. B. EURUSD, USDJPY, NZDUSD) behielt der EA seine Genauigkeit bei, ohne dass es zu Fehlalarmen jenseits der definierten Schwellenwerte für das Kerzenverhältnis kam. Der Modus Full Scan war in der Lage, die gesamte Kerzen-Bibliothek auszuwerten und gemischte Erkennungstypen in einem einzigen Vorgang zurückzuliefern. Bei extrem hoher Volatilität, wie z. B. beim Volatility 75 Index, stieg die Musterhäufigkeit jedoch erheblich an, sodass eine Mäßigung über die Eingabe von MaxDisplayPatterns erforderlich war, um visuelle Unordnung zu vermeiden.

Wichtigste Beobachtungen zu den Ergebnissen:
- Genauigkeit: Die Erkennungslogik stimmte bei der visuellen und manuellen Gegenkontrolle mit den Definitionen in den Lehrbüchern überein.
- Geschwindigkeit: Die Scans wurden bei Standard-Devisenmarktdaten fast sofort und bei umfangreichen synthetischen Indizes innerhalb einer akzeptablen Zeit abgeschlossen.
- Nutzerfreundlichkeit: Die grafische Nutzeroberfläche ermöglichte einen schnellen Wechsel zwischen gezielter Suche und vollständigem Scan, ohne dass der EA angehalten oder neu kompiliert werden musste.
- Nutzwert lernen: Für neuere Händler wurde die Erkennung von Kerzenmustern anhand von Live- und historischen Daten durch visuelle Markierungen verstärkt.
Diese Ergebnisse bestätigen, dass CandlePatternSearch.mq5 sowohl für gezielte Musterstudien als auch für eine breit angelegte Marktbeobachtung zuverlässig ist und aufgrund seiner Schnelligkeit und Übersichtlichkeit sowohl im Echtzeit- als auch im Post-Analyse-Kontext nützlich ist.
Schlussfolgerung
Die Entwicklung und das Testen von CandlePatternSearch.mq5 zeigen, dass ein gut strukturierter, modularer Ansatz zur Erkennung von Kerzenmustern sowohl Genauigkeit als auch operative Effizienz in der MetaTrader 5-Umgebung bieten kann. Durch die Kombination einer umfangreichen Musterbibliothek, eines reaktionsschnellen On-Chart-Bedienfelds, Echtzeit-Überwachung und Multi-Channel-Warnfunktionen überbrückt das Tool die Lücke zwischen theoretischen Musterdefinitionen und ihrer praktischen Anwendung in Live-Märkten.
Tests sowohl mit synthetischen Indizes als auch mit traditionellen Devisenpaaren bestätigten, dass die Erkennungsergebnisse mit den Lehrbuchkriterien übereinstimmten, während das visuelle Hervorhebungssystem eine sofortige Erkennung und einen wertvollen historischen Kontext lieferte. Die Möglichkeit, nahtlos zwischen der gezielten Suche und dem Full-Scan-Modus zu wechseln, ohne den Betrieb des Expert Advisors zu unterbrechen, hat die Nutzerfreundlichkeit sowohl bei der Sondierungsanalyse als auch bei aktiven Handelssitzungen weiter verbessert. Für diskretionäre Trader bietet der EA eine intuitive Möglichkeit, die Fähigkeiten zur Mustererkennung zu stärken und in den Entscheidungsprozess zu integrieren. Für systematische Händler und Entwickler bieten die modulare Erkennungslogik und die konfigurierbaren Eingaben eine solide Grundlage für die Erweiterung des Tools zu automatischen oder halbautomatischen Strategien.
Kurz gesagt, CandlePatternSearch.mq5 ist mehr als nur ein Dienstprogramm zur Mustermarkierung – es ist ein flexibler analytischer Rahmen, der disziplinierte Handelspraktiken, tiefgreifende statistische Untersuchungen und Echtzeit-Marktkenntnisse unterstützt. Sein Design macht ihn zu einem Gewinn für jeden Händler, der Klarheit in der oft komplexen Sprache der Kerzenmuster sucht.
Lesen Sie meine anderen Artikel.
Übersetzt aus dem Englischen von MetaQuotes Ltd.
Originalartikel: https://www.mql5.com/en/articles/20313
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.
Entwicklung einer Handelsstrategie: Ansatz der Pseudo-Pearson-Korrelation
Aufbau von KI-gestützten Handelssystemen in MQL5 (Teil 5): Hinzufügen einer ausklappbaren Seitenleiste mit Chat-Popups
Eine alternative Log-datei mit der Verwendung der HTML und CSS
Integration von MQL5 mit Datenverarbeitungspaketen (Teil 6): Zusammenführung von Markt-Feedback und Modellanpassung
- 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.