Entwicklung des Price Action Analysis Toolkit (Teil 53): Pattern Density Heatmap zur Entdeckung von Unterstützungs- und Widerstandszonen
Einführung
In Teil 51 unserer Serie zur Entwicklung des Price Action Analysis Toolkits haben wir ein Tool vorgestellt, das Kerzenmuster direkt im Chart scannt und hervorhebt. Die Logik war einfach, aber wirkungsvoll: Geben Sie einen Musternamen ein, drücken Sie die Suchtaste, und das Tool findet alle historischen Vorkommnisse innerhalb eines definierten Rückblickzeitraums, setzt die Überwachung fort und warnt in Echtzeit, sobald das Muster wieder auftritt. Damals lag der Schwerpunkt ausschließlich auf der Identifizierung der Muster selbst. Mir war nicht klar, dass diese historischen Erkennungen einen viel größeren Zweck erfüllen könnten: Sie sollten Preisniveaus aufzeigen, auf denen der Markt wiederholt reagiert hat. Im Laufe der Zeit verhalten sich solche Niveaus oft als Unterstützung, ein Boden, an dem der Preis nach oben abprallt, oder als Widerstand, eine Obergrenze, an der der Preis nach unten abprallt. Die Kenntnis dieser Niveaus im Voraus ermöglicht es Händlern, das Marktverhalten zu antizipieren, das Timing für den Ein- und Ausstieg zu verfeinern, Stopps strategischer zu platzieren und den blinden Handel in reaktionsstarken Bereichen zu vermeiden.
Aus dieser Erkenntnis heraus war der nächste logische Schritt die Entwicklung eines Systems, das vergangene Kerzenerkennungen in Preisdichtezonen umwandelt und dann überwacht, wie kommende Preisbewegungen mit ihnen interagieren. Dies kann Händlern helfen, proaktiv zu handeln, wenn sich der Preis einem statistisch signifikanten Niveau nähert, anstatt zu spät zu reagieren.
In diesem Artikel stellen wir die Pattern Density Heatmap vor, ein Tool, das diese Zonen automatisch aus früheren Kerzenaktivitäten erstellt und visualisiert, künftige Kursbewegungen um sie herum verfolgt und Warnungen auslöst, wenn sich der Kurs jeder Zone nähert. Wir beginnen mit einem Überblick und dem Zweck, untersuchen dann die MQL5-Implementierung, diskutieren die Ergebnisse und ziehen schließlich unser Fazit.
Nachfolgend finden Sie das Inhaltsverzeichnis, gefolgt von einer ausführlichen Beschreibung der einzelnen Abschnitte.
Überblick und Zweck
Beim Handel kann es nützlich sein, ein einzelnes Kerzenmuster zu erkennen, aber es ist die Historie, die von wiederholten Mustern zu denselben Preisen erzählt, die die tiefergehende Marktstruktur offenbart.

Die Pattern Density Heatmap basiert auf dieser Idee. Anstatt jede Formation als isoliertes Ereignis zu markieren, erfasst und visualisiert es die Preiszonen, in denen sich mehrere Muster im Laufe der Zeit angehäuft haben.

Diese Cluster sind selten zufällig; sie bilden sich um Niveaus, auf denen sich der Auftragsfluss durchgängig verschoben hat, wodurch Bereiche entstehen, die als dynamische Unterstützung oder Widerstand wirken. Da sich die Zuordnung an das jüngste Marktverhalten anpasst, spiegelt sie wider, wo Teilnehmer in der Vergangenheit mit Überzeugung Positionen eingegangen sind – und wo sie dies möglicherweise wieder machen werden.
Von der Erkennung von Mustern bis zur Preiskartierung
Die meisten Tools zur Mustererkennung markieren einfach einzelne Kerzen, bei denen ein Muster aufgetreten ist. Dieser Ansatz von „Zeigen-und-Markieren“ ist zwar hilfreich, lässt aber einen tieferen Marktkontext vermissen, da er keine Informationen darüber liefert, wie oft ähnliche Reaktionen bei vergleichbaren Preisniveaus auftreten. Die Pattern Density Heatmap schließt diese Lücke, indem sie umfangreiche historische Daten – oft Tausende Balken – scannt und jeden Erkennungspreis aus mehreren Musterprüfungen protokolliert. Diese rohen Erfassungspunkte werden dann zu diskreten Preisbereichen aggregiert und in Bereiche gruppiert, die Wiederholungsraten auf dem Markt darstellen.
Nach der Gruppierung wird jedes Feld anhand der folgenden Kriterien bewertet
- Die rohe Anzahl der Entdeckungen darin.
- Wie aktuell diese Entdeckungen waren, was den neuen Marktreaktionen zusätzliches Gewicht verleiht.

Auf diese Weise entsteht eine statistische „Zuordnung“ der Marktreaktionen, die rohe visuelle Mustererkennungen in quantifiziertes Marktverhalten umwandelt.
Warum diese Zonen wichtig sind
Preiszonen, die aus wiederholten Marktreaktionen abgeleitet werden, bieten mehrere Handelsvorteile, die einzelne Erkennungen nicht bieten können.

- Antizipation statt Reaktion – Zonen mit hoher Dichte ermöglichen es den Händlern, sich im Voraus vorzubereiten. Wenn sich der Kurs einem solchen Bereich nähert, kann man ein mögliches Ablehnungs- oder Ausbruchsverhalten vorhersehen und den Einstieg oder Ausstieg entsprechend planen.
- Bessere Risikoplatzierung – Stop-Loss-Aufträge, die jenseits von starken Zonen platziert werden, sind weniger wahrscheinlich von zufälligen Volatilitätsspitzen betroffen, was sowohl die Überlebensfähigkeit des Handels als auch die risikobereinigte Rendite verbessert.
- Synergie mit anderen Tools – Viele statistisch starke Zonen lassen sich auf natürliche Weise mit anderen Analysemethoden wie Fibonacci-Retracements, gleitenden Durchschnitten, Pivot-Punkten oder Trendlinien kombinieren. Diese Ausrichtung, die als Zusammenfluss bekannt ist, kann die Wahrscheinlichkeit, dass die Zone hält, drastisch erhöhen.
- Objektivität – Da diese Zonen aus tatsächlichen historischen Antworten und nicht aus subjektiven, visuell gezeichneten Linien gebildet werden, verringern sie Verzerrungen. Händler aller Qualifikationsstufen sehen die gleichen datengesteuerten Werte.
Integration in einen höheren Zeitrahmen
Die Marktstruktur ist vielschichtig, wobei bedeutende Niveaus, die auf breiteren Zeitskalen sichtbar sind, manchmal als dominierende Kräfte gegenüber dem Intraday-Geschehen wirken. Die Heatmap kann ihre Zonen anhand von Kerzenmustern überprüfen, die auf einem höheren Zeitrahmen (HTF) erkannt wurden. Wenn eine Zone sowohl im Handelszeitrahmen als auch in einem größeren Kontext auftaucht – z. B. ein Tageschart, das eine Zone auf H1 bestätigt –, gewinnt sie zusätzliche Bedeutung. Dieses Zusammentreffen mehrerer Zeitrahmen ist oft ein entscheidender Faktor bei der professionellen Handelsplanung, da es Bereiche mit starken Auftragsclustern zwischen verschiedenen Marktteilnehmern anzeigt.
Zweck über Handelsstile hinweg
Da die Pattern Density Heatmap parametergesteuert und ausgabeunabhängig ist, passt sie sich gut an verschiedene Handelsansätze an
1. Swing-Handel
- Händler, die mit Tages- oder 4-Stunden-Charts arbeiten, können breite historische Bandbreiten scannen und mittelfristige Marktreaktionszonen abbilden. Alarme können sie Stunden oder Tage im Voraus benachrichtigen, wenn sich der Preis diesen Bereichen nähert, sodass genügend Zeit bleibt, um den Ein- oder Ausstieg zu planen.
2. Scalping
- Kurzfristige Händler profitieren von schnell aktualisierten Dichtezonen auf Intraday-Charts. Diese Zonen identifizieren Wendepunkte mit hoher Wahrscheinlichkeit, die auf größeren Rahmen nicht sichtbar sind, aber für schnelle Handelsentscheidungen entscheidend sind.
3. Algorithmischer Handel
- Die Fähigkeit des Tools, vollständige Erkennungsdatensätze als CSV-Dateien zu exportieren, macht es für die systematische Modellierung äußerst attraktiv. Quantitative Entwickler können die exportierten Daten in statistische Engines oder Modelle für maschinelles Lernen einspeisen, Zonen bewerten, Eingaben optimieren und sie in die automatische Ausführungslogik integrieren.
| Stil | LookbackBars | Bincount | HTF-Bestätigung | Vorteile |
|---|---|---|---|---|
| Swing Trader | 2000 | 40 | Ja | Tage für die Vorausplanung |
| Scalper | 500 | 25 | No | Intraday-Umkehrpunkte |
| Algo-Händler | 3000 | 50 | Ja | Quantitative Integration |
Ersetzen von Subjektivität durch datengestützte Präzision
Der vielleicht wertvollste Beitrag der Pattern Density Heatmap ist ihre Fähigkeit, das Rätselraten bei der Zuordnung von Unterstützung und Widerstand zu beenden. Während sich der traditionelle diskretionäre Handel in hohem Maße auf die Beobachtung historischer Höchst- und Tiefststände stützt, werden mit diesem Tool Niveaus ermittelt, die sich ausschließlich aus quantifizierbaren, wiederholten Verhaltensweisen in der Kurshistorie ergeben. Der Händler profitiert nach wie vor von der intuitiven Klarheit eines Heatmap-Overlays, aber hinter jedem hervorgehobenen Band und jeder Zone steht eine numerische Aufzeichnung darüber, wie oft, wie kürzlich und mit welcher Vielfalt der Markt dort reagiert hat.
Indem sie statistische Strenge in eine traditionell visuelle Disziplin einbringt, überbrückt die Heatmap die Lücke zwischen klassischem Price Action Trading und moderner quantitativer Analyse – und gibt Händlern eine wiederholbare, empirisch basierte Karte, auf der sie die nächste bedeutende Marktbewegung erwarten können.
MQL5-Implementierung
Die Entwicklung der Pattern Density Heatmap als EA in MQL5 beginnt mit einem methodischen Design: Definition der nutzerkonfigurierbaren Parameter, Vorbereitung der Laufzeitumgebung, Aufbau einer interaktiven, chartbasierten Steuerungsschnittstelle, Implementierung der Pattern-Scanning-Engine und Unterstützung durch Bestätigungen in höheren Zeitrahmen, Echtzeit-Warnungen, präzises visuelles Rendering und optionalen Datenexport. Der Quellcode spiegelt diesen Arbeitsablauf durch klar segmentierte Funktionen wider, die nahtlos zusammenarbeiten.
Der Vorgang beginnt im MetaEditor, der in MetaTrader 5 über die Tastenkombination F4 aufgerufen wird. Wir erstellen eine neue Expert Advisor-Vorlage, nennen sie PatternDensityHeatmap.mq5 und definieren dann grundlegende Eigenschaften wie Copyright, Link und Version mit #property-Anweisungen. Diese Metadateneinträge sind wichtig für die Zuordnung von geistigem Eigentum, die Versionsverfolgung und die Rückverlinkung der Leser zu Aktualisierungen oder zur Seite des Autors auf MQL5.com.
#property copyright "Copyright 2025, MetaQuotes Ltd." #property link "https://www.mql5.com/en/users/lynnchris" #property version "1.00"
Als Nächstes legen wir die Eingabeparameter des EA fest – das sind die Einstellungen, die Händler im Dialogfeld „EA-Eigenschaften“ vornehmen können, bevor sie ihn an einen Chart anhängen. Die Parameter sind zur besseren Übersichtlichkeit in Funktionsgruppen gegliedert. Zu den Eingaben im Zusammenhang mit der Erkennung gehören die Zeichenkette PatternName, die mehrere durch Kommata getrennte Musterkennungen enthalten kann (z. B. „hammer,doji“), eine Ganzzahl für LookbackBars, die angibt, wie viele historische Balken durchsucht werden sollen, und BinCount, die die Auflösung der vertikalen Segmentierung des Preisbereichs in diskrete Bereiche bestimmt. MinHitsToShow legt den Schwellenwert für die Anzahl von Mustertreffern fest, die erforderlich sind, damit ein Bereich als sichtbare Zone eingestuft werden kann.
input string PatternName = "hammer,doji"; input int LookbackBars = 2000; input int BinCount = 40; input int MinHitsToShow= 2;
Die Steuerelemente für Anzeige und Gewichtung legen fest, wie die resultierenden Zonen angezeigt werden, angefangen bei ZoneBaseColor für den Grundton bis zu ShowSeparateLayers für die separate Anzeige jedes Mustertyps und UseRecencyDecay mit DecayHalfLife, um eine statistische Abklinggewichtung anzuwenden, bei der neuere Erkennungen gegenüber älteren bevorzugt werden.
input color ZoneBaseColor = clrDodgerBlue; input bool ShowSeparateLayers = true; input bool UseRecencyDecay = true; input double DecayHalfLife = 250.0;
Parameter für höhere Zeitrahmen und Warnungen definieren optionale Bestätigungen für mehrere Zeitrahmen (HTF_Timeframe und HTF_ConfirmZones), Annäherungsempfindlichkeit (ApproachThresholdPips) und Abkühlungszeiten (ZoneAlertCooldown).
input ENUM_TIMEFRAMES HTF_Timeframe = PERIOD_H1; input bool HTF_ConfirmZones = false; input int ApproachThresholdPips = 8; input int ZoneAlertCooldown = 300;
Die Eingaben für die Gestaltung der Marker, wie ShowPatternMarkers, MarkerColor und MarkerOpacity, stellen die genauen Kerzenmarker ein, die bei Erkennungen gezeichnet werden. Schließlich ermöglichen die Exportoptionen (ExportCSV, CSVFileName, AppendCSV) dem EA, seine Erkennungsdatensätze für die Offline-Analyse zu speichern und an bestehende Daten anzuhängen oder diese zu überschreiben.
input bool ShowPatternMarkers = true; input color MarkerColor = clrGold; input int MarkerOpacity = 30; input bool ExportCSV = true; input string CSVFileName = "pattern_detections.csv"; input bool AppendCSV = true;
Nach den Parameterdeklarationen richtet der Code Laufzeitvariablen ein, um den aktuellen Zustand zu speichern. Dazu gehören boolesche Kippschalter, die die Eingaben spiegeln und sicherstellen, dass die Änderung sofort registriert wird, wenn ein Nutzer auf eine Schaltfläche im Chart klickt, um eine Funktion zu aktivieren oder zu deaktivieren, ohne den EA zu entfernen und neu anzulegen. Es werden Arrays deklariert, um Marktdaten (MqlRates g_rates[]), die Namen der erkannten Muster (g_patterns[]), die Trefferzähler pro Muster (g_pattern_hits[]) und die Bereichstabellen (g_bins_flat[]) zu speichern. Erkennungsprotokolle werden in der Struktur Detection g_detections[] verwaltet, die den Namen, die Zeit, den Preis und das Abklinggewicht jedes Musters enthält. Der Code speichert auch den Verlauf der Warnungen in einem Array g_alert_sent[], um zu vermeiden, dass bei jedem Tick wiederholte Benachrichtigungen für dieselbe Zone erfolgen.
bool runtime_UseRecencyDecay; MqlRates g_rates[]; string g_patterns[]; int g_pattern_hits[]; int g_bins_flat[]; Detection g_detections[]; bool g_alert_sent[];
Die Initialisierungsroutine OnInit() wird beim Start des EA aufgerufen. Zunächst werden die Laufzeit-Schalter mit den in den Eingabeparametern festgelegten Werten synchronisiert, die Arrays für die Kontrolle der Warnungen an die maximal verfügbaren Zonen angepasst und ParsePatternList() aufgerufen, um die durch Kommata getrennte Musterzeichenkette in ein brauchbares Array von Namen in Kleinbuchstaben umzuwandeln, wobei jedem Namen eine bestimmte Farbe aus einer voreingestellten Palette zugewiesen wird. Anschließend wird das Bedienfeld auf dem Chart durch den Aufruf von CreateCompactUI() erstellt, das kleine anklickbare Schaltflächen am Rand des Charts anordnet, mit denen der Händler nach Belieben einen neuen Scan durchführen, Zonen löschen, Funktionen umschalten und die Legende oder Marker ein- oder ausblenden kann. Wenn die Option AutoRescanOnStart aktiviert ist, schläft der EA kurz (um die Chart-Bereitschaft sicherzustellen) und startet seine Scan-Engine sofort, sodass die Ergebnisse sichtbar sind, sobald er angeschlossen ist.
int OnInit() { runtime_UseRecencyDecay = UseRecencyDecay; ArrayResize(g_alert_sent, MaxZonesToDraw); ParsePatternList(); CreateCompactUI(); if(AutoRescanOnStart) { Sleep(100); ScanAndDraw(); } return INIT_SUCCEEDED; }
Die Interaktivität wird von OnChartEvent() gehandhabt, das auf Objektklick-Ereignisse wartet und sie mit bekannten Schaltflächennamen vergleicht, wie OBJ_BTN_RESCAN oder OBJ_TG_DECAY. Wenn eine Übereinstimmung gefunden wird, wird der entsprechende Laufzeit-Toggle umgeschaltet, der Statustext wird aktualisiert und AutoRescanIfAllowed() wird ausgeführt, wenn der Nutzer die sofortige erneute Überprüfung bei Toggle-Änderungen aktiviert hat. Durch diese architektonische Entscheidung wird der EA zu einem nutzergesteuerten Live-System, bei dem jeder Parameter mitten in der Sitzung vom Chart aus geändert werden kann, ohne dass der Eigenschaftsdialog erneut aufgerufen werden muss.
void OnChartEvent(int id, const long &lparam, const double &dparam, const string &sparam) { if(sparam == OBJ_BTN_RESCAN) ScanAndDraw(); else if(sparam == OBJ_TG_DECAY) { runtime_UseRecencyDecay = !runtime_UseRecencyDecay; AutoRescanIfAllowed(); } }
Die Funktionen zur Erstellung der Nutzeroberfläche (CreateTinyButtonIfMissing und UpdateToggleButtons) stellen sicher, dass jede Kontrollschaltfläche vorhanden ist, über die richtige Beschriftung und Farbcodierung für den EIN/AUS-Zustand verfügt und korrekt in den Chartkoordinaten platziert ist. Sie verwalten auch das Statusfeld, das die aktuellen Konfigurationseinstellungen und Scan-Zusammenfassungen in einem übersichtlichen Overlay anzeigt, wenn es umgeschaltet wird.
CreateTinyButtonIfMissing(OBJ_BTN_RESCAN, 8, 8, 84, 20, "Rescan"); CreateTinyButtonIfMissing(OBJ_TG_DECAY, 98, 8, 84, 20, "Decay");
Der Schritt des Parsens von Mustern, gekapselt in ParsePatternList(), ist der Schlüssel zur Scan-Logik. Er zerlegt Nutzereingaben wie „Hammer, Doji“ in Array-Einträge, entfernt leere Strings, wandelt Namen in Kleinbuchstaben um, weist ihnen wechselnde Farben aus einer Palette zu und initialisiert alle Zähler. Hier wird auch das Array des Bereichs (g_bins_flat) zurückgesetzt, das die Größe patterns_count × BinCount hat und bereit ist, Erkennungen zu akkumulieren.
int n = StringSplit(PatternName, ',', parts); for(int p=0; p<n; p++) { g_patterns[p] = ConvertToLower(parts[p]); g_pattern_colors[p] = palette[p % ArraySize(palette)]; } ArrayResize(g_bins_flat, g_patterns_count * BinCount); ArrayInitialize(g_bins_flat, 0);
Die zentrale Erkennungs- und Rendering-Engine, ScanAndDraw(), ist der wichtigste Teil des EA. Sie beginnt mit der Aktualisierung der Statusanzeige auf „Scanning...“ und berechnet sichere Standardwerte für die Rückblickbalken und die Bereichsnummern. Sie analysiert die Muster erneut, um sicherzustellen, dass die Arrays synchronisiert sind, löscht frühere Erkennungen und weist Platz für Marktdaten zu. Mithilfe von CopyRates() werden OHLC-Kursdaten für den angegebenen Rückblickzeitraum geladen, die Hochs und Tiefs zur Festlegung der Bereichshöhe bestimmt und die Bereichsgröße berechnet.
Dann wird in einer Rückwärtsschleife jeder Balken im Rückblickzeitraum und jedes Muster durchlaufen, wobei IsPatternAtIndex() aufgerufen wird, um festzustellen, ob der Balken die Kriterien für diesen Kerzentyp erfüllt. Wenn Übereinstimmungen gefunden werden, wird die Anzahl der Treffer erhöht, der Erkennungskurs wird gemäß den Polaritätsregeln verankert (Aufwärtsmuster zu Kerzen-Tiefs, Abwärtsmuster zu Hochs), und der Bereichs-Index für diesen Kurs wird berechnet. Die Gewichtung des Verlusts an Aktualität wird als Multiplikator angewandt, sodass neuere Balken mehr „Gewicht“ zu ihren Bereichen beitragen. Die Bereiche werden entsprechend inkrementiert, und wenn der CSV-Export oder die Markierungen aktiviert sind, wird ein Erkennungssatz in g_detections[] gespeichert.
g_rates_copied = CopyRates(_Symbol, _Period, 0, barsToCopy, g_rates); for(int bar=1; bar<lookback && bar<g_rates_copied; ++bar) { for(int p=0; p<g_patterns_count; ++p) { if(IsPatternAtIndex(g_patterns[p], bar, g_rates)) { int binIndex = (int)MathFloor((pricePoint - g_price_min) / binSize); g_bins_flat[p*BinCount + binIndex] += intContrib; } } }
Wenn alle Balken verarbeitet sind, werden die Bereichen über die Muster hinweg zu combinedBereichen kombiniert, und jeder Bereich, der die skalierte Mindesttrefferschwelle erfüllt, wird zu einer ZoneRec-Struktur, die den Bereichs-Index, die Trefferanzahl, die Preisspanne, den Score-Platzhalter, das HTF-Bestätigungsflag und die Zeit der letzten Warnung enthält.
for(int b=0; b<BinCount; ++b) { int sum = 0; for(int p=0; p<g_patterns_count; ++p) sum += g_bins_flat[p*BinCount + b]; combinedBins[b] = sum; if(combinedBins[b] >= scaledMinHits) { ZoneRec z; z.bin = b; z.count = sum; z.low = g_price_min + b*binSize; z.high = z.low + binSize; zones[zoneCount++] = z; } }
Wenn eine Bestätigung auf einem höheren Zeitrahmen angefordert wird, ruft der EA ConfirmZonesWithHTF() auf, um eine ähnliche Erkennungsschleife auf einem zweiten Datensatz aus dem gewählten HTF laufen zu lassen und Zonen, die in diesem größeren Bild Muster-Treffer sehen, als bestätigt zu markieren.
if(IsPatternAtIndex(g_patterns[p], bar, htf_rates) && pricePoint >= zones[z].low && pricePoint <= zones[z].high) zones[z].htf_confirmed = true;
Dann werden Zonenbewertungen berechnet: Skalierung der rohen Trefferzahlen auf einen Bereich von 1-100, Anwendung einer kleinen Erhöhung, wenn HTF bestätigt wurde, und Herausfiltern unbestätigter Zonen im strengen Modus.
double base = zones[i].count; double factor = zones[i].htf_confirmed ? 1.4 : 1.0; zones[i].score = (int)MathRound((base / maxRaw) * 100 * factor);
Die Zonen werden nach der Anzahl der Treffer in absteigender Reihenfolge sortiert, auf MaxZonesToDraw begrenzt und auf dem Chart als halbtransparente Rechtecke gezeichnet, die ihre Preisspanne abdecken, wobei die Deckkraft proportional zur Trefferstärke ist. Jedes hat ein OBJ_LABEL, das den Index, die Treffer, die Punktzahl, den HTF-Status und den mittleren Preis anzeigt.
color pc = MakeColorWithAlpha(g_pattern_colors[p], alpha); ObjectCreate(0, obj, OBJ_RECTANGLE, 0, time_left, lowP, time_right, highP); ObjectSetInteger(0, obj, OBJPROP_COLOR, pc);
Wenn ShowSeparateLayers eingeschaltet ist, werden zusätzliche Rechtecke in den Farben der einzelnen Muster über den zugehörigen Bereichen gezeichnet, was eine granulare Zusammensetzung der Muster ermöglicht.
color pc = MakeColorWithAlpha(g_pattern_colors[p], alpha); ObjectCreate(0, obj, OBJ_RECTANGLE, 0, time_left, lowP, time_right, highP); ObjectSetInteger(0, obj, OBJPROP_COLOR, pc);
Für Händler, die die Ergebnisse prüfen, rahmt DrawPerfectPatternMarkers() die genauen Kerzen ein, die die Erkennungen verursacht haben, optional mit halbtransparenter Farbe gefüllt.
ObjectCreate(chartId, markerName, OBJ_RECTANGLE, 0, startTime, candle.low, endTime, candle.high);
Wenn ShowLegend wahr ist, listet DrawPatternLegend() alle Muster mit ihren Gesamttrefferzahlen in einem Overlay in der linken Ecke auf, und wenn der CSV-Export aktiviert ist, schreibt ExportDetectionsToCSV() die Erkennungssätze in die angegebene Datei.
ObjectSetString(0, nm, OBJPROP_TEXT, StringFormat("%s : %d", g_patterns[p], g_pattern_hits[p]));
Der Mechanismus für die Warnungen des EA ist auf Präzision und minimales Rauschen ausgelegt. Nachdem die Zonen gezeichnet wurden, wird g_alert_sent[] zurückgesetzt, und wenn Warnungen aktiviert sind, ruft der EA CheckAndAlertApproachingZones() auf, um den aktuellen Geldkurs mit dem Mittelpunkt jeder Zone zu vergleichen. Wenn der absolute Abstand kleiner als der Pip-Schwellenwert ist, die Abkühlungszeit abgelaufen ist und die HTF-Regeln erfüllt sind, wird eine einzelne Warnung ausgelöst. Dieser Alarm enthält die Zonen-ID, das Symbol, den Zeitrahmen, den Preis des Mittelpunktes, den Punktestand und den HTF-Bestätigungsstatus, spielt einen Ton ab, falls konfiguriert, und sendet eine Push-Benachrichtigung, falls das Terminal dies zulässt. Wichtig ist, dass das Flag für die Warnungen für diese Zone so gesetzt wird, dass keine weiteren Warnungen erfolgen, bis sich der Preis über den Schwellenwert hinaus bewegt und wieder zurückkehrt, sodass die Warnungen deterministisch und umsetzbar sind.
if(dist <= tol && !g_alert_sent[i]) { Alert(msg); g_alert_sent[i] = true; }
Zusätzlich zu ScanAndDraw() und den Warnfunktionen implementiert der EA Hilfsfunktionen zur Mustererkennung für jeden Kerzentyp, z.B. vergleicht CheckHammerFromArray() die Größe des Kerzenkörpers mit der Gesamtreichweite und den Schattenverhältnissen, um echte Hämmer gemäß den anerkannten Handelsdefinitionen genau zu identifizieren. Diese Überprüfungen verhindern Fehlalarme durch „ähnlich aussehende“ Kerzen, die nicht die richtige Umkehrgeometrie aufweisen. Ähnliche Funktionen gibt es für Doji, Inverted Hammer, Engulfing Patterns, Morning Star, Evening Star, Tweezers, Spinning Tops und Marubozu, die jeweils mit quantitativen Regeln für Open/Close-Beziehungen und Schattenproportionen versehen sind.
return (body/range<0.35 && lowerShadow>=1.8*body && upperShadow<=0.6*body);
Durch die Kombination von rigorosen Erkennungsalgorithmen mit Echtzeitüberwachung, Interaktivität auf dem Chart, klarer Visualisierung und statistischem Export bietet der Pattern Density Heatmap EA Händlern eine dynamische, datengesteuerte Zuordnung, auf der sich wichtige Kerzenmuster in der Kursgeschichte anhäufen. Diese Informationen werden in zukunftsweisende Unterstützungs- und Widerstandszonen umgewandelt und erlauben Ihnen die Möglichkeit, zu handeln, sobald sich der Kurs diesen Ebenen wieder nähert.
Ergebnisse
In diesem Abschnitt werden die visuellen und quantitativen Ergebnisse des EA PatternDensityHeatmap.mq5 vorgestellt. Sie finden eine klare Beschreibung dessen, was jede Abbildung zeigt, wie die Ausgaben generiert wurden, die verwendeten Testparameter, praktische Hinweise zur Ausführung des Tools und die wichtigsten Erkenntnisse aus den Einzelmustertests.
Übersicht
Die Animation und die Screenshots unten veranschaulichen, wie der EA die Kurshistorie scannt, Kerzenmuster erkennt, die Erkennungspunkte zu Preisbereichen zusammenfasst und Dichtezonen einzeichnet.
- Zonendicke und Opazität spiegeln die Erkennungsstärke wider.
- Optionale Ebenen pro Muster zeigen, welche Muster zu einer Zone beitragen.
- Eingerahmte Marker validieren exakte Kerzentreffer.
- Auf der rechten Seite werden Treffer, Punktestand und HTF-Bestätigung zur einfachen Überprüfung angezeigt.
Die Sequenz demonstriert beides:
- Zusammengesetzte Multi-Pattern-Scans
- Gezielte Einzelmuster-Tests (Hammer und Doji)
Vollständige Rescan-Animation (zusammengesetzte Muster)
Ein vollständiger Rescan und Draw-Pass mit PatternName = „Hammer, Doji“. Die Zonen bilden sich live auf dem Chart, die Ebenen für die einzelnen Muster erscheinen und die Markierungen umrahmen die exakten Kerzen. Zeigt, wie zusammengesetzte Heatmaps aus mehreren Mustertypen entstehen und wie die Umschalter der Nutzeroberfläche (Rescan, Ebenen, Abklingen, CSV, Polarität, Legende, Markierungen) in Echtzeit aktualisiert werden.

Die obige Abbildung zeigt eine Heatmap der Musterdichte in Aktion (Composite). Rescan wandelt Mustererkennungen in farblich abgestufte Zonen um; Ebenen für jedes Muster und gerahmte Markierungen heben die Aufschlüsselung von Beiträgen und exakte Kerzenübereinstimmungen hervor.
Hammer (Einzelmusterprüfung)
- Heatmap nur mit PatternName = „hammer“ erstellt.
- Zeigt den primären Hammercluster mit EA-Trefferzahl (Hammer: 29).
- Verwenden Sie diese Ansicht, um zu prüfen, ob Hammercluster mit Preisreaktionsniveaus (Unterstützung) übereinstimmen, und um die Bereichs-Größe und die Trefferschwelle für eine größere Zonenpräzision fein abzustimmen.

Die obige Abbildung zeigt den Hammer-Einzelmustertest (Anzahl = 29). Das hervorgehobene Band markiert konzentrierte Hammer-Ereignisse, die auf eine Unterstützungszone schließen lassen.
Doji (Einzelmusterprüfung)
- Heatmap nur mit PatternName = „doji“ erstellt.
- Es sind mehrere enge Doji-Cluster mit EA-Trefferzählung sichtbar (doji: 67).
- Hilft festzustellen, ob sich Dojis auf Konsolidierungsebenen konzentrieren oder weit verstreut sind.

Die obige Abbildung zeigt die Doji-Einzelmusterprüfung (Anzahl = 67). Schmale Bänder weisen auf wiederholte Unentschlossenheitskerzen um wichtige Kursniveaus hin.
Verwendete Testparameter
| Test | Mustername | LookbackBars | BinCount | MinHitsToShow |
|---|---|---|---|---|
| Gif | Hammer, Doji | 2000 | 40 | 2 |
| Fig 1 | Hammer | 500 | 40 | 2 |
| Abb. 2 | Doji | 500 | 40 | 2 |
Wie die Ergebnisse generiert wurden
Bei jedem Durchlauf beginnt der EA mit dem Laden der Marktdaten des letzten LookbackBars aus dem Chart. Er ermittelt die Mindest- und Höchstpreise in diesem Bereich und berechnet eine genaue binSize, um den vertikalen Preisraum in gleiche Segmente zu unterteilen. Die Scanning-Schleife verarbeitet dann jeden Balken einzeln und wendet die ausgewählten Algorithmen zur Mustererkennung an, z. B. CheckHammerFromArray() oder CheckDojiFromArray(), um zu entscheiden, ob die Kerze einer der Zielformationen entspricht. Wenn eine Übereinstimmung gefunden wird, berechnet der EA den relevanten Preispunkt (Mittelwert, Tiefstwert oder Höchstwert, je nach Polaritätsverankerungsregeln) und ordnet ihn dem richtigen Bereichs-Index zu. Der Zähler jedes Feldes wird inkrementiert, wobei eine Gewichtungsanpassung vorgenommen wird, wenn „recency decay“ aktiviert ist, um neueren Erkennungen mehr Einfluss zu geben.
Bins, deren Trefferzahl den Schwellenwert MinHitsToShow überschreitet, werden zu ZoneRec-Einträgen befördert. Diese Zonen können auf eine Bestätigung in einem höheren Zeitrahmen geprüft und dann bewertet und sortiert werden, sodass die Bereiche mit stärkeren Reaktionen Vorrang erhalten. Die am besten bewerteten Zonen werden als gefüllte OBJ_RECTANGLE-Overlays dargestellt, mit optionalen Ebenen für die einzelnen Muster und präzisen Rechteckmarkierungen, die die eigentlichen Kerzen einrahmen, die die Erkennungen ausgelöst haben. Auf den Kennzeichnungen neben jeder Zone sind die wichtigsten Referenzdaten aufgeführt, darunter die Gesamttrefferzahl, die normalisierte Punktzahl und die Angabe, ob die Zone vom HTF bestätigt wurde. Wenn der CSV-Export aktiviert ist, speichert der EA die Daten jeder Erkennung in einer Datei zur Offline-Analyse.
Praktische Hinweise
Beim Exportieren von Erkennungsdaten im CSV-Format ist zu beachten, dass die Dateien in das Arbeitsverzeichnis des Terminals geschrieben werden – MetaTrader 5 muss über Dateisystemberechtigungen verfügen, sonst schlägt der Export fehl. Die Logik der Live-Annäherungswarnung beruht auf dem Textinhalt der Zonenbeschriftungen; wenn diese Beschriftungsobjekte manuell umbenannt werden, kann das Warnsystem den Überblick über die Zonen verlieren. Alle vom EA erstellten Chartobjekte tragen das Präfix PDHP_, um Überschneidungen mit anderen Indikatoren und EAs zu vermeiden. Wenn die Objekterstellung fehlschlägt, kann dies an Namenskollisionen oder unzureichenden historischen Balken für die gewählte LookbackBars-Einstellung liegen.
Das Abklingverhalten wird durch den DecayHalfLife-Parameter gesteuert – bei niedrigeren Werten verblassen alte Erkennungen schneller, wodurch das Gewicht der jüngsten Muster-Treffer erhöht wird. Es lohnt sich, die Polaritätsverankerung isoliert zu testen, da sie den für die Erkennung verwendeten Preispunkt anpasst: Aufwärtsmuster verankern sich an den Tiefs der Kerzen, Abwärtsmuster an den Hochs der Kerzen. Dies kann die Zonenausrichtung bei bestimmten Strategien schärfen, sollte aber mit Einzelmustern überprüft werden.
Kurze Denkanstöße
Der im GIF dargestellte zusammengesetzte Scan zeigt, dass sich überlappende Mustertypen zu leistungsstarken, visuell unterschiedlichen Zonen kombinieren lassen. Diese zusammengesetzten Zonen sind ideal für Händler, die ein höheres Vertrauensniveau anstreben, da mehrere Mustersignale aufeinander abgestimmt werden müssen. Der Einzelmusterlauf des Hammer isolierte einen konzentrierten Cluster (Anzahl = 29), der einem starken Unterstützungsbereich ähnelt – ein Beispiel dafür, wie eine einzelne Formation auf eine Tendenz zum Einstieg in der Nähe dieses Niveaus hinweisen kann. Im Gegensatz dazu erzeugte der Doji-Test mit nur einem Muster mehrere schmale Bänder (Anzahl = 67), die die wiederholte Unentschlossenheit des Marktes über verschiedene Preisanker hinweg widerspiegeln. Diese Doji-Cluster sind am besten als Konsolidierungssignale und nicht als unmittelbare Umkehrauslöser zu interpretieren.
In allen Tests erwiesen sich Einzelmuster-Scans als unverzichtbar, um die Erkennungslogik zu validieren und zu entscheiden, welche Formationen in einer zusammengesetzten Heatmap eine höhere Gewichtung verdienen. Dieser Prozess stellt sicher, dass die aggregierten Ergebnisse des Tools auf Mustern mit nachgewiesener individueller Relevanz beruhen.
Schlussfolgerung
Die Pattern Density Heatmap stellt eine bedeutende Entwicklung in unserem Price Action Analysis Toolkit dar. Was als einfaches Hilfsmittel für Hinweise zur Kerzenmustersuche und in Teil 51 dieser Serie begann, hat sich zu einem hoch entwickelten System der Markt-Zuordnungen entwickelt, das in der Lage ist, statistisch signifikante Preiszonen, die aus dem historischen Kerzen-Verhalten abgeleitet sind, zu identifizieren, zu quantifizieren und zu verfolgen. Durch die Automatisierung der Aggregation mehrerer Muster in messbare Preisbereiche und die anschließende Bewertung und Bestätigung dieser Bereiche anhand von Daten mit höherem Zeitrahmen verwandelt der Indikator den Musterhandel von einer rein visuellen Kunst in einen datengesteuerten Prozess. Händler müssen sich nicht mehr allein auf ihre Intuition verlassen – sie können in Echtzeit beobachten, wann der Markt wiederholt reagiert hat, und werden gewarnt, wenn sich der Preis diesen Bereichen mit hoher Dichte nähert.
Dies verändert die Art und Weise, wie Unterstützung und Widerstand erkannt werden: nicht mehr als subjektive Linien, die mit dem Auge gezeichnet werden, sondern als empirisch validierte Zonen, die durch harte Erkennungsstatistiken gestützt werden und nachweislich die Wahrscheinlichkeit haben, zukünftige Marktbewegungen zu beeinflussen. Diese Niveaus markieren die Punkte, an denen es immer wieder zu Marktreaktionen gekommen ist, und geben den Händlern klare, objektive Referenzbereiche an die Hand, die das Timing für den Ein- und Ausstieg festlegen können. Die Kombination aus übersichtlichen Heatmap-Darstellungen, präzisen Kerzenmarkern, Annäherungswarnungen und exportierbaren Datensätzen macht das Tool vielseitig und für verschiedene Handelsstile einsetzbar – vom Intraday-Scalping bis zum mehrtägigen Swing-Trading, von diskretionären Setups bis zu vollautomatischen Systemen, die CSV-Analysen einlesen.
In der Praxis bedeutet dies
- Besseres Handels-Timing durch Antizipation statt Reaktion.
- Verbessertes Risikomanagement durch Vermeidung von Handelsgeschäften in historisch reaktiven Zonen.
- Größeres Vertrauen in die Strategie durch Zusammenwirken mehrerer Zeitrahmen.
- Erweiterbare Datensätze für die statistische Offline-Auswertung oder die Modellierung mit maschinellem Lernen.
Wenn Sie die Pattern Density Heatmap in Ihren Arbeitsablauf integrieren, experimentieren Sie mit verschiedenen Musterlisten, Lookback-Perioden und HTF-Einstellungen, um die Konfiguration zu finden, die am besten zu Ihrem Handelshorizont und dem gewählten Markt passt. Auf diese Weise können Sie das volle Potenzial des Tools ausschöpfen, indem Sie versteckte Cluster von Marktreaktionen in umsetzbare, verifizierte Unterstützungs- und Widerstandskarten verwandeln und den Kursen immer einen Schritt voraus sind. Mit der Pattern Density Heatmap sind Unterstützung und Widerstand nicht länger nur Vermutungen – sie werden gemessen, kartiert und warten auf die Bestätigung durch den Preis.
Übersetzt aus dem Englischen von MetaQuotes Ltd.
Originalartikel: https://www.mql5.com/en/articles/20390
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.
Statistische Arbitrage durch kointegrierte Aktien (Teil 8): Rolling-Windows-Eigenvektor-Vergleich für Portfolio-Rebalancing
Automatisieren von Handelsstrategien in MQL5 (Teil 43): Adaptive lineare Regressionskanalstrategie
Eine alternative Log-datei mit der Verwendung der HTML und CSS
Implementierung von praktischen Modulen aus anderen Sprachen in MQL5 (Teil 04): Zeit-, Datums- und Datetime-Module aus Python
- 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.
Guten Morgen, bitte können Sie diesen Indikator verwenden, um einen ea bot für mich zu machen
Bitte posten Sie Ihre Anforderungen als Job in der Freelance Sektion.