Analyse von Kurs-Zeit-Lücken in MQL5 (Teil II): Erstellung einer Heatmap der Liquiditätsverteilung über die Zeit
Im ersten Teil haben wir das Konzept der Zeitlücken und deren Verbindung mit institutionellen Handelsaktivitäten untersucht. Das Erkennen dieser Lücken ist jedoch nur ein Teil der Aufgabe. Um effektiv zu handeln, muss ein Trader das Gesamtbild sehen: wo der Kurs viel Zeit verbringt, wo er wenig Zeit verbringt und wie diese Zonen miteinander interagieren.
Hier kommt unser Indikator ins Spiel – ein Werkzeug, das unsichtbare Zeitmuster in eine visuelle Heatmap verwandelt. Während wir im ersten Teil nach Anomalien (Lücken) gesucht haben, konstruieren wir nun eine vollständige Heatmap des normalen Kursverhaltens.
Die Grundidee ist einfach: Der gesamte Kursbereich wird als Menge von Mikrozonen dargestellt, und für jede Zone wird berechnet, wie lange sich der Kurs darin aufgehalten hat. Je länger die Zeit, desto „heißer“ die Zone, desto wichtiger ist sie für den Markt. Das Ergebnis wird durch ein Farbschema von kühlem Rot bis heißem Blau visualisiert.
Mathematische Grundlage: Vom Chaos zur Ordnung
Jeder Markt kann als ein kontinuierlicher Kampf zwischen Angebot und Nachfrage betrachtet werden. Dort, wo dieser Kampf am intensivsten ist, neigt der Kurs dazu, länger zu verweilen. Mathematisch wird dies durch die Zeitdichtefunktion ausgedrückt:
T(p) = Σt_i, wobei der Preis in dem Bereich [p-δ, p+δ] liegt.
Hier ist p das untersuchte Kursniveau, δ ist die Größe der Analysezone, während t_i die Dauer jedes Zeitraums ist, in dem sich der Kurs in dieser Zone befindet.
Aber die Rohdaten sagen wenig aus. Wir benötigen eine Normalisierung, die absolute Zeitwerte in relative Prozentsätze umwandelt. Wir verwenden die Formel:
P(p) = ((T(p) - T_min) / (T_max - T_min)) × 99% + 1%
Diese Formel stellt sicher, dass den „kältesten“ Zonen ein Präsenzwert von 1 % zugewiesen wird, während die „heißesten“ 100 % erreichen. Alle anderen Zonen werden proportional zu ihrer Bedeutung zwischen diesen Extremen verteilt.
Lösungsarchitektur: Modularität als Grundlage für Zuverlässigkeit
Die Erstellung eines solchen Indikators erfordert eine gut durchdachte Architektur. Im Kern steht die Struktur PriceLevel, die alle Informationen zu jedem Kursniveau kapselt:
struct PriceLevel { double price; // Central price level double price_high; // Zone upper boundary double price_low; // Zone lower boundary long time_spent; // Accumulated time in bars double presence_percent; // Presence percentage color level_color; // Dynamic color string object_name; // Unique ID };
Jedes Level hat seine eigene Dynamik: Es akkumuliert Verweildauer, berechnet Prozentsätze neu und ändert seine Farbe. Es ist nicht nur eine Datenstruktur – es ist die lebendige Essenz des Marktes.
Die wichtigste Neuerung war die Verwendung eines gleitenden Analysefensters. Statt die gesamte verfügbare Historie zu verarbeiten, analysieren wir innerhalb der letzten MaxHistory Bars nur ein gleitendes Fenster mit der Größe AnalysisPeriod. Dies stellt sicher, dass die Ergebnisse relevant und die Leistung akzeptabel sind.
Algorithmus: Wo Mathe auf Realität trifft
Der Prozess beginnt mit der Bestimmung der Kursspanne für die Analyse. Der Algorithmus findet automatisch das Maximum und das Minimum für den untersuchten Zeitraum, wodurch er sich an die Volatilität jedes Instruments anpassen kann.
Dieser Bereich wird dann in gleiche Zonen unterteilt. Die Anzahl der Zonen wird dynamisch berechnet: Wenn die Tick-Größe angegeben ist, wird sie verwendet; wenn nicht, wird der minimale Point-Wert des Instruments genommen. Gleichzeitig balanciert das System zwischen Detailgenauigkeit (mindestens 50 Niveaus) und Leistung (nicht mehr als 1000 Ebenen).
Der ressourcenintensivste Teil ist die Erfassung bzw. Zählung der Verweildauer auf jedem Level. Ein naiver Ansatz würde erfordern, jede Bar mit jedem Niveau zu vergleichen (O(n²)-Komplexität). Wir haben dies auf O(n×k) optimiert, wobei k die durchschnittliche Anzahl der Niveaus ist, die von einer Bar betroffen sind.
// Optimization: find only relevant levels for each bar int startLevel = MathMax(0, (int)((lowPrice - minPrice) / realTickSize)); int endLevel = MathMin(totalPriceLevels - 1, (int)((highPrice - minPrice) / realTickSize) + 1); for(int levelIdx = startLevel; levelIdx <= endLevel; levelIdx++) { if(DoesBarTouchLevel(highPrice, lowPrice, levels[levelIdx])) { levels[levelIdx].time_spent++; } }
Die Funktion DoesBarTouchLevel prüft die Überschneidung des High-Low-Bereichs der Bar mit den Grenzen des Kursniveaus. Die Logik ist einfach: Wenn das Maximum der Bar über der unteren Grenze des Niveaus liegt und das Minimum der Bar unter der oberen Grenze liegt, gibt es eine Überschneidung.
Farbalchemie: Zahlen in Bilder verwandeln
Nachdem die Zeit berechnet wurde, beginnt der kreativste Teil: die Umwandlung der Rohdaten in ein Farbschema. Wir verwenden ein Fünf-Stufen-System: Rot (1 %), Orange (25 %), Gelb (50 %), Hellblau (75 %), Blau (100 %).
Zwischen den Eckpunkten erfolgt eine glatte Interpolation. Beispielsweise erhält ein Niveau mit 37 % Präsenz eine Farbe zwischen Orange und Gelb. Die Interpolation erfolgt im RGB-Farbraum:
color InterpolateColor(color color1, color color2, double factor) { // Decomposition into RGB components int r1 = (color1 >> 16) & 0xFF; int g1 = (color1 >> 8) & 0xFF; int b1 = color1 & 0xFF; // Linear interpolation of each channel int r = (int)(r1 + (r2 - r1) * factor); int g = (int)(g1 + (g2 - g1) * factor); int b = (int)(b1 + (b2 - b1) * factor); return (r << 16) | (g << 8) | b; }
Das Ergebnis sind weiche Farbübergänge, die eine natürliche Heatmap des Marktes erzeugen.
Visualisierung: Vom Algorithmus zum Chart
Jedes Kursniveau wird als Rechteck im Chart dargestellt. Das Erstellen von Tausenden von grafischen Objekten ist eine technisch anspruchsvolle Aufgabe, die Optimierung erfordert.
Die Rechtecke werden von der Startzeit der Analyse bis zum aktuellen Zeitpunkt platziert und decken den gesamten relevanten Bereich ab. Jedes Objekt ist so konfiguriert, dass es im Hintergrund arbeitet: Es stört die Chartanalyse nicht, wird beim Anklicken nicht hervorgehoben und wird bei einer Änderung der Zoomstufe automatisch neu gezeichnet.
Das Objektverwaltungssystem enthält einen Mechanismus zum Löschen früherer Ergebnisse, bevor neue gerendert werden. Dies verhindert die Ansammlung von „visuellem Ballast“ im Chart und stellt eine korrekte Aktualisierung der Visualisierung sicher.
In Echtzeit ist die Leistung entscheidend. Der Indikator verwendet mehrere Optimierungsniveaus:
- Das erste Niveau sind bedarfsgesteuerte Berechnungen. Eine Neuberechnung erfolgt nur, wenn eine neue Bar erscheint. Das System verfolgt den Zeitpunkt der letzten Aktualisierung und startet Berechnungen nur, wenn eine Änderung eintritt.
- Das zweite Niveau ist die Speicheroptimierung. Daten-Arrays werden einmal zugewiesen und wiederverwendet. Datenstrukturen sind auf minimalen Speicherverbrauch ausgelegt: Für Zähler werden Longs anstelle von Doubles verwendet und unnötige String-Variablen werden vermieden.
- Das dritte Niveau ist die algorithmische Optimierung. Das gleitende Analysefenster begrenzt die Menge der verarbeiteten Daten. Das adaptive Raster der Niveaus verhindert die Erstellung einer übermäßigen Anzahl von Zonen.
Interpretation der Ergebnisse: Was die Farben bedeuten
Rote Zonen (1-25 % Präsenz) kennzeichnen Bereiche, die der Kurs schnell durchquert. Dies sind die Zonen potenzieller Zeitlücken, die im vorherigen Artikel beschrieben wurden. In roten Zonen kommt es häufig zu Abprallern und Fehlausbrüchen, daher erfordern sie ein vorsichtiges Vorgehen.
Orangefarbene und gelbe Zonen (25-75 %) stellen Bereiche mit moderater Aktivität dar. Hier verweilt der Kurs periodisch, jedoch ohne offensichtliche Dominanz. Dies sind Übergangszonen, die je nach Marktumfeld zu Unterstützung oder Widerstand werden können. Dies sind die Zonen, in denen trendfolgende Trades oft am besten funktionieren.
Die blauen und hellblauen Zonen (75-100 %) stehen im Mittelpunkt unserer Analyse. Hier verbringt der Kurs die meiste Zeit, was auf eine hohe Handelsaktivität hindeutet. Diese Niveaus haben eine starke magnetische Kraft: Der Kurs kehrt regelmäßig zu ihnen zurück und nutzt sie als Unterstützung für die weitere Bewegung oder als Barrieren, die überwunden werden müssen.
Die effektivste Strategie ist das Trading von Abprallern an blauen Zonen. Wenn sich der Kurs dem Bereich der maximalen Präsenz nähert, ist die Wahrscheinlichkeit einer Umkehr deutlich höher als im Durchschnitt. Dies funktioniert besonders gut in Seitwärtsmärkten, in denen die blauen Zonen die Kanalgrenzen klar definieren.
Ausbrüche durch gelbe Zonen signalisieren oft eine fortgesetzte Bewegung. Wenn der Kurs den Bereich mittlerer Präsenz bei solidem bzw. bestätigendem Volumen leicht durchquert, deutet dies darauf hin, dass kein ernsthafter Widerstand bevorsteht.
Umkehr-Setups sind oft in roten Zonen am effektivsten.
Die Kombination mit Volumenanalyse verbessert die Signale erheblich. Wenn eine blaue Zone mit einem Volumenmaximum im Volume Profile zusammenfällt, entsteht ein Bereich von maximaler Bedeutung.
Anpassung für verschiedene Märkte: Vielseitigkeit durch Anpassung
Forex mit seiner hohen Liquidität erfordert hohe Werte für AnalysisPeriod (300-500 Bars) und MaxHistory (5000-8000 Bars). Die Bewegungen sind hier gleichmäßiger, daher ist eine größere Analysetiefe erforderlich, um signifikante Bereiche zu identifizieren.
Für Aktien funktionieren moderate Einstellungen tendenziell gut: AnalysisPeriod 200-300 Bars, MaxHistory 3000-5000 Bars. Die Struktur der Handelssitzungen schafft natürliche Pausen, die sich gut in der Heatmap widerspiegeln.
Die Tick-Größe (TickSize) ist entscheidend für den ordnungsgemäßen Betrieb. Ein zu niedriger Wert führt zu übermäßigen Details ohne praktischen Nutzen. Ein zu hoher Wert führt dazu, dass wichtige Nuancen übersehen werden. Der Wert 0 (automatischer Modus) ist in der Regel optimal – das System wählt die Größe automatisch basierend auf den Eigenschaften des Instruments aus.
Transparenz beeinflusst nicht nur die visuelle Wahrnehmung, sondern auch die Leistung. Hohe Werte (70-90%) erzeugen eine halbtransparente Heatmap, die die Kerzenanalyse nicht stört, aber mehr Ressourcen für das Rendering erfordert.
Das Limit von 1000 Levels wurde aus einem bestimmten Grund eingeführt. MetaTrader 5 hat Einschränkungen bei der Anzahl grafischer Objekte, und das Überschreiten vernünftiger Grenzen führt zu einer Verlangsamung der Benutzeroberfläche, ohne die Qualität der Analyse wesentlich zu verbessern.
Integration mit anderen Tools: Synergie von Methoden
Der Heatmap-Indikator funktioniert besonders gut zusammen mit dem Volumenprofil. Das Zusammentreffen blauer Zonen mit hoher zeitlicher Präsenz mit Volumenspitzen schafft Bereiche von außergewöhnlicher Bedeutung. Solche Zonen werden oft entscheidend für die langfristige Kursbewegung.
Die Kombination mit Fibonacci-Levels liefert interessante Ergebnisse. Wenn wichtige Fibonacci-Levels in die blauen Zonen der Heatmap fallen, erhöht sich deren Bedeutung um ein Vielfaches. Dies ist natürlich: Mathematische Levels werden durch das tatsächliche Kursverhalten gestützt.
Volatilitätsindikatoren (wie Bollinger-Bänder) funktionieren gut in Verbindung mit einer Heatmap. Eine Ausweitung der Bänder in den roten Zonen geht oft starken Bewegungen voraus, während eine Verengung in den blauen Zonen auf die Ansammlung von Energie für einen zukünftigen Ausbruch hindeutet.
Die nächste Version des Indikators soll maschinelles Lernen beinhalten, um Parameter automatisch für ein bestimmtes Instrument zu optimieren. Der Algorithmus wird die Leistungsstatistik der Levels analysieren und die Einstellungen für maximale Effizienz anpassen.
Die Integration mit Alarmsystemen ermöglicht Benachrichtigungen, wenn sich der Kurs wichtigen Zonen nähert. Dies ist besonders nützlich für Swing-Trader, die Charts nicht ständig überwachen können.
Der Export von Daten in externe Systeme eröffnet Möglichkeiten zur Erstellung von Trading-Robotern auf Basis von Heatmaps. Roboter werden in der Lage sein, die Stärke von Levels als zusätzlichen Filter für den Einstieg in eine Position zu nutzen.
Methodenphilosophie: Zeit als Marktwährung
Der Indikator basiert auf einer tiefgründigen Idee: Zeit ist die Währung des Marktes. Trader setzen ihre Zeit ebenso bewusst ein, wie sie ihr Geld ausgeben. Je mehr Zeit auf einem bestimmten Niveau verbracht wird, desto mehr Emotionen, Entscheidungen und Kapital sind damit verbunden.

Diese emotionale Bindung schafft ein Marktgedächtnis. Selbst wenn sich der Kurs von einem signifikanten Niveau entfernt, bleibt die Erinnerung daran im Unterbewusstsein der Teilnehmer erhalten. Bei der Rückkehr auf dieses Niveau erwachen alte Erinnerungen: bei den einen an Gewinne, bei den anderen an Verluste. Diese Erinnerungen beeinflussen neue Handelsentscheidungen.
Die Heatmap der Zeit macht dieses unsichtbare Gedächtnis sichtbar. Sie verwandelt Marktpsychologie in Mathematik, Emotionen in Algorithmen und Intuition in Daten.
Schlussfolgerung: Ein neuer Blick auf alte Wahrheiten
Der Indikator enthüllt keine neuen Prinzipien, er macht alte deutlicher. Unterstützungs- und Widerstandsniveaus gab es schon immer, aber jetzt können sie gemessen und nach ihrer Bedeutung eingestuft werden. Die Heatmap zeigt, wo der Markt Zeit verbringt und wo daher die wahre Stärke liegt.In Kombination mit dem Zeitlücken-Indikator ergibt dies ein umfassendes Bild des Verhaltens der großen Marktteilnehmer: wo sie schnell agieren und wo sie verweilen. Zusammen ermöglichen uns diese Werkzeuge, die Marktstruktur besser zu verstehen und Entscheidungen auf der Grundlage von Logik statt Intuition zu treffen.
Im nächsten Teil werden wir besprechen, wie man all dies zu einem einzigen Handelssystem zusammenfügt.
Übersetzt aus dem Russischen von MetaQuotes Ltd.
Originalartikel: https://www.mql5.com/ru/articles/18661
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.
Neuronale Netze im Trading: Anomalieerkennung im Frequenzbereich (letzter Teil)
Quantitative Strategien mit niedriger Handelsfrequenz in MetaTrader 5: (Teil 1) Einrichtung eines OLAP-geeigneten Datenspeichers
Untersuchung von Regressionsmodellen für kausale Inferenz und algorithmischen Handel
Code, Tränen und Algo Forge
- 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.
Das hat mich daran erinnert: Vor langer, langer Zeit habe ich so etwas schon einmal gemacht,
meiner Meinung nach ist es bei Ihnen noch ganz leicht unvollständig – es bleibt noch, die regelmäßige Struktur aufzudecken (oder zu zeigen, dass es keine gibt).
Das ist natürlich keine Heatmap – es werden lediglich die Extremwerte des regelmäßigen Teils einer solchen Temperaturkarte dargestellt.
Übrigens wurde die Karte mit einer Methode berechnet, die als äußerst aufwendig und fehleranfällig gilt.
Es geht auch einfacher: Für jede Kerze werden zwei Paare {price, weight} in die Sammlung aufgenommen: { price=high, weight=-1; } { price=low, weight=+1; }. Die Sammlung wird nach „price“ sortiert, und die kumulierte Summe nach „weight“ ergibt die Heatmap. Anschließend wird nach Belieben quantisiert.