Volume Profile Per Candle
- Indikatoren
- Mahmoud Ahmed Abdou Ali
- Version: 4.40
- Aktivierungen: 5
Dies ist ein umfassender Volumenprofil-/Footprint-Chartindikator für MetaTrader 5, der vollständig über ein Canvas-Overlay (CCanvas) gerendert wird. Es ist ein Single-File, Zero-Buffer-Indikator, der direkt auf das Chart-Fenster mit Pixel-Level-Grafiken zeichnet. Hier ist eine vollständige Aufschlüsselung:
Kernkonzept
Für jede sichtbare Kerze unterteilt der Indikator die Preisspanne des Balkens in konfigurierbare Preisniveaus (bis zu 50) und zählt, wie viel Handelsaktivität auf jedem Niveau stattgefunden hat - entweder anhand der tatsächlichen Tickdaten, des Tickvolumens oder des realen Volumens. Anschließend wird diese "Time-at-Price"-Verteilung in Form einer Heatmap, eines Footprints oder eines anderen visuellen Stils direkt auf dem Chart angezeigt.
Wichtigste Funktionsgruppen
1. Heatmap-Rendering (primäre visuelle Darstellung)
Der Indikator bietet 8 Anzeigemodi zur Visualisierung der Volumenverteilung pro Balken:
- Gefüllt - einfarbige Rechtecke pro Preisniveau, farblich nach Intensität geordnet
- Gradient - weicher vertikaler Gradient, der innerhalb jeder Zelle überblendet wird (verwendet eine 4-Band-Näherung für die Leistung)
- Balken - horizontale Balken, deren Breite der Intensität entspricht
- Punkte - Punkt-Matrix-Muster, Dichte proportional zur Aktivität
- Footprint (Bid×Ask) - klassischer Footprint-Text, der das Geld- und Briefvolumen pro Level anzeigt
- Delta - farbige Rechtecke, die das Netto-Kauf/Verkauf-Ungleichgewicht pro Ebene anzeigen
- Gesamtvolumen - Volumen pro Ebene mit deltabasierter Einfärbung
- Kombiniert - Heatmap-Intensitätshintergrund + Footprint-Text-Overlay
Es gibt 9 Farbthemen: Thermal (blau→rot), Magma (schwarz→gelb), Ozean, Wald, Plasma (lila→gold), Inferno, Graustufen, Neon (cyan→magenta) und Benutzerdefiniert (benutzerdefinierter 3-Farbverlauf). Für jedes Bild wird eine Farbnachschlagetabelle mit 256 Einträgen erstellt, um die Leistung zu erhöhen.
2. Quellen für Volumendaten
Es werden drei Quellen unterstützt:
- Tick-Volumen - Standard MT5 Tick-Volumen, verteilt über die Ebenen unter Verwendung eines gewichteten Modells (Körper erhält mehr Gewicht als Dochte, Mitte des Körpers erhält das meiste Gewicht)
- Reales Volumen - börsenberichtetes Volumen, sofern verfügbar
- Tatsächliche Tick-Daten - der genaueste Modus. Verwendet CopyTicksRange(), um echte Tick-by-Tick-Daten zu erhalten, klassifiziert jeden Tick als Kauf oder Verkauf, indem zuerst die Tick-Flags verwendet werden, dann ein Lee-Ready-Algorithmus-Fallback (Vergleich des letzten Preises mit Geld-/Briefkurs, dann mit der vorherigen Tick-Richtung). Auf diese Weise wird das tatsächliche Geld-/Briefvolumen pro Level ermittelt.
3. POC (Point of Control) & Wertbereich
- POC - das Kursniveau mit dem höchsten Volumen/der höchsten Aktivität innerhalb jedes Balkens. Wenn echte Tick-Daten verfügbar sind, basiert der POC auf dem tatsächlich gehandelten Volumen ( totalVol[] ); andernfalls werden Tick-Zahlen verwendet. Vier visuelle Stile: durchgezogene Linie, gestrichelte Linie, Pfeilmarkierung, Rautenmarkierung.
- POC-Erweiterung - POC-Linien können sich nach rechts über die Kerze hinaus erstrecken, wobei die Länge der Erweiterung proportional zur kombinierten Heatmap-Intensität zu diesem Preis ist. Verwendet einen thermischen Gradienten, der ausblendet. Der Verlängerungsmultiplikator ist konfigurierbar (1×-10×).
- Wertbereich - die Preiszone, die einen konfigurierbaren Prozentsatz (Standardwert 70 %) des Gesamtvolumens enthält und durch Ausdehnung vom POC nach außen berechnet wird. Gezeichnet als halbtransparente Füllung mit Begrenzungslinien (VAH/VAL).
4. Hoch/Tief-Volumen-Knoten
- HVN - Niveaus, die einen Schwellenwert in Prozent der maximalen Aktivität des Balkens überschreiten, werden durch eine farbige Umrandung hervorgehoben (Standard: 80% Schwellenwert, limonenfarbener Rand)
- LVN - Pegel, die unter einem Schwellenwert liegen, werden anders hervorgehoben (Standard: 20 % Schwellenwert, rote Umrandung)
5. Orderblock-Erkennung (Smart Money-Konzepte)
Ein ausgeklügeltes System zur Erkennung von Hot Zones, das institutionelle Orderblöcke identifiziert:
Erkennungsmethode:
- Scannt die letzten N Bars (konfigurierbarer Rückblick, Standardwert 100)
- Erstellt eine Karte der Preisdichte - unterteilt die gesamte Preisspanne in Bereiche mit einer Toleranzbreite und zählt, wie oft der Preis jeden Bereich besucht hat
- Identifiziert "heiße Zonen", in denen die Dichte einen konfigurierbaren Prozentsatz der maximalen Dichte überschreitet
- Verwendet eine Top-N-Einfügungssortierung, um nur die stärksten MAX_OB (30) Kandidaten zu behalten
- Prüft auf überlappende Zonen und entfernt Duplikate
Erweitertes Scoring (1-10 Stärkenbewertung):
- Impulserkennung (0-3 Punkte) - sucht nach starken Richtungskerzen nach dem OB, bewertet relativ zur ATR (2× ATR = 3 Punkte, 1× = 2 Punkte, 0,3× = 1 Punkt)
- Liquidity sweep (0-2 Punkte) - prüft, ob der Kurs vor der Bildung des OB die vorangegangenen Höchst-/Tiefststände des Swing durchstoßen hat
- Fair Value Gap (0-2 Punkte) - erkennt FVGs neben dem OB (Lücke zwischen bar[i] low und bar[i+2] high für bullish, ATR-relative Mindestlückengröße)
- Volumenbestätigung (0-1 Punkt) - Volumen des OB-Balkens im Vergleich zum 10-Balken-Durchschnitt (1,2× Schwellenwert)
- Intensität (0-1 Punkt) - Dichte relativ zum Maximum (>0,6 = 1 Punkt)
- Balkenanzahl (0-1 Punkt) - 2-8 Balken in der Zone ergeben einen Punkt
Mitigation Tracking:
- Verfolgt, ob der Preis wieder in die Zone eingetreten ist und wie tief (mitigationPct 0-100%)
- 50% Durchdringung = abgemildert; vollständig durch = 100% abgemildert
- Breaker-Block-Erkennung: Wenn der Preis einen OB vollständig durchbricht, wird er zu einem Breaker.
- Wiederholungszählung mit Deduplizierung pro Takt
- Der Mitigationsstatus bleibt über einen Save/Restore-Mechanismus über Rebuilds hinweg erhalten.
Filterung:
- Minimale Berührungen, minimales Volumen, minimaler Stärke-Score
- Maximale Spanne in Pips oder als ATR-Multiplikator
- OBs können sich nach vorne erstrecken (konfigurierbare Balken)
Visuelles Rendering:
- Gefüllte Rechtecke mit nach Stärke angepasster Opazität (stark = heller, abgeschwächt = schwächer)
- Gestrichelte POC-Linie innerhalb der Zone
- Beschriftung mit Art, Anzahl der Balken, Stärke und Status (BREAKER/MIT %)
- Kleine Indikatoren für FVG, LIQ (Liquiditäts-Sweep), IMP (Impuls-Pips)
- Stärkebalken am rechten Rand (farbcodiert: rot→orange→gelb nach Score)
- Intensitätsbalken am unteren Rand
6. Swing-Bögen
Verbindet aufeinanderfolgende Schwungsegmente mit sanften Kurven, die nach Volumenintensität gewichtet sind:
- Unterteilt den sichtbaren Bereich in Segmente mit konfigurierbarer Periode (Standard 8 Bars)
- Erfasst für jedes Segment den POC-Preis (oder den Balkenmittelpunkt) an jedem Balken als Kontrollpunkte
- Zeichnet eine Hermite-interpolierte glatte Kurve durch diese Punkte
- Fügt einen parabolischen Bogen-Offset hinzu, je nachdem, ob der Swing nach oben oder nach unten gerichtet ist
- Kontrollpunkte werden an den Intensitätsspitzen der einzelnen Balken gezeichnet
- Drei Linienstile: glatt, gestrichelt, gepunktet
- Optionale Füllung zwischen dem Bogen und einer Grundlinie
- Farbkodierung: bullish = DeepSkyBlue, bearish = Magenta
7. Sub-Bar-Intensitätsprofil
Zeichnet ein Histogramm neben jeder Kerze, das die Volumenverteilung anzeigt:
- Kann auf der rechten, linken oder beiden Seiten der Kerze erscheinen
- Balkenbreite proportional zur Intensität auf jeder Ebene
- Farbintensität skaliert auch mit dem Volumen
- Optionale Volumenbeschriftung
- Konfigurierbare maximale Breite und Deckkraft
8. Fußabdruck- und Ungleichgewichtsanalyse
Bei Verwendung von Footprint-Anzeigemodi:
- Bid×Ask - zeigt "BidVol × AskVol" auf jeder Ebene
- Nur Delta - zeigt das vorzeichenbehaftete Delta (+/-)
- Volumen (Delta) - zeigt "GesamtVol (+Delta)" an
- Alle - zeigt "Bid × Ask [+Delta]" an
Erkennung von Ungleichgewichten:
- Vergleicht Ask-Volumen auf Ebene N mit Bid-Volumen auf Ebene N-1 (Kauf-Ungleichgewicht)
- Vergleicht das Bid-Volumen auf Ebene N mit dem Ask-Volumen auf Ebene N+1 (Verkaufs-Ungleichgewicht)
- Konfigurierbarer Schwellenwert für das Verhältnis (Standardwert 1,0 = 100%)
- Hervorgehoben durch farbige Hintergründe und Ränder
9. Kombinierte Preis-Heatmap
Eine aggregierte Heatmap, die den gesamten sichtbaren Bereich abdeckt (nicht pro Kerze):
- Summiert das Volumen aller zwischengespeicherten Bars (konfigurierbarer Rückblick, Standardwert 200) zu einem einzigen Profil mit 200 Preisniveaus
- Wird als Overlay über die gesamte Breite hinter den einzelnen Balken gezeichnet
- Zeigt, wo im sichtbaren Diagramm eine kumulative Volumenkonzentration besteht
- Wird auch für die Suche nach der Intensität der POC-Erweiterung verwendet
10. Höherer Zeitrahmen (HTF) Bestätigungsfeld
Analysiert zwei höhere Timeframes gleichzeitig:
- Automatische Auswahl - wählt automatisch den nächsthöheren Zeitrahmen aus (z. B. M15→H1, H1→H4, H4→D1)
- Erstellt ein Volumenprofil auf dem HTF unter Verwendung der letzten N Bars
- Berechnet HTF POC, VAH, VAL
- Bestimmt die Trendrichtung: BULL/BEAR/NEUTRAL basierend auf Schlusskurs vs. gleitendem Durchschnitt, Kerzenrichtung und Preis vs. POC
- Zeigt ein Panel in der oberen rechten Ecke mit Trend, POC-Kurs, Position relativ zum POC (oberhalb/unterhalb) und VA-Levels
11. Zoom-System
Zwei unabhängige Zoom-Achsen:
- Vertikal (PgUp/PgDn) - Preiszoom, jede Stufe verkleinert den sichtbaren Preisbereich um 15% (0,85^Stufe), bis zu 20 Stufen. Verwendet CHART_SCALEFIX, um den Preisbereich zu fixieren.
- Horizontal (+/-) - verwendet zunächst die im MT5 eingebaute Chart-Skala (0-5) und fügt dann einen "Extra-Zoom" (2×-8×) hinzu, bei dem jeder N-te Balken übersprungen wird und die verbleibenden Balken breiter gezeichnet werden, um den Raum zu füllen.
12. Kalibrierung der Y-Achse
Ein bemerkenswertes technisches Detail: Der Indikator verwendet ChartTimePriceToXY(), um den tatsächlichen Pixelbereich des Preisbereichs des Charts zu kalibrieren (der aufgrund von Symbolleisten/Scrollbars kleiner ist als CHART_HEIGHT_IN_PIXELS). Dadurch wird sichergestellt, dass die Heatmap-Zellen genau auf die Candlesticks ausgerichtet sind.
Leistungsarchitektur
- Hash-basierter Cache - 4096-Slot-Hashtabelle mit linearem Sondieren und Tombstone-Löschung für O(1)-Balkendaten-Lookup (ersetzt O(n)-lineares Scannen)
- Zirkuläre Verdrängung - wenn der Cache voll ist (1200 Einträge), wird der älteste Eintrag über einen zirkulären Schreibindex überschrieben
- Balken-X-Positions-Cache - Cache für bis zu 2000 Balken-Pixelpositionen pro Frame zur Vermeidung wiederholter ChartTimePriceToXY-Aufrufe
- Farb-LUT - eine vorgefertigte Farb-Lookup-Tabelle mit 256 Einträgen macht die Gleitkomma-Farbberechnung pro Zelle überflüssig
- Vorberechnete ARGB - alle festen Farben werden einmal pro Frame berechnet
- Culling des sichtbaren Bereichs - sowohl die Balkenschleife als auch die Schleife pro Balkenebene überspringen Elemente außerhalb des Bildschirms
- Gedrosselte Neuaufzeichnungen - konfigurierbares Minimum von Millisekunden zwischen Neuaufzeichnungen (Standard 100ms) verhindert Neuaufzeichnungsstürme während des Scrollens
- Tick-Subsampling - wenn die Anzahl der Ticks den konfigurierten Höchstwert (Standardwert 5000) überschreitet, werden die Ticks in gleichmäßigen Intervallen abgetastet, wobei die Anzahl um die Schrittgröße skaliert wird
Ereignisbehandlung
- OnCalculate - Haupt-Tick-Handler, erkennt neue Balken, löst umfangreiche Berechnungen (OB/Arc-Erkennung, HTF-Analyse) nur bei neuen Balken aus
- OnChartEvent - behandelt CHARTEVENT_CHART_CHANGE (Scrollen/Zoomen), Maus-Hover für Tooltips und Tastatur für Zoom-Steuerung. RenderFrame() wird direkt aufgerufen, um eine sofortige Reaktion zu erreichen.
- OnTimer - Millisekunden-Timer, der Scroll-Änderungen (Maus-Ziehen/Rad) abfängt, die nicht immer OnChartEvent auslösen, indem er den Diagrammstatus abfragt und mit früheren Werten vergleicht
RenderFrame() ist vollständig eigenständig - es liest den Diagrammstatus frisch und verwendet iTime/iHigh/iLow/iClose/iVolume anstelle der Array-Parameter von OnCalculate, so dass es von jedem Event-Handler aufgerufen werden kann.
Zusammenfassung der Konfiguration
Der Indikator hat ~80 Eingabeparameter, die in Gruppen organisiert sind: Heatmap, Custom Colors, POC/Value Area, HVN/LVN, Order Blocks (~20 Parameter), Swing Arcs, Sub-Bar Profile, Labels, HTF Confirmation, Chart Appearance, Footprint, Imbalance, Combined Heatmap, und Performance. Es ist als ein einziges All-in-One-Tool zur Volumenanalyse konzipiert, das mehrere separate Indikatoren ersetzt.
