Entwicklung des Price Action Analysis Toolkit (Teil 57): Ein Modul zur Klassifizierung von Marktzuständen in MQL5
Inhalt
Einführung
Bei der Betrachtung eines Kurscharts ist es wichtig, zu verstehen, was die aktuelle Kursbewegung darstellt, bevor man Erwartungen über die weitere Entwicklung äußert. Anhand dieses Kontextes lässt sich feststellen, ob die Bedingungen für eine Beteiligung geeignet sind oder ob es besser ist, auf die Entstehung einer klareren und stabileren Struktur zu warten. Die Ermittlung des aktuellen Marktzustands durch manuelle Analysen erfordert Zeit und anhaltende Konzentration, insbesondere wenn man über mehrere Zeiträume hinweg arbeitet. Diesen Prozess ständig zu wiederholen, kann anstrengend und ineffizient werden.
In diesem Teil der Serie Price Action Analysis Toolkit Development stellen wir ein automatisiertes MQL5-System vor, das den aktuellen Marktzustand anhand der reinen Preisaktion klassifiziert. In den folgenden Abschnitten werden das zugrunde liegende Konzept, die Klassifizierungslogik und der Implementierungsansatz im Detail erläutert.
Verständnis der Marktzustände
Bevor wir die Marktzustände im Zusammenhang mit der Price Action untersuchen, ist es sinnvoll, mit einem bekannten wissenschaftlichen Konzept zu beginnen: den Zuständen der Materie. Materie ist alles, was Masse hat und Raum einnimmt, und sie kann je nach innerer Energie und äußerem Druck in verschiedenen physikalischen Zuständen existieren. Diese Zustände werden gemeinhin als fest, flüssig und gasförmig bezeichnet.
In einem festen Zustand besitzen die Teilchen eine relativ geringe Energie. Sie sind dicht gedrängt und stark gebunden, was ihre Bewegungsfreiheit einschränkt. Mit zunehmender Energie werden diese Bindungen schwächer, und die Materie geht in einen flüssigen Zustand über, in dem die Teilchen eng beieinanderliegen, aber nicht mehr starr fixiert sind. Bei weiterem Anstieg der Energie werden die Teilchen hochaktiv und zerstreuen sich frei und bilden einen gasförmigen Zustand.
Ein wichtiger Grundsatz ist, dass sich der Stoff selbst nicht verändert, sondern nur sein Zustand. Wasser bleibt Wasser, egal ob es eisig, flüssig oder dampfförmig ist. Was sich ändert, ist die innere Energie und die Art und Weise, wie sich diese Energie durch Struktur und Bewegung ausdrückt. Dieser Grundsatz bietet einen nützlichen Rahmen für die Interpretation des Marktverhaltens. Der Preis selbst bleibt derselbe, drückt jedoch je nach internen Bedingungen wie Volatilität und struktureller Organisation unterschiedliche Verhaltenszustände aus. Diese Zustände beschreiben, wie sich der Markt verhält, nicht wohin er sich entwickelt.
Vom physischen Zustand zum Marktzustand
Das nachstehende Diagramm veranschaulicht, wie die Zustände der Materie als Analogie für Marktzustände verwendet werden, wobei der Schwerpunkt eher auf Volatilität und strukturellem Zwang als auf Richtungstrends liegt.

In der Wissenschaft sind Gase leichter zu komprimieren als Feststoffe, was bei der Analogie der Materiezustände kontraintuitiv erscheinen mag. In diesem Zusammenhang bezieht sich die Kompression jedoch eher auf einen Zustand der Einschränkung als auf die Fähigkeit, komprimiert zu werden. Ein Festkörper ist ein Zustand, in dem die Teilchen bereits dicht gepackt sind und die Bewegung eingeschränkt ist. Ebenso ist ein Markt, auf dem eine Kompression stattfindet, ein Markt, auf dem die Preise bereits innerhalb einer engen Spanne begrenzt sind. Die Analogie zielt daher auf Bewegungsfreiheit und innere Energie ab, nicht auf die mechanische Kompressibilität. In diesem Rahmen werden Marktzustände als beschreibende Bedingungen und nicht als prädiktive Signale behandelt. Ziel ist es, auf der Grundlage der beobachtbaren Merkmale der jüngsten, vollständig geschlossenen Kerzen festzustellen, ob der Preis eingeschränkt ist, sich lockert oder sich frei bewegt.
Die bei dieser Entwicklung verwendete Kartierung ist
- Feststoff-Kompression
- Flüssigkeits-Transition
- Gas-Expansion
Diese Zustände entwickeln sich kontinuierlich und nicht abrupt. Die Märkte bewegen sich in der Regel durch Zwischenzustände, da sich die Volatilität und die Struktur ändern, anstatt sofort von einem Zustand in einen anderen überzugehen.
Kompressionszustand (fest)
Ein Kompressionszustand ist ein Zustand, in dem der Preis strukturell eingeschränkt ist. Die Kerzenbereiche schrumpfen, die Volatilität nimmt ab, und der Preis schwankt innerhalb einer relativ engen Bandbreite. Hochs und Tiefs überschneiden sich, und die Richtungsentwicklung bleibt begrenzt.

Kompression ist nicht gleichbedeutend mit Untätigkeit. Der Preis schwankt weiterhin, aber die Bewegungen werden eher absorbiert als ausgeweitet. Die Identifizierung der Kompression bietet ein kontextbezogenes Verständnis für eingeschränkte Bewegungen unter Verwendung von Daten mit geschlossenen Kerzen, ohne dass die zukünftige Richtung angegeben wird. Die Kompression kann über längere Zeiträume hinweg anhalten, insbesondere wenn die Marktbeteiligung ausgewogen ist oder externe Faktoren fehlen. Auf niedrigeren Zeitebenen zeigt sich dies oft in Form sich überlappender Kerzen mit häufigen Dochten und minimaler Nettoverschiebung, während auf höheren Zeitebenen eine kompakte Konsolidierungsstruktur entstehen kann. Wichtig ist, dass Kompression nicht mit Schwäche oder Unentschlossenheit gleichzusetzen ist, sondern ein vorübergehendes Gleichgewicht widerspiegelt, bei dem die Preisbewegung absorbiert und nicht ausgeweitet wird. Das Erkennen dieses Zustands hilft dabei, die Erwartungen in Bezug auf eine geringere Bewegungseffizienz zu formulieren, sodass das spätere Preisverhalten im richtigen Kontext interpretiert werden kann.
Transitionszustand (flüssig)
Eine Transitionsphase spiegelt eine Lockerung der strukturellen Beschränkungen wider. Die Kerzenbereiche werden uneinheitlicher, die Volatilität schwankt, und die Kurse können die jüngsten Extremwerte überschreiten, ohne dass es zu einem nachhaltigen Durchbruch kommt. Strukturelle Signale erscheinen oft uneinheitlich, und die Eindämmung wird schwächer, ohne vollständig zusammenzubrechen.

Dieser Zustand erklärt, warum das Preisverhalten uneinheitlich oder fließend erscheinen kann, ohne dass dies auf Zufälligkeit schließen lässt. Die Transition stellt einen Zwischenzustand dar, in dem weder Zwang noch freie Bewegung vorherrschen.
Expansionszustand (Gas)
Ein Expansionszustand ist durch eine hohe Volatilität und eine große Bandbreite an Kerzen gekennzeichnet. Die strukturelle Eindämmung lässt nach, und die Preise bewegen sich frei mit großen, unregelmäßigen Swings. Eine Richtungskohärenz ist nicht erforderlich; die Expansion beschreibt eher das Ausmaß der Bewegung als ihre Kohärenz.

Expansion bedeutet nicht, dass es eine Fortsetzung, einen Trend oder eine Dauer gibt. Er beschreibt einen Zustand erhöhter innerer Energie, der sich in einer breiten Kursbewegung ausdrückt, die streng nach geschlossenen Kerzen bewertet wird.
Trend als strukturelle Bedingung
Expansion bedeutet nicht, dass es eine Fortsetzung, einen Trend oder eine Dauer gibt. Er beschreibt einen Zustand erhöhter innerer Energie, der sich in einer breiten Kursbewegung ausdrückt, die streng nach geschlossenen Kerzen bewertet wird.

Ein Trendzustand liegt vor, wenn der Preis eine Folge von höheren Hochs und höheren Tiefs, oder tieferen Hochs und tieferen Tiefs bildet, begleitet von einem konsistenten Richtungsbias in den Schlusskursen der Kerzen.
Ein Markt kann eine Expansion ohne einen stabilen Trend aufweisen oder einen Trend bei mäßiger Volatilität beibehalten. Aus diesem Grund wird der Trend unabhängig von der volatilitätsbasierten Analogie bewertet. Sie ergänzt den Klassifizierungsrahmen, indem sie einen Richtungskontext hinzufügt, ohne prädiktive Annahmen einzuführen.
Warum das Bewusstsein für den Marktzustand wichtig ist
Das Verständnis der Marktzustände ermöglicht eine kontextbezogene Interpretation der Price Action. Ein und dasselbe Strukturmerkmal kann unterschiedliche Bedeutungen haben, je nachdem, ob der Markt komprimiert ist, sich in einer Transitionsphase befindet, expandiert oder einen Trend aufweist. Durch die Klassifizierung des vorherrschenden Zustands anhand von Daten über geschlossene Kerzen wird die Analyse kohärenter und in sich konsistent. Dieser Rahmen legt den Schwerpunkt auf die Beobachtung und Klassifizierung und nicht auf die Ausführung, wodurch eine neutrale Grundlage für eine fundierte Interpretation geschaffen wird.
MQL5-Implementierung
Nachdem der konzeptionelle Rahmen festgelegt wurde, besteht der nächste Schritt darin, die Klassifizierung des Marktzustands in eine konkrete und zuverlässige MQL5-Implementierung zu übertragen. Dieses Modul ist als Expert Advisor ohne Handelsfunktion konzipiert, dessen einziger Zweck es ist, das Preisverhalten auf Basis geschlossener Kerzen zu beobachten, den vorherrschenden Marktzustand zu klassifizieren und diesen Kontext visuell auf dem Chart darzustellen. Es werden keine Aufträge erteilt, keine Signale gegeben und keine vorausschauenden Annahmen getroffen. Der EA fungiert lediglich als analytische Ebene.
Aus architektonischer Sicht ist die Implementierung so organisiert, dass sie systematisch, lesbar und leicht erweiterbar bleibt. Anstatt die gesamte Logik in einer einzigen Ausführungsschleife zusammenzufassen, werden die Verantwortlichkeiten klar getrennt. In der Praxis arbeitet der EA mit vier Kernaufgaben:
- Auswertung geschlossener Kerzen
- Extraktion der Swing-Struktur
- Klassifizierung des Marktzustands
- Chartbasierte Visualisierung
Diese architektonische Trennung ist beabsichtigt. Durch die Isolierung von Merkmalsextraktion, Klassifizierungslogik und Visualisierung bleibt die Implementierung einfach zu überprüfen, zu debuggen und zu erweitern. Änderungen an der visuellen Darstellung wirken sich nicht auf die Analyseergebnisse aus, und die Klassifizierungsregeln können ohne Änderung des Ausführungsablaufs verfeinert werden. Die Struktur spiegelt das professionelle Design von Analysesystemen wider, bei dem Klarheit und Reproduzierbarkeit Vorrang vor Kompaktheit oder Optimierungstricks haben. Durch die Trennung wird sichergestellt, dass analytische Entscheidungen unabhängig von der Darstellung getroffen werden, sodass der Klassifikator eigenständig bewertet werden kann.
Auswertung geschlossener Kerzen
Zunächst werden alle Berechnungen im EA durch eine strenge Prüfung auf geschlossene Kerzen eingeschränkt. Bei jedem Tick prüft der EA den Zeitstempel von Balkenindex 1, der die letzte abgeschlossene Kerze darstellt. Wenn sich dieser Zeitstempel seit dem letzten Tick nicht geändert hat, wird die Ausführung sofort beendet.
Erst wenn eine neue Kerze vollständig geschlossen ist, fährt der EA fort, Bereiche neu zu berechnen, die Struktur zu bewerten, den Marktzustand zu klassifizieren und die Chartobjekte zu aktualisieren. Dieser Ansatz garantiert, dass kein Repainting auftritt. Dies stellt zudem sicher, dass sich historische Auswertung und Live-Betrieb identisch verhalten, da beide ausschließlich auf abgeschlossenen Daten beruhen. Vom Standpunkt der Leistung aus betrachtet, hält dieses Design die CPU-Auslastung stabil, da der Klassifikator einmal pro Balken und nicht kontinuierlich bei jedem Tick ausgeführt wird.
void OnTick() { // 1. Closed-candle gating (non-repainting core) datetime closed=iTime(_Symbol,_Period,1); if(closed==0 || closed==g_lastClosedBar) return; g_lastClosedBar=closed; // 2. Feature extraction + classification double avgR,lastR,lastCLV,meanCLV,swingScore,recentAvg,prevAvg; ENUM_MARKET_STATE newState = ClassifyState(avgR,lastR,lastCLV,meanCLV, swingScore,recentAvg,prevAvg); // 3. State transition handling DrawStateHistory(g_state,newState); g_prevState=g_state; g_state=newState; // 4. Visualization layer DrawSwingDots(); DrawActiveLabels(); DrawCompressionBox(); DrawInfoLines(); }
Diese Struktur stellt sicher, dass die Merkmalsextraktion, die Zustandsklassifizierung und die Darstellung des Charts genau einmal pro geschlossener Kerze ausgeführt werden, sodass ein deterministisches und nicht wiederholendes Verhalten gewährleistet ist.
Eingabeparameter und konfigurierbares Verhalten
Nach der Definition des Ausführungsmodells stellt der EA eine Reihe von Eingaben bereit, die die Empfindlichkeit, die Schwellenwerte und die visuelle Ausgabe steuern. Diese Eingaben werden konzeptionell gruppiert, sodass Verhaltenslogik und Darstellungspräferenzen getrennt bleiben.
input int InpLookbackBars = 60; input int InpTrendBars = 20; input int InpCompressionBars = 16; input int InpSwingLeftRight = 3; input double InpRangeShrinkRatio = 0.70; input double InpExpansionMult = 1.80; input double InpCLVStrong = 0.60;
Lookback- und Empfindlichkeitseingänge
Diese Parameter steuern, wie viel historische Daten zu den Messungen des Klassifikators beitragen:
- InpLookbackBars definiert das Basislinienfenster, das für die Berechnung des durchschnittlichen Kerzenbereichs verwendet wird.
- InpTrendBars gibt an, wie viele geschlossene Kerzen zu dem bei der Trenderkennung verwendeten mittleren CLV-Richtungsbias beitragen.
- InpCompressionBars bestimmt die Länge des Fensters, das für den Vergleich der jüngsten Verkleinerung des Bereichs verwendet wird.
- InpSwingLeftRight steuert die Strenge der Erkennung von hohen und tiefen Swings.
Schwellenwerteingaben
Schwellenwerte bestimmen, wie aggressiv der Klassifikator zwischen den Zuständen unterscheidet:
- InpRangeShrinkRatio legt fest, wie stark der durchschnittliche aktuelle Bereich im Vergleich zum vorherigen Fenster schrumpfen muss, um als Kompression zu gelten.
- InpExpansionMult gibt an, um wie viel größer der Bereich der letzten Kerze im Vergleich zum Basisdurchschnitt sein muss, um als Expansion zu gelten.
- InpCLVStrong filtert die Expansion so, dass nur breite Kerzen mit entscheidenden Schlusskursen berücksichtigt werden.
- InpTrendBiasCLV und InpTrendMinSwingScore definieren die für einen Trendzustand erforderliche minimale direktionale Abschlussverzerrung und strukturelle Konsistenz.
Visualisierungsumschalter
Jedes visuelle Element – Swing-Punkte, Beschriftungen der aktiven Struktur, Kompressionsfeld, Zustandsverlaufsblöcke und das gestapelte Informationsfeld – kann unabhängig voneinander aktiviert oder deaktiviert werden. Auf diese Weise bleibt die analytische Engine konstant, während die visuelle Darstellung an verschiedene Chartlayouts angepasst wird.
Vom Klassifikator verwendete preisbasierte Merkmale
Das Herzstück des Klassifizierers ist ein kleiner Satz von Preismerkmalen, die ausschließlich aus geschlossenen Kerzen berechnet werden. Diese Maßnahmen sind bewusst einfach und transparent gehalten, damit die Logik leicht zu überprüfen und zu verstehen ist.
Kerzenspanne
Die Kerzenspanne wird als Differenz zwischen dem Hoch und dem Tief jeder geschlossenen Kerze berechnet. Zwei damit zusammenhängende Messungen der Spannen werden beibehalten:
- Ein durchschnittlicher Basislinienbereich, der über InpLookbackBars berechnet wird
- Ein Kompressionsvergleich, der den durchschnittlichen aktuellen Bereich mit dem unmittelbar vorangegangenen Fenster gleicher Länge vergleicht
double CandleRange(int shift) { return iHigh(_Symbol, _Period, shift) - iLow (_Symbol, _Period, shift); } 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); }
Dieser duale Ansatz ermöglicht es dem EA, sowohl eine relative Kontraktion als auch eine anormale Expansion zu erkennen, ohne sich auf Festpunkt- oder Pip-Schwellenwerte zu verlassen.
Ort des Schlusskurses
Der Ort des Schlusskurses (Closing Location Value, CLV) misst, wo die Kerze innerhalb ihres Bereichs schließt, und wird wie folgt berechnet:
CLV = (2 × Schluss – Hoch – Tief) / (Hoch – Tief)
double CandleCLV(int shift) { double h = iHigh (_Symbol, _Period, shift); double l = iLow (_Symbol, _Period, shift); double c = iClose(_Symbol, _Period, shift); if(h <= l) return 0.0; return (2.0 * c - h - l) / (h - l); }
Im Rahmen dieser Umsetzung erfüllt der CLV zwei beschreibende Funktionen. Erstens fungiert der absolute CLV der zuletzt geschlossenen Kerze als Stärkefilter für die Expansion, um sicherzustellen, dass breite Kerzen, die in der Nähe des Mittelpunkts schließen, nicht falsch klassifiziert werden. Zweitens bietet der mittlere CLV über ein kurzes Fenster ein Maß für die Richtungsabhängigkeit, das bei der Bewertung der Trendstruktur verwendet wird. CLV wird streng als struktureller Deskriptor behandelt.
Swing-Struktur und strukturelle Wertung
Hohe und tiefe Swings werden durch einen symmetrischen Links/Rechts-Vergleich ermittelt, der durch InpSwingLeftRight gesteuert wird. Der EA lokalisiert die beiden letzten Swing-Hochs und die beiden letzten Swing-Tiefs innerhalb eines begrenzten Scan-Fensters.
bool IsSwingHigh(int shift, int lr) { double mid = iHigh(_Symbol, _Period, shift); for(int i = 1; i <= lr; i++) if(mid <= iHigh(_Symbol, _Period, shift + i) || mid <= iHigh(_Symbol, _Period, shift - i)) return false; return true; } bool IsSwingLow(int shift, int lr) { double mid = iLow(_Symbol, _Period, shift); for(int i = 1; i <= lr; i++) if(mid >= iLow(_Symbol, _Period, shift + i) || mid >= iLow(_Symbol, _Period, shift - i)) return false; return true; }
Aus diesen vier Punkten wird ein kompakter Swing-Score abgeleitet, indem der jüngste Swing mit seinem Vorgänger für Hochs und Tiefs verglichen wird. Der Score erhöht sich, wenn die Struktur nach oben geht, und verringert sich, wenn die Struktur nach unten geht. Dieser Score wird nicht zur Schätzung der Größenordnung oder der Dynamik verwendet; sie dient lediglich der Feststellung, ob eine Struktur konsistent ausgerichtet ist.
int Sign(double v) { if(v > 0) return 1; if(v < 0) return -1; return 0; } double ComputeSwingScore(int prevHigh, int lastHigh, int prevLow, int lastLow) { double score = 0; score += Sign(iHigh(_Symbol, _Period, lastHigh) - iHigh(_Symbol, _Period, prevHigh)); score += Sign(iLow (_Symbol, _Period, lastLow) - iLow (_Symbol, _Period, prevLow)); return score; }
Zustandsmodell und Klassifikationshierarchie
Sobald die zugrunde liegenden Merkmale berechnet sind, bewertet der EA den Marktzustand anhand einer Aufzählung mit vier möglichen Werten:
- Trend
- Kompression
- Expansion
- Transition
Die Klassifizierungslogik ist absichtlich hierarchisch aufgebaut, um mehrdeutige Überschneidungen zu vermeiden. Die Bewertung erfolgt in der folgenden Reihenfolge:
- Expansion
- Kompression
- Trend
- Transition
ENUM_MARKET_STATE ClassifyState(double avgRange, double lastRange, double lastCLV, double recentAvg, double prevAvg, double meanCLV, double swingScore) { // Expansion: abnormal range with decisive close if(lastRange >= avgRange * InpExpansionMult && MathAbs(lastCLV) >= InpCLVStrong) return STATE_EXPANSION; // Compression: relative contraction in recent volatility if(prevAvg > 0 && recentAvg <= prevAvg * InpRangeShrinkRatio) return STATE_COMPRESSION; // Trend: agreement between structure and directional close bias if(MathAbs(meanCLV) >= InpTrendBiasCLV && MathAbs(swingScore) >= InpTrendMinSwingScore) return STATE_TREND; // Transition: mixed or intermediate behavior return STATE_TRANSITION; }
Diese Anordnung spiegelt die praktische Relevanz der Bewegungsdynamik wider. Eine plötzliche Expansion sollte sofort erkannt werden, während der Trend erst dann bewertet wird, wenn weder Kontraktion noch Expansion vorherrschen.
Expansionskriterium
Eine Expansion wird erkannt, wenn die letzte geschlossene Kerze sowohl eine anormale Spanne als auch ein entscheidendes Schlussverhalten aufweist:
- Die Reichweite der letzten Kerze übersteigt die durchschnittliche Reichweite der Basislinie um InpExpansionMult
- Der absolute CLV dieser Kerze entspricht oder übersteigt InpCLVStrong
Diese Kombination gewährleistet, dass die Expansion eine echte Freisetzung von Bewegungsenergie darstellt und nicht eine breite, aber neutrale Kerze.
Kompressionszustand
Eine Kompression liegt vor, wenn die jüngste Volatilität im Vergleich zum unmittelbar vorangegangenen Fenster abnimmt:
Da dieser Vergleich relativ ist, passt er sich auf natürliche Weise über Symbole und Zeitrahmen hinweg an, indem er den Markt an seinem eigenen jüngsten Verhalten misst.
Trendzustand
Der Trend wird unabhängig von den Volatilitätszuständen bewertet und erfordert eine Übereinstimmung zwischen Struktur und Schlusskursverhalten:
- Mittlere CLV-Größe entspricht oder übersteigt InpTrendBiasCLV
- Die strukturelle Größe des Swing-Score entspricht oder überschreitet InpTrendMinSwingScore
Dadurch wird verhindert, dass Trends allein aus der Bewegung abgeleitet werden, und es wird sichergestellt, dass die zugrunde liegende Struktur eine Richtungskonsistenz aufweist.
Transitionsbedingung
Wenn keine der oben genannten Bedingungen zutrifft, gibt der Klassifikator „Transition“ zurück. Die Transition stellt ein gemischtes oder intermediäres Verhalten dar und wird als gültiger beschreibender Zustand und nicht als Fehler oder Unsicherheitszustand behandelt.
Chart-Visualisierungsebene

Wenn die Klassifizierung abgeschlossen ist, stellt der EA den Kontext auf dem Chart durch eine Reihe optionaler visueller Elemente dar. Diese Visualisierungen werden nacheinander innerhalb des OnTick()-Handlers aufgerufen, nachdem eine neue Kerze vollständig geschlossen wurde. Bei diesem Ansatz bleibt der Ausführungsfluss explizit, und es werden keine zusätzlichen Abstraktionsebenen eingeführt, die für die Analyse nicht erforderlich sind.
Jede visuelle Routine wird durch ihr entsprechendes Eingangsflag gesteuert, sodass einzelne Komponenten aktiviert oder deaktiviert werden können, ohne die zugrunde liegende Klassifizierungslogik zu beeinflussen.
- Die Swing-Punkte markieren die ermittelten Höchst- und Tiefststände der Swings.
- Aktive Strukturkennzeichnungen zeigen HH/HL- oder LH/LL-Beziehungen für aktuelle Swings an.
- Kompressionskästchen visualisieren den abgedeckten Preisbereich des aktuellen Kompressionsfensters.
- Die Blöcke der Zustandsgeschichte bieten eine schwache Hintergrundzeitlinie der Zustandsänderungen.
- Die gestapelte Infotafel fasst Zustands-, Struktur- und Volatilitätsmetriken in einem vertikalen, übersichtlichen Format zusammen.
// Chart visualization executed after state update
DrawSwingDots();
DrawActiveLabels();
DrawCompressionBox();
DrawInfoLines(); Alle visuellen Komponenten werden über Eingabeparameter gesteuert und können unabhängig voneinander deaktiviert werden.
Lebenszyklusverhalten und Bereinigung
Bei der Initialisierung entfernt der EA alle zuvor erstellten Objekte mithilfe einer präfixbasierten Aufräumroutine. Die gleiche Bereinigung wird bei der Deinitialisierung durchgeführt, um zu verhindern, dass verwaiste Beschriftungen oder Rechtecke nach der Neukompilierung oder Entfernung weiter bestehen.
void DeleteByPrefix(string prefix) { for(int i = ObjectsTotal(0) - 1; i >= 0; i--) { string name = ObjectName(0, i); if(StringFind(name, prefix) == 0) ObjectDelete(0, name); } }
Implementierungshinweise zur Stabilität
Und schließlich wird die Stabilität und Reproduzierbarkeit durch verschiedene Implementierungsmöglichkeiten verbessert:
- Alle Berechnungen basieren auf Standard-Preisreihenfunktionen.
- Die gesamte Logik funktioniert ausschließlich bei vollständig geschlossenen Kerzen.
- Es werden keine Aufträge, Warnungen oder Handelsanweisungen generiert.
- Der EA fungiert als beschreibende, analytische Ebene innerhalb eines breiteren Preisaktions-Toolkits.
Tests
Die Tests konzentrierten sich auf die Konsistenz des Verhaltens und nicht auf Leistungskennzahlen. Der EA wurde im Strategy Tester evaluiert, um das Verhalten des Algorithmus anhand historischer Daten zu bestätigen, und dann auf Live-Charts beobachtet, um die visuelle Stabilität während der Kerzenbildung in Echtzeit zu überprüfen. Besonderes Augenmerk wurde darauf gelegt, dass Zustandsbeschriftungen, Hintergrundbereiche und Informationstexte erst nach dem Schließen der Kerze aktualisiert werden, um ein identisches Verhalten zwischen historischen und realen Bedingungen zu gewährleisten. Der Market State Classifier wurde sowohl mit dem Strategietester des MetaTrader im visuellen Modus als auch durch Live-Chart-Beobachtung evaluiert. Die Tests konzentrierten sich auf die Korrektheit des Verhaltens, die Garantie, dass es zu keinem Neuzeichnen/Repainting kommt, und die visuelle Konsistenz. Ziel war es, zu bestätigen, dass der EA sich systematisch verhält und stabile kontextuelle Informationen in historischen und realen Umgebungen präsentiert.
Strategietester im visuellen Modus
Im visuellen Modus des Strategietesters wurde der EA Kerze für Kerze anhand historischer Daten nachgestellt. Marktstatusbeschriftungen, Strukturmarkierungen, Kompressionsboxen und Volatilitätsmetriken werden erst nach dem vollständigen Schließen jeder Kerze aktualisiert, wodurch bestätigt wird, dass die gesamte Logik auf abgeschlossenen Bars basiert.
Die Zustandsübergänge traten bei wiederholten Testläufen zu einheitlichen Zeitpunkten auf. Kompressionszonen entsprachen Perioden geringerer Volatilität, Expansionszustände traten nur dann auf, wenn anormale Bandbreiten und entscheidende Schlusskurse vorhanden waren, und Transitionszustände füllten Zwischenzustände ohne rückwirkende Änderungen. Swing-Punkte und Strukturkennzeichnungen (HH, HL, LH, LL) wurden nur dann angebracht, wenn eine ausreichende Bestätigung vorlag, und wenn sie einmal gezeichnet waren, blieben sie fest.

Visualisierung im Strategietester, XAUUSD H1
Dieses Verhalten bestätigt, dass beide Modi demselben Auswertungspfad folgen, was von großer methodischer Bedeutung ist.
Live-Chart-Verhalten
Wenn der EA mit Live-Charts verbunden war, zeigte er das gleiche Verhalten. Das gestapelte Informationspanel wird einmal pro Kerzenschluss aktualisiert und spiegelt den aktuellen Marktzustand, die strukturelle Tendenz und die Volatilitätsmetriken ohne Flimmern oder Revision wider. Kompressionsboxen wurden in Echtzeit erweitert und verkleinert, je nachdem, wie sich die Volatilitätsbedingungen entwickelten, während die Blöcke der Zustandsgeschichte eine subtile Hintergrundaufzeichnung früherer Klassifizierungen lieferten.

Live-Chart-EURUSD M5
Die Kennzeichnung der Swing-Strukturen wurde nur dann angepasst, wenn sich neue bestätigte Swings bildeten, und die bereits beschrifteten Strukturen wurden nicht rückwirkend geändert. Über verschiedene Symbole und Zeiträume hinweg konnte der Klassifikator eine klare Trennung zwischen dem Zustand der Volatilität, dem strukturellen Zustand und der visuellen Darstellung vornehmen.
Ergebnis der Validierung
In beiden Testumgebungen wurden die folgenden Merkmale durchgängig beobachtet:
- Die Klassifizierung des Marktzustands ist regelbasiert und wird nachträglich nicht geändert.
- Visuelle Elemente bleiben nach dem Rendern stabil.
- Historisches und Live-Verhalten sind identisch.
- Keine Ausführungslogik.
Diese Ergebnisse bestätigen, dass der Marktzustands-Klassifikator wie vorgesehen funktioniert. Dadurch eignet sich der Klassifikator für die Integration in einen umfassenderen Price-Action-Analyse-Workflow, bei dem vor der Anwendung diskretionärer oder systematischer Strategien ein Zustandsbewusstsein erforderlich ist.
Schlussfolgerung
In diesem Artikel werden das Design und die MQL5-Implementierung eines Moduls zur Klassifizierung von Marktzuständen vorgestellt, das als Teil des Price-Action-Analysis-Toolkit entwickelt wurde. Ziel war es, einen Rahmen zu schaffen, der beschreibt, wie sich der Preis zu einem bestimmten Zeitpunkt verhält. Durch die Kombination von relativer Volatilitätsanalyse, struktureller Swing-Bewertung und einem hierarchischen Klassifikationsmodell unterscheidet der EA zwischen Kompressions-, Transitions-, Expansions- und Trendzuständen, ohne sich auf Indikatoren, Optimierung oder Ausführungslogik zu stützen.
Das daraus resultierende Werkzeug fungiert als kontextuelle Ebene, die klärt, ob der Preis eingeschränkt, flüssig ist oder sich frei bewegt und ob eine Richtungsstruktur vorhanden ist. Diese Trennung von Zustand und Richtung stärkt die disziplinierte Analyse und hilft, Fehlinterpretationen der Kursentwicklung zu vermeiden, wenn die Bedingungen nicht übereinstimmen. Wie die anderen Komponenten des Toolkits ist auch dieses Modul absichtlich beschreibend gehalten. Sein Wert liegt in der Verbesserung des Situationsbewusstseins und der Bereitstellung einer stabilen analytischen Grundlage, auf der diskretionäre oder systematische Entscheidungen separat getroffen werden können.
Übersetzt aus dem Englischen von MetaQuotes Ltd.
Originalartikel: https://www.mql5.com/en/articles/20996
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.
Einführung in MQL5 (Teil 37): Beherrschung von API und WebRequest in MQL5 (XI)
MQL5-Handelswerkzeuge (Teil 15): Unschärfeeffekte im Canvas, Schatten-Rendering und flüssiges Scrollen mit dem Mausrad
Eine alternative Log-datei mit der Verwendung der HTML und CSS
Graphentheorie: Einsatz von Breadth-First Search (BFS) im Trading
- 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.