English Русский
preview
Entwicklung des Price Action Analysis Toolkit (Teil 58): Modul zur Analyse der Spannenverengung und Reifegradklassifizierung

Entwicklung des Price Action Analysis Toolkit (Teil 58): Modul zur Analyse der Spannenverengung und Reifegradklassifizierung

MetaTrader 5Tester |
39 0
Christian Benjamin
Christian Benjamin

Inhalt



Einführung

Eine der zuverlässigsten Beobachtungen in der Preisaktionsanalyse ist auch eine der einfachsten: Anhaltende Ausweitungen gehen oft Phasen relativer Ruhe voraus. Nach einer starken Richtungsbewegung lässt die Dynamik nach, die Beteiligung gleicht sich aus, die Bandbreiten werden enger und die kurzfristige Volatilität nimmt ab. In vielen Fällen bildet diese Kompressionsphase den Rahmen für die nächste, gerichtete Ausweitung.

Mark Minervini beschreibt Variationen dieses Verhaltens durch das Volatility Contraction Pattern (VCP). Andere Händler bezeichnen es als „straffe Preisaktion“ oder als „gespannte Feder“, während John Bollinger einen Teil der Idee mit dem bekannten Band Squeeze formalisiert hat. Unabhängig von der Terminologie zeigt sich dieses Verhalten auf allen Märkten – Devisen, Indizes, Aktien und Kryptowährungen –, da die Preise selten direkt von einem Trend in einen anderen übergehen, ohne dass eine Ausgleichsphase dazwischen liegt.

Die praktische Herausforderung war immer dieselbe: Wie unterscheidet man objektiv zwischen einer hochwertigen Kompressionsphase – gekennzeichnet durch echte Absorption und wiederholte Interaktion mit den Begrenzungen – und einer minderwertigen Seitwärtsentwicklung, die wenig strukturelle Informationen bietet?

Die meisten visuellen Werkzeuge adressieren dieses Problem über Bänder, Kanäle oder Volatilitätsmaße. Diese Methoden sind zwar wirksam, hängen aber häufig von abgeleiteten Indikatoren ab, die erst dann reagieren, wenn sich die Struktur bereits gebildet hat. Reine diskretionäre Price-Action-Händler lösen das Problem visuell, indem sie Tests zählen, das Dochtverhalten beobachten und die Absorption aus Erfahrung beurteilen – jedoch ist es schwierig, dies über mehrere Charts hinweg konsequent umzusetzen.

Dies ist die Motivation hinter „Compression Readiness“ – einem schlanken MQL5-Indikator auf Basis geschlossener Kerzen, der die Beurteilung von Kompression nach klaren, wiederholbaren Regeln formalisiert.

Das Werkzeug:

  • Erkennt eine strukturelle Verkleinerung der Spanne im Vergleich zu einem früheren Fenster
  • Misst Kerzenüberlappung, Grenztests und Ablehnungsverhalten
  • Klassifiziert Kompressionsreife (früh / im Aufbau / ausgereift)
  • Schätzt das Bias allein anhand der Kerzengeometrie (CLV und Asymmetrie der Ablehnung)
  • Macht Spannen, die bereits ausgefallen sind oder zu einer wenig aussagekräftigen Seitwärtsentwicklung degeneriert sind, ungültig

In diesem Artikel gehe ich auf die Gründe für die Erkennungslogik, die wichtigsten Filter (getrimmte Spannen, Behandlung von Dead-Drifts, Ungültigkeitserklärung von Close-Outs), den Aufbau des Reife-Scoring und die Integration des Tools in die Live-Preisaktionsanalyse ein, ohne es als prädiktives Signal zu behandeln.

Lassen Sie uns eintauchen.



Warum Kompression beim Price Action Trading wichtig ist

Eine immer wiederkehrende Beobachtung in der Preisaktionsanalyse ist, dass einer gerichteten Ausweitung oft Perioden mit geringerer Volatilität vorausgehen. In diesen Phasen verengen sich die Preisspannen, die Dynamik lässt nach und die Beteiligung wird ausgeglichener, da der Markt von einer Richtungsbewegung in ein vorübergehendes Gleichgewicht übergeht. Dieser Kontraktions-Bewegungs-Zyklus spiegelt wider, wie die Märkte zwischen Phasen des Ungleichgewichts und des Wiederausgleichs wechseln.

Wenn es keine starken externen Faktoren gibt – wie z. B. starke Selloffs, wichtige makroökonomische Veröffentlichungen oder unerwartete Nachrichten – sinkt die Volatilität in der Regel, anstatt auf einem hohen Niveau zu bleiben. In einem Trend, insbesondere bei allmählichen Anstiegen, wird diese Kompression noch verstärkt, da die Unsicherheit abnimmt, die Teilnahme am Gegentrend sich abschwächt und der Preis innerhalb einer zunehmend eingeschränkten Bandbreite driftet. Im Laufe der Zeit kann dieser Prozess zu einer Situation führen, in der bereits relativ geringe Verschiebungen bei der Beteiligung zu überproportional gerichtete Bewegungen führen.

Universal-Kompressionsaufbauten

Dieses Verhalten tritt auf verschiedenen Märkten und in verschiedenen Handelsstilen unter verschiedenen Bezeichnungen auf, aber die zugrunde liegenden Mechanismen bleiben ähnlich. Das von Mark Minervini entwickelte Muster der Volatilitätskontraktion (Volatility Contraction Pattern, VCP) beschreibt Kompressionsphasen innerhalb etablierter Trends oder Basen, bei denen die Preisrückgänge immer flacher werden. Die ersten Rücksetzer können relativ heftig sein, gefolgt von kleineren Korrekturen, wenn sich die Spanne verengt und die Volatilität abnimmt. Das Volumen geht in dieser Phase oft zurück, was auf einen geringeren Druck in der Gegenbewegung hindeutet. Das Muster spiegelt eher einen allmählichen Absorptionsprozess als ein einzelnes Ereignis wider und kann auf mehreren Zeitskalen oder innerhalb breiterer Formationen auftreten.

Die Analogie der Spiralfeder wird häufig verwendet, um ähnliche Bedingungen zu beschreiben. Der Preis oszilliert innerhalb enger werdender Grenzen, was zu einer visuellen Kompression der Spanne führt. Der Schwerpunkt liegt nicht auf der Vorhersage, sondern auf der Erkenntnis, dass ein anhaltendes Gleichgewicht innerhalb einer angespannten Struktur einer erneuten Richtungsänderung vorausgehen kann, sobald sich dieses Gleichgewicht auflöst.

Verwandte Konzepte – wie Bollinger Band Squeezes oder enge Preisaktionsbasen – sind Variationen desselben Themas: Die Volatilität zieht sich zusammen, wenn sich der Markt konsolidiert, und weitet sich dann aus, wenn sich die Beteiligung ändert. Bei all diesen Ansätzen gilt der gemeinsame Grundsatz, dass die Märkte selten direkt von einem anhaltenden Trend zu einem anderen übergehen, ohne dass eine Kompressionsphase dazwischen liegt.

Was macht eine qualitativ hochwertige Kompressionsphase aus?

Nicht alle Kompressionsphasen liefern aussagekräftige Strukturinformationen. Qualitativ hochwertigere Kompressionsphasen weisen in der Regel mehrere Merkmale auf:

Absorption

Eine anhaltende Seitwärtsbewegung ist oft Ausdruck einer schrittweisen Akkumulation oder Verteilung durch größere Teilnehmer. Dies lässt sich durch wiederholte Interaktionen mit Bereichsgrenzen beobachten, die nicht zu entscheidenden Brüchen führen. Docht-Abpraller und Schlusskurse innerhalb der Spanne deuten auf erfolglose Versuche einer Seite hin, die Kontrolle zurückzugewinnen.

Wiederholte Interaktion an der Grenze

Mehrfache Tests derselben Höchst- oder Tiefststände ohne Durchschlagskraft deuten darauf hin, dass die Liquidität eher absorbiert als freigesetzt wird. Jeder Test liefert zusätzliche Informationen über die Stärke oder Schwäche der Teilnahme auf diesen Ebenen.

Reifegrad im Laufe der Zeit

Wenn sich eine Kompression entwickelt, werden die Bandbreiten im Vergleich zu früheren Perioden oft enger, die Kerzenüberlappung nimmt zu und die Volatilität nimmt weiter ab. Es kann zu einer Asymmetrie kommen, z. B. zu höheren Tiefst- oder niedrigeren Höchstständen innerhalb der Spanne, was einen Richtungsdruck ohne unmittelbare Auflösung widerspiegelt.

Das obige Chart veranschaulicht eine Kompressionsphase auf einem aktuellen Kurschart, die durch die frühen, aufbauenden und reifen Phasen verläuft. Mit der Entwicklung der Spanne nimmt die Überlappung der Kerzen zu, die Interaktionen an den Grenzen werden häufiger (wobei Docht-Abpraller auf Absorption hindeuten), und die Volatilität nimmt immer mehr ab. Die Stufenbezeichnungen bezeichnen die relative Qualität und den Reifegrad der Kompressionsphase innerhalb des Bereichs und nicht eine feste Reihenfolge oder einen voraussichtlichen Zeitrahmen. Der Aufbau löst sich mit einer gerichteten Ausweitung auf, die die aufgebaute Spannung widerspiegelt.

Zusammen beschreiben diese Elemente einen Zustand des Gleichgewichts, der zunehmend empfindlich auf Veränderungen reagiert, und nicht einen zufälligen oder stagnierenden Seitwärtsmarkt.

Häufige Fallstricke

Bei der kompressionsbasierten Analyse gibt es ebenfalls einige gemeinsame Herausforderungen:

Geringwertige Seitwärtsbewegung

Sehr enge Bereiche, die ohne aussagekräftige Tests oder Ablehnung fortbestehen, spiegeln oft eher ein geringes Engagement als eine Absorption wider. Diese Bedingungen führen eher zu einer ausgedehnten Seitwärtsbewegung als zu einer gerichteten Ausweitung.

Falsche Ausbrüche aus der Spanne

Kurze Ausflüge über die Grenzen der Spanne hinaus, die nicht weiterverfolgt werden, sind häufig, insbesondere bei unreifen Kompressionen. Diese Entwicklung kehrt sich oft schnell um, wenn die Beteiligung nicht ausreicht, um die Bewegung aufrechtzuerhalten.

Überinterpretation bei unruhigen Bedingungen

In einem Umfeld mit geringer Liquidität oder ohne Trend können scheinbare Rückgänge einfach nur ein Rauschen widerspiegeln. Wenn man jede enge Spanne als aussagekräftig ansieht, ohne dass es Anzeichen für eine Struktur oder Reife gibt, erhöht sich die Wahrscheinlichkeit einer schlechten Entscheidung.

Der entscheidende Unterschied liegt in der Struktur, nicht im Aussehen. Eine qualitativ hochwertige Kompressionsphase ist definiert durch eine fortschreitende Verengung, wiederholte und informative Interaktionen an den Grenzen und eine sich abzeichnende Asymmetrie – und nicht nur durch enge Bereiche. Das Tool „Compression Readiness“ wurde entwickelt, um diese Beobachtungen zu formalisieren, indem es Kontraktion, Überlappung, Test- und Ablehnungsverhalten, Reifefortschritt und das absorptionsbasierte Bias quantifiziert. Sie dient nicht der Vorhersage von Ergebnissen, sondern soll einen strukturierten Kontext für die Bewertung liefern, ob eine Kompressionsphase ein sinnvolles Marktgleichgewicht oder ein informationsarmes Abdriften widerspiegelt.



Schlüsselkonzepte & Logik

Der Compression Readiness-Indikator setzt die zuvor erörterten Preisaktionsprinzipien in einen strukturierten Erkennungsrahmen um. Alle Berechnungen werden nur für geschlossene Kerzen durchgeführt, was ein stabiles Verhalten ohne Neuzeichnen/Repainting sowohl in historischen als auch in Live-Chart-Umgebungen gewährleistet.

Die Funktion DetectCompression wertet ein aktuelles Preisfenster aus (Standard: 30 Kerzen) gegen ein vorhergehendes Referenzfenster. Sie misst Kontraktion, Kerzenüberlappung, Grenzinteraktion, Ablehnungsverhalten und relative Bereichsgröße. Diese Messungen fließen in ein punktbasiertes Modell ein, das die Kompressionsreife klassifiziert, während das Bias allein anhand der Kerzengeometrie bewertet wird.

Die Logik ist in vier Hauptkomponenten unterteilt.

1. Erkennung der Kompressionsphase

Die Kompression wird durch einen systematischen Vergleich der Struktur des aktuellen Fensters mit der des vorherigen Referenzzeitraums ermittelt.

Die Bereichskontraktion wird durch die Messung des aktuellen Hoch-Tief-Envelopes im Verhältnis zum Referenzfenster bewertet; eine sinnvolle Reduzierung – gesteuert durch InpContractionMax – trägt positiv zur Gesamtqualität der Kompressionsphase bei. Die Kerzenüberschneidung wird durch die Berechnung des gemeinsamen Kursgebiets zwischen aufeinanderfolgenden Kerzen bewertet, wobei ein höheres Überschneidungsverhältnis auf eine geringere Richtungsdynamik und eine ausgewogenere Beteiligung hinweist. Die Bereichsdichtigkeit wird sowohl absolut als auch relativ geprüft: Die aktuelle Bereichshöhe wird mit einem festen Höchstwert (InpBoxTightMaxPts) verglichen, während die durchschnittliche Kerzengröße mit historischen Werten verglichen wird, um Zeiträume mit ungewöhnlich geringer Aktivität auszuschließen.

Um die Robustheit zu erhöhen, schließt ein optionaler, getrimmter Envelope (InpUseTrimmedBox) eine konfigurierbare Anzahl extremer Dochte (InpTrimCount) aus, um sicherzustellen, dass isolierte Preisspitzen den wahrgenommenen Bereich nicht verzerren. Schließlich entfernt eine defensive Invalidierungsregel das gesamte Setup, wenn sich eine Kerze außerhalb des definierten Feldes schließt (InpInvalidateOnCloseOut), da dies signalisiert, dass die Kompression bereits aufgelöst wurde oder fehlgeschlagen ist.

2. Reifegrad-Bewertungssystem

Die Kompressionsqualität wird anhand eines einfachen additiven Bewertungsmodells eingestuft, wobei die Logik transparent und rechnerisch effizient bleibt.

Es werden Punkte aus unabhängigen strukturellen Bedingungen gesammelt, einschließlich Kontraktionsstärke, Überlappung, absoluter und relativer Dichtheit, Grenzinteraktion und dem Vorhandensein von Abstoßungskerzen. Ablehnung ist definiert als signifikant gegensätzliche Dochte mit Schließungen, die zum Inneren des Bereichs zurückkehren.

Der End-Score entspricht vier Reifegraden:

  • None: unzureichender struktureller Nachweis
  • Early: Grundkontraktion und Überlappung vorhanden
  • Building: zunehmende Interaktion und Verschärfung
  • Mature: stärkste Kombination aus Kontraktion, Tests und Ablehnungen

Die Schwellenwerte werden als Eingaben angezeigt (InpScoreNeedEarly, InpScoreNeedBuilding, InpScoreNeedMature), was eine Anpassung der Empfindlichkeit ohne Codeänderungen ermöglicht. Ein optionaler Dead-Drift-Filter (InpFilterDeadDrift) bestraft oder macht Kompressionen ungültig, die im Verhältnis zur durchschnittlichen Kerzengröße der letzten Zeit unverhältnismäßig klein sind, und filtert Bereiche mit geringem Engagement heraus.

3. Absorption und Bias

Das Bias ergibt sich ausschließlich aus der Kerzenstruktur. Der mittlere „Close Location Value“ (CLV) misst, wo die Schlusskurse innerhalb der Kerzenbereiche über einen kurzen Rückblick auftreten, und bietet eine solche Basisansicht des Richtungsdrucks. Bei der Asymmetrie der Ablehnung werden die Ablehnungen der oberen Dochte (gescheiterte Aufwärtsbewegungen) mit den Ablehnungen der unteren Dochte (verteidigte Abwärtsbewegungen) verglichen, wobei signifikante gegenläufige Dochte zur Richtungsgewichtung beitragen.

Diese Eingaben bilden eine Rohbewertung, die als bullisch, bärisch oder neutral eingestuft wird. Die optionale Glättung (InpSmoothBias) verringert die Empfindlichkeit gegenüber isolierten Kerzen. Die Stärke des Bias wird qualitativ angegeben (sehr gering bis hoch), um den Kontext zu verdeutlichen, ohne Gewissheit zu implizieren.

4. Zusammenfassung der Defensiv-Filter

Mehrere Sicherheitsvorkehrungen gewährleisten, dass nur strukturell sinnvolle Kompressionen erhalten bleiben:

  • Docht-getrimmte Spanne (Entfernen von Spikes)
  • Ungültigkeitserklärung des Abschlusses
  • Dead-Drift-Filterung
  • Optionale Randtests nur für Körper (InpUseBodyBoxForTests) für strengere Interaktionskriterien

Zusammen reduzieren diese Filter Fehlalarme in unruhigen, wenig liquiden oder bereits aufgelösten Marktbedingungen.



Visuelle und informationelle Elemente

Dieses Tool ist so konzipiert, dass es seine Analyse visuell darstellt. Alle grafischen Elemente werden von geschlossenen Kerzenauswertungen abgeleitet und nur aktualisiert, wenn sich der interne Zustand ändert.

Box der Kompressionsspanne

Wenn ein gültiger Kompressionszustand erkannt wird, zeichnet der Indikator einen rechteckigen Bereich, der das aktive Analysefenster abdeckt. Die Box stellt die effektive Kompressionsspanne nach optionalem Trimmen und Validierung dar, nicht eine prognostizierte Grenze.

Die Farbe der Box spiegelt den aktuellen Analysestatus wider:

  • Neutral/inaktiv, wenn keine nennenswerte Kompression vorhanden ist.
  • Zustandsabhängige Färbung, wenn die Kompression als früh, im Aufbau oder reif eingestuft wird.
  • Die Box wird nur dann neu gezeichnet, wenn sich der zugrundeliegende Zustand ändert, was die visuelle Stabilität während der Live-Darstellung gewährleistet.

Markierung der Grenzinteraktion

Optionale Markierungen heben Interaktionen mit dem oberen und unteren Ende des Kompressionsbereichs hervor. Diese Markierungen zeigen an, wo der Preis die Grenzen der Handelsspanne innerhalb der Toleranz getestet hat, und bieten eine visuelle Bestätigung des Absorptions- und Ablehnungsverhaltens, das bereits intern berücksichtigt wurde. Die Markierungen sind rein deskriptiv und bestätigen lediglich, dass eine strukturelle Interaktion stattgefunden hat.

Strukturelle Kontext-Kennzeichnungen

Die jüngste Swing-Struktur wird optional mit Anmerkungen versehen, um einen kontextuellen Bezug zum Kompressionsbereich herzustellen. Diese Kennzeichnungen identifizieren relative Swing-Beziehungen (höhere Hochs, tiefere Hochs, höhere Tiefs, tiefere Tiefs) auf der Grundlage von bestätigten Swing-Punkten. Sie sollen die Interpretation der Kompression innerhalb einer breiteren Preisstruktur erleichtern und nicht den Trend oder die Richtung klassifizieren.

Indikatoren für Bias-Änderungen

Wenn diese Funktion aktiviert ist, werden die Pfeile für die Bias-Änderung nur gezeichnet, wenn der intern abgeleitete Bias-Zustand zwischen neutral, bullisch oder bärisch wechselt. Diese Pfeile sind genau am Ende der Kerze verankert, an dem die Änderung bestätigt wird. Sie stellen Zustandsübergänge dar, keine Richtungsaufrufe, und bleiben nur bestehen, wenn der Bias-Zustand gültig bleibt.

Informationelles Panel

Eine kompakte Informationstafel fasst den aktuellen Analysestand in Textform zusammen. Es zeigt:

  • Kompressionsphasenstatus und Reifegrad
  • Kontraktions- und Überlappungsmessungen
  • Grenzwertprüfung und Rückweisungszahlen

Bias und qualitative Stärke

Das Panel wird nur bei geschlossenen Kerzen aktualisiert und spiegelt dieselbe Logik wider, die für alle visuelle Elemente verwendet wird, um die Konsistenz zwischen numerischem Kontext und Chartkennzeichnungen zu gewährleisten.

Design-Absicht

Alle visuellen und informativen Komponenten sind der zugrunde liegenden Analyse untergeordnet. Sie dienen dazu, die strukturellen Bedingungen sichtbar zu machen, ohne zusätzliche Interpretationsschichten, Ausführungshinweise oder Zeitvorgaben.

Da der Indikator anschaulich und zustandsorientiert ist, eignet er sich sowohl für historische Analysen als auch für kontextbezogene Live-Analysen, ohne das Kursverhalten zu verändern.



Die Eingabeparameter

Das Tool für die „Compression Readiness“ bietet eine begrenzte Anzahl von Eingaben, mit denen die Empfindlichkeit und das visuelle Verhalten angepasst werden können, ohne die zugrunde liegende Erkennungslogik zu verändern. Die Standardwerte sind so gewählt, dass sie die üblichen Preisaktionsbedingungen widerspiegeln und gleichzeitig für verschiedene Symbole und Zeitrahmen anpassbar sind.

Die Parameter sind nach Funktionen und nicht nach der Reihenfolge des internen Codes gruppiert.

Fenster-Konfiguration

Diese Parameter definieren den für den strukturellen Vergleich verwendeten Analysehorizont.

Fensterkerzen (InpWindowBars)

  • Legt die Größe des Fensters der letzten Analyse fest. Dieses Fenster stellt den aktiven Kompressionsphasenkandidaten dar.

Vorherige Fensterkerzen (InpPrevWindowBars)

  • Legt den Bezugszeitraum für die Bewertung der relativen Kontraktion fest. Die Verwendung eines separaten Fensters verhindert, dass die Kompression isoliert bewertet wird.

Die Standardpaarung (30 / 30 Kerzen) bietet einen ausreichenden strukturellen Kontext, ohne das kurzfristige Verhalten zu sehr zu glätten.

Empfindlichkeit der Kompression

Diese Eingaben steuern, wie streng Kontraktion und Gleichgewicht bewertet werden.

  • Maximales Kontraktionsverhältnis (InpContractionMax): Begrenzt, wie groß die durchschnittliche Spanne der letzten Kerze im Verhältnis zum Referenzfenster sein darf, damit eine Kompressionsphase infrage kommt.
  • Minimales Überlappungsverhältnis (InpOverlapMin): Legt den erforderlichen Grad des gemeinsamen Kursgebiets zwischen aufeinanderfolgenden Kerzen fest.
  • Maximale Boxhöhe (InpBoxTightMaxPts): Begrenzt die absolute Höhe des Kompressionsbereichs, um zu verhindern, dass zu breite Strukturen als Kompression eingestuft werden.

Zusammen bestimmen diese Parameter, ob sich eine Struktur wirklich verfestigt oder nur locker konsolidiert.

Interaktion an der Grenze und Abprall

Diese Eingaben bestimmen, wie die Preisinteraktion mit den Kompressionsgrenzen interpretiert wird.

  • Testtoleranz (InpTestTolerancePts): Legt fest, wie nahe der Kurs an die Bereichsgrenze herankommen muss, um als Test zu gelten.
  • Mindestrückweisungsgröße (InpRejectionMinPts): Definiert die erforderlich Mindestdochtlänge, um als Ablehnung zu gelten.
  • Mindesttests für die Klassifizierung (InpMinTestsForEarly, InpMinTestsForMature): Sie geben an, wie viele Grenzwirkungen erforderlich sind, bevor die Kompression die Reifegrade erreichen kann.

Diese Parameter helfen dabei, sinnvolle Absorption von zufälligen Berührungen zu unterscheiden.

Schwellenwerte für die Reifegradbewertung

Der Reifegrad der Kompressionsphase wird bestimmt, indem die kumulierte Punktzahl auf diskrete Zustände abgebildet wird.

  • Punktzahl für früh (InpScoreNeedEarly)
  • Punktzahl für Gebäude (InpScoreNeedBuilding)
  • Punktzahl für Reife (InpScoreNeedMature)

Durch die Anpassung dieser Schwellenwerte ändert sich die Geschwindigkeit, mit der die Kompressionsphase durch die einzelnen Stadien fortschreitet, ohne dass sich die einzelnen Bewertungskomponenten ändern.

Schätzung des Bias

Bias-bezogene Eingaben beeinflussen, wie der Richtungsdruck aus der Kerzenstruktur abgeleitet wird.

  • CLV Lookback (InpCLVMeanBars): Legt die Anzahl der Kerzen fest, die zur Berechnung des mittleren Close Location Value verwendet werden.
  • Glättung des Bias (InpSmoothBias, InpBiasSmoothBars): Ermöglicht die optionale Glättung der Bias-Klassifizierung über mehrere Kerzen, um die Empfindlichkeit gegenüber einzelnen Kerzen zu verringern.

Das Bias beeinflusst eher die Stabilität der Klassifizierung als die Richtung selbst.

Robustheit & Validierung

Diese Parameter steuern das Defensivverhalten und die Rauschunterdrückung.

  • Getrimmter Bereich (InpUseTrimmedBox, InpTrimCount): Ermöglicht die Beseitigung extremer Dochte bei der Konstruktion der Kompressionshülle.
  • Invalidieren bei Schließung (InpInvalidateOnCloseOut): Disqualifiziert die Kompression, wenn eine Kerze außerhalb des definierten Bereichs schließt.
  • Dead-Drift-Filter (InpFilterDeadDrift, InpMinBoxToAvgRange): Bestraft oder erklärt Bereiche für ungültig, die im Verhältnis zur durchschnittlichen Kerzengröße der letzten Zeit unverhältnismäßig klein sind.
  • Nur-Körper-Randtests (InpUseBodyBoxForTests): Begrenzt die Prüfung der Interaktion zwischen den Grenzen auf Kerzenkörper für eine strengere Validierung.
Visuelle Kontrollen

Die visuellen Optionen betreffen nur die Darstellung und haben keinen Einfluss auf die Erkennung.

  • Kompressionsbox und Marker: Schaltet das Rendering des Bereichsrahmens und der Interaktionsmarkierungen für die Begrenzung um.
  • Bias-Pfeile und Strukturetiketten: Aktivieren oder Deaktivieren von kontextbezogenen Anmerkungen, die von internen Zustandsänderungen abgeleitet sind.

Die Eingänge dienen der Anpassung der Empfindlichkeit und nicht des Verhaltens. Größere Abweichungen von den Standardeinstellungen sollten schrittweise vorgenommen werden, da durch die gleichzeitige Anpassung mehrerer Parameter gültige Strukturen unterdrückt oder Kompressionen in Umgebungen mit geringer Volatilität übermäßig gefiltert werden können.



MQL5-Implementierung

Die Erkennung von Kompressionsbedingungen im Vorfeld einer potenziellen strukturellen Auflösung beruht auf einem reinen Preisaktionsansatz, bei dem untersucht wird, wie sich die Preise innerhalb sorgfältig definierter historischer Zeitfenster verhalten. Anstatt sich auf nachlaufende Indikatoren zu stützen, konzentriert sich die Umsetzung auf die Messung, wie sich die Spannen zusammenziehen, wie die Kerzen innerhalb dieser Spannen interagieren und wie sich der interne Druck entwickelt. Dies erfordert eine sorgfältige Aufbereitung der Preisdaten, die als Grundlage für alle nachfolgenden Analysen dienen.

Funktionen wie WindowHighLow() und WindowHighLowTrimmed() werden verwendet, um die höchsten und niedrigsten Preise sowohl innerhalb des aktuellen Fensters als auch eines Referenzfensters zu ermitteln. Das optionale Trimmen der Dochte reduziert den Einfluss von einzelnen Ausreißern. Diese Grenzen definieren das Kompressionsfeld, das sowohl als analytische Referenz als auch als visuelle Darstellung der Verengung auf dem Chart dient.

void WindowHighLowTrimmed(int start,int count,int trim,double &hi,double &lo)
{
   hi=-DBL_MAX; lo=DBL_MAX;
   int totalBars = Bars(_Symbol,_Period);
   int n = MathMin(count, totalBars-start);
   if(n<=0){ hi=0; lo=0; return; }

   double highs[], lows[];
   ArrayResize(highs,n);
   ArrayResize(lows,n);

   for(int i=0;i<n;i++)
   {
      highs[i] = iHigh(_Symbol,_Period,start+i);
      lows[i]  = iLow (_Symbol,_Period,start+i);
   }

   ArraySort(highs);
   ArraySort(lows);

   int t = MathMax(0, MathMin(trim, (n-1)/2));
   lo = lows[t];
   hi = highs[n-1-t];
}

Um die Volatilität zu kontextualisieren und zu vermeiden, dass übermäßig ruhige Bedingungen hervorgehoben werden, berechnet AvgRange() die durchschnittliche Kerzenspanne über die gleichen Fenster.

double AvgRange(int start,int count)
{
   double sum=0; int n=0;
   for(int i=start; i<start+count && i<Bars(_Symbol,_Period); i++)
   {
      double r=CandleRange(i);
      if(r>0){ sum+=r; n++; }
   }
   return (n>0 ? sum/n : 0.0);
}

Parallel dazu werten CandleCLV() und OverlapRatioWindow() aus, wo Kerzen innerhalb ihrer Spannen schließen und wie stark sich die Preise zwischen aufeinanderfolgenden Kerzen überschneiden, was zusätzliche Einblicke in die interne Struktur der Spannen bietet.

double CandleCLV(int s)
{
   double h=iHigh(_Symbol,_Period,s);
   double l=iLow (_Symbol,_Period,s);
   double c=iClose(_Symbol,_Period,s);
   if(h<=l) return 0.0;
   return (2.0*c - h - l) / (h - l);
}

double OverlapRatioWindow(int start,int count)
{
   double sum=0; int n=0;
   for(int i=start; i<start+count-1 && (i+1)<Bars(_Symbol,_Period); i++)
   {
      double h1=iHigh(_Symbol,_Period,i),   l1=iLow(_Symbol,_Period,i);
      double h2=iHigh(_Symbol,_Period,i+1), l2=iLow(_Symbol,_Period,i+1);

      double inter = MathMin(h1,h2) - MathMax(l1,l2);
      double uni   = MathMax(h1,h2) - MathMin(l1,l2);
      if(uni<=0) continue;

      double r = (inter>0 ? inter/uni : 0.0);
      sum += r; n++;
   }
   return (n>0 ? sum/n : 0.0);
}

Die Kernanalyse ist in der Routine DetectCompression() implementiert, die den Kompressionsphasenstatus in einer Reihe von Schritten auswertet. Der Prozess beginnt mit der Festlegung der Begrenzungsebenen der Kompressionszone unter Berücksichtigung der gewählten Fenstergrößen und aller Trimmoptionen.

void DetectCompression()
{
   if(InpUseTrimmedBox)
      WindowHighLowTrimmed(1, InpWindowBars, InpTrimCount, boxTop, boxBot);
   else
      WindowHighLow(1, InpWindowBars, boxTop, boxBot);
   // Further processing follows...
}

Vor der weiteren Auswertung werden defensive Prüfungen durchgeführt: Wenn die letzten Kerzenschließungen außerhalb des definierten Bereichs liegen (InpInvalidateOnCloseOut) oder wenn die Höhe des Bereichs auf ein Umfeld mit geringem Engagement hinweist (InpFilterDeadDrift), wird die Struktur vorzeitig für ungültig erklärt.

if(InpInvalidateOnCloseOut)
{
   for(int i=1; i<=InPWindowBars && i<Bars(_Symbol,_Period); i++)
   {
      double cClose=iClose(_Symbol,_Period,i);
      if(cClose>boxTop || cClose<boxBot)
      {
         // Invalidate structure
         return;
      }
   }
}

Wenn die Struktur intakt bleibt, vergleicht die Routine die durchschnittlichen Kerzenbereiche der letzten Zeit mit denen des Referenzfensters, um die Kontraktion zu quantifizieren.

double recentAvg=AvgRange(1, InpWindowBars);
double prevAvg=AvgRange(1+InpWindowBars, InpPrevWindowBars);
contraction= (prevAvg>0 ? recentAvg/prevAvg : 1.0);

Die Interaktion an den Grenzen wird dann anhand der Anzahl der Versuche und der Ablehnungen an der oberen und unteren Grenze des Bereichs bewertet.

topTests=0; bottomTests=0; topRejects=0; bottomRejects=0;
double tol=InpTestTolerancePts*_Point;
double rej=InpRejectionMinPts*_Point;

for(int i=1; i<=InpWindowBars && i<Bars(_Symbol,_Period); i++)
{
   double h=iHigh(_Symbol,_Period,i);
   double l=iLow(_Symbol,_Period,i);
   double o=iOpen(_Symbol,_Period,i);
   double c=iClose(_Symbol,_Period,i);
   
   if(h > boxTop - tol)
   {
      topTests++;
      // Additional boundary checks...
   }
   if(l < boxBot + tol)
   {
      bottomTests++;
      // Additional boundary checks...
   }
}

Diese Maße beschreiben, wie die Preise innerhalb der Engpasszone interagieren und ob die Aktivität eher absorbiert als freigesetzt wird. Um diese Beobachtungen zusammenzufassen, werden in einem additiven Scoring-Modell die Merkmale Kontraktion, Überlappung, Dichtheit der Box und Ablehnung anhand von vordefinierten Schwellenwerten wie InpScoreNeedEarly bewertet. Anhand der resultierenden Punktzahl wird die Kompression als früh, aufbauend oder reif eingestuft. Diese Klassifizierung spiegelt die relative Entwicklung der Kompressionsstruktur wider, ohne eine Aussage über Richtung oder Zeitpunkt zu machen.

int score=0;
if(contraction <= InpContractionMax) score+=2;
// Additional scoring logic...
if(score >= InpScoreNeedEarly)
   maturity=MAT_EARLY;
// Further classification...

Die Bewertung der Neigung erfolgt unabhängig von der Reifegradeinstufung. Der mittlere Close Location Value (CLV) mit einem kurzen Rückblick erfasst, wo der Kurs dazu neigt, innerhalb seiner Spanne zu schließen, während die Ablehnungsasymmetrie gescheiterte Aufwärtsbewegungen mit verteidigten Abwärtsbewegungen vergleicht. Diese Komponenten werden kombiniert und mit BiasFromRaw() auf bullische, bärische oder neutrale Zustände abgebildet.

double meanClv=MeanCLV(1, InpCLVMeanBars);
double rawBias=CalculateBias(rawData);
bias=BiasFromRaw(rawBias);

Wenn diese Funktion aktiviert ist, werden bei der Bias-Glättung mehrere Kerzen berücksichtigt, um die Empfindlichkeit gegenüber einzelnen Kerzen zu verringern. Änderungen des Bias werden visuell genau an der Kerze markiert, an der der Übergang stattfindet. Visuelle Elemente werden verwendet, um die Analyse in einen Kontext zu stellen. Die Kompressionszone wird mit DrawCompressionBox() gezeichnet, wobei der Klarheit halber optional ein Beschnitt vorgenommen wird.

DrawCompressionBox(t1, t2, top, bottom, boxColor);

Markierungen heben Bereiche hervor, in denen es zu wiederholten Interaktionen mit dem Bereich kommt, während historische Schattierungen Phasen anhaltender Kompression markieren. Hohe und tiefe Swings werden mit DrawSwingDots() markiert, und die jüngsten Strukturbeschriftungen bieten zusätzlichen Kontext um lokale strukturelle Drehpunkte, ohne die analytische Logik zu verändern.

Ein Informationspanel fasst die wichtigsten Metriken zusammen – einschließlich Reifegrad, Punktzahl, Bereichshöhe, Kontraktionsverhältnis, Überlappung, Bias-Grad und Anzahl der Ablehnungen – und stellt sie mithilfe von RenderInfo() in einer übersichtlichen vertikalen Liste dar. Dieses Panel fasst den aktuellen Kompressionszustand zusammen, der sich ausschließlich aus den Daten der geschlossenen Kerzen ergibt.

Da ausschließlich bestätigte Preisdaten herangezogen werden, werden Spätindikatoren und zukunftsgerichtete Annahmen bei der Umsetzung vermieden. Defensivmechanismen wie Docht-Trimmung und Dead-Drift-Filterung tragen zur Verringerung des strukturellen Rauschens bei, während konfigurierbare Parameter die Anpassung der Analyse an verschiedene Instrumente und Zeitrahmen ermöglichen. Das Ergebnis ist ein strukturierter Rahmen für die Identifizierung und Überwachung der Kompressionsentwicklung, der ausschließlich auf dem beobachtbaren Preisverhalten basiert.



Testen des Tools und beobachtete Ergebnisse

In diesem Abschnitt werde ich die von mir durchgeführten Tests und die dabei erzielten Ergebnisse vorstellen. Diese Tests wurden sowohl mit Live-Chartdaten als auch durch Backtesting historischer Ergebnisse durchgeführt, wobei der Schwerpunkt auf dem Instrument EURUSD lag. Das nachstehende Chart ist ein vom Strategietester generiertes GIF, das das Verhalten des Systems bei historischen Daten veranschaulicht.

Das gestrichelte Rechteck markiert das aktive Kompressionsphasenfenster. Seine Höhe spiegelt die gemessene Reichweite nach dem optionalen Trimmen des Dochts wider, während die interne Kerzenüberlappung und die Wechselwirkungen an den Rändern bewertet werden, um die Qualität der Kontraktion zu beurteilen. Die Informationstafel auf der linken Seite fasst den aktuellen Stand zusammen: die Klassifizierung der Reife, die Punktzahl, die Fensterhöhe, das Kontraktionsverhältnis, die Überlappung und die Absorptionsmetriken, wie z. B. Grenztests und Ablehnungen. Das Bias wird gesondert als struktureller Zustand angegeben, der sich aus der Kerzengeometrie ableitet, d. h. aus der CLV und der Asymmetrie der Abstoßung, sowie aus qualitativen Indikatoren für die Stärke. Es ist wichtig zu beachten, dass diese Visualisierung keine Ausführungslogik impliziert. Swing-Annotationen (HL/LH) liefern zusätzlichen strukturellen Kontext, ohne die Kompressionsphasenlogik zu beeinflussen. Die Pfeile zur Änderung des Bias, sofern vorhanden, sind genau am Ende der Kerze verankert, an dem der Bias-Zustand übergeht, und spiegeln nur die Bewertung der geschlossenen Kerzen wider.

Das folgende Chart zeigt die gleiche Darstellung, die auch im Strategietester erfasst wurde.

Schließlich können wir das Chart aus dem Live-Chart-Test beobachten. Damit ist der Überblick über die Visualisierung abgeschlossen. Die gleichen Strukturelemente und visuellen Konventionen, die im Strategy Tester demonstriert werden, bleiben auch im Live-Chart-Betrieb erhalten und spiegeln ein konsistentes Verhalten bei der historischen Rekonstruktion und der Echtzeitauswertung wider.

Zusammen bieten diese Darstellungen eine klare Möglichkeit, die Kompressionsstruktur, das Entwicklungsstadium und den Richtungszusammenhang zu beobachten, wie sie sich auf geschlossenen Kerzen entwickeln. Diese Konsistenz ermöglicht es, den analytischen Zustand des Marktes auf dieselbe Weise zu überwachen, unabhängig davon, ob das Chart rückblickend oder in Echtzeit betrachtet wird, ohne dass eine Ausführungslogik oder vorausschauende Annahmen eingeführt werden.



Schlussfolgerung

Dieser Artikel beschreibt die Implementierung eines Kompressionsanalysemoduls, das an geschlossenen Kerzen evaluiert wurde. Die Logik untersucht Bereichskontraktion, Grenzinteraktion, Ablehnungsverhalten und Kerzenstruktur, um Kompressionsreife und Richtungszusammenhang zu klassifizieren. Es sind keine Indikatoren, Ausführungslogik oder Vorhersageannahmen beteiligt. Das Modul ist als analytische Komponente innerhalb umfassenderer Preis-Aktions-Analyse-Workflows gedacht und kann auf verschiedene Symbole und Zeitrahmen angewendet werden.

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

Beigefügte Dateien |
Einführung in MQL5 (Teil 38): Beherrschung von API und WebRequest in MQL5 (XII) Einführung in MQL5 (Teil 38): Beherrschung von API und WebRequest in MQL5 (XII)
Wir erstellen eine praktische Brücke zwischen MetaTrader 5 und Binance: Wir holen 30-Minuten-Klines mit WebRequest, extrahieren OHLC/Zeitwerte aus JSON und bestätigen ein bullisches Engulfing-Muster, indem wir nur geschlossene Kerzen verwenden. Dann setzen wir die Zeichenkette für die Abfrage zusammen, berechnen die HMAC-SHA256-Signatur, fügen X-MBX-APIKEY hinzu und übermitteln authentifizierte Orders. Sie erhalten einen klaren, durchgängigen EA-Workflow von der Datenerfassung bis zur Orderausführung.
Einführung in MQL5 (Teil 37): Beherrschung von API und WebRequest in MQL5 (XI) Einführung in MQL5 (Teil 37): Beherrschung von API und WebRequest in MQL5 (XI)
In diesem Artikel zeigen wir Ihnen, wie Sie mit MQL5 authentifizierte Anfragen an die Binance-API senden, um Ihren Kontostand für alle Assets abzurufen. Erfahren Sie, wie Sie Ihren API-Schlüssel, die Serverzeit und die Signatur verwenden, um sicher auf Kontodaten zuzugreifen, und wie Sie die Antwort zur späteren Verwendung in einer Datei speichern können.
Python-MetaTrader 5 Strategie-Tester (Teil 01): Handelssimulator Python-MetaTrader 5 Strategie-Tester (Teil 01): Handelssimulator
Das MetaTrader-5-Modul für Python ermöglicht es, Trades bequem über Python in der MetaTrader-5-Anwendung zu eröffnen. Es hat jedoch einen großen Nachteil: Die im MetaTrader-5-Terminal verfügbare Funktion des Strategietesters fehlt. In dieser Artikelserie werden wir ein Framework für das Backtesting Ihrer Handelsstrategien in Python-Umgebungen aufbauen.
Entwicklung des Price Action Analysis Toolkit (Teil 57): Ein Modul zur Klassifizierung von Marktzuständen in MQL5 Entwicklung des Price Action Analysis Toolkit (Teil 57): Ein Modul zur Klassifizierung von Marktzuständen in MQL5
In diesem Artikel wird ein Modul zur Klassifizierung von Marktzuständen für MQL5 entwickelt, das das Preisverhalten anhand abgeschlossener Preisdaten interpretiert. Durch die Analyse von Volatilitätskontraktion, -expansion und struktureller Konsistenz klassifiziert das Tool die Marktbedingungen als Kompression, Transition, Expansion oder Trend und bietet so einen klaren kontextuellen Rahmen für die Price-Action-Analyse.