English Русский
preview
Entwicklung eines Toolkits zur Price-Action-Analyse (Teil 60):  Objektive Swing-basierte Trendlinien für die Strukturanalyse

Entwicklung eines Toolkits zur Price-Action-Analyse (Teil 60): Objektive Swing-basierte Trendlinien für die Strukturanalyse

MetaTrader 5Beispiele |
26 0
Christian Benjamin
Christian Benjamin

Inhalt


Einführung

In Teil 19 dieser Reihe habe ich ein Analysewerkzeug vorgestellt, das auf dem ZigZag-Indikator basiert, um Swing-Punkte zu identifizieren und auf dieser Grundlage Trendlinien zu zeichnen, mit denen sich die entstehende Kursstruktur interpretieren lässt. Diese Arbeit legte einen wichtigen Grundstein: Sie zeigte, dass Trendlinien nicht nur visuelle Hilfsmittel sind, sondern entscheidende strukturelle Anhaltspunkte, die helfen, ein mögliches künftiges Kursverhalten besser einzuordnen. Aufbauend auf diesem Konzept beleuchtet dieser Artikel denselben Kerngedanken aus einer durchdachteren und differenzierteren Perspektive. Anstatt sich bei der Definition von Swings auf einen Indikator zu stützen, leitet das aktuelle Tool die Swing-Punkte direkt aus der reinen Price Action ab. Da ausschließlich das beobachtete Kursverhalten herangezogen wird, wird die Analyse transparenter und besser kontrollierbar, wodurch die Instabilität verringert wird, die häufig mit indikatorbasierten Pivots einhergeht.

Das Hauptziel besteht weiterhin darin, die Analyse der Kursstruktur zu verbessern und zu vereinfachen. Trendlinien spielen in diesem Prozess eine entscheidende Rolle, da sie potenzielle zukünftige Unterstützungs- und Widerstandsniveaus dynamisch identifizieren – insbesondere dann, wenn sich der Markt an geneigten Strukturen orientiert. Während horizontale Linien weithin anerkannt und leicht zu definieren sind, liefern schräge Trendlinien oft ebenso wichtige Erkenntnisse, lassen sich jedoch nur schwer konsistent zeichnen, was dazu führt, dass sie in vielen Handelssystemen zu selten genutzt werden. Dieses Tool soll diese Lücke schließen. Durch die objektive Erkennung signifikanter Swing-Punkte und die Ableitung klarer, regelbasierter Trendlinien daraus wird es einfacher, mit geneigten Strukturen auf konsistente und wiederholbare Weise zu arbeiten. Der Schwerpunkt liegt nicht auf Prognosen oder der Erzeugung von Signalen, sondern auf der Wahrung der strukturellen Integrität des Marktes und der Beobachtung der Price Action innerhalb eines klar definierten, visuellen Rahmens.

In den folgenden Abschnitten werden wir die Kernprinzipien dieses Ansatzes näher beleuchten und anschließend die detaillierte Umsetzung in MQL5 im Detail erläutern. Anschließend werden wir die Ergebnisse und das Verhalten des Tools auf dem Chart betrachten, bevor wir mit den wichtigsten Erkenntnissen abschließen und erläutern, wie diese Methodik umfassendere Strategien der technischen Analyse ergänzt.


Das zugrunde liegende Konzept

Die Grundidee hinter diesem Tool beruht auf einer einfachen, aber wirkungsvollen Beobachtung: Der Kurs offenbart seine Absichten oft durch die Struktur, lange bevor eine konkrete Bewegung einsetzt. Wenn der Markt wiederholt entlang einer schrägen Struktur reagiert, ist dieses Verhalten kein Zufall. Dies spiegelt den zugrunde liegenden Trenddruck, eine aktive Beteiligung sowie eine sich verändernde Machtverteilung zwischen Käufern und Verkäufern wider. Trendlinien bieten eine praktische Möglichkeit, dieses Verhalten zu erfassen und zu interpretieren, und liefern einen strukturellen Rahmen, der die Interpretation der Marktstruktur erleichtert. Der entscheidende Vorteil liegt in einem Perspektivwechsel – weg von isolierten Kerzen hin zu einer Betrachtung des Kurses im Kontext der sich entwickelnden Struktur, an die er sich im Laufe der Zeit stets hält.

Trendlinien als strukturelle Bezugspunkte

In diesem Zusammenhang werden Trendlinien ausschließlich als strukturelle Bezugspunkte und nicht als Prognoseinstrumente betrachtet. Eine aussagekräftige Trendlinie zeichnet sich nicht dadurch aus, wie leicht sie sich zeichnen lässt, sondern dadurch, wie konsequent der Kurs mit ihr interagiert. Wenn der Kurs wiederholt eine schräg verlaufende Grenze respektiert, wird diese Grenze zu einer aktiven und dynamischen Form der Unterstützung oder des Widerstands, die sich im Laufe der Zeit auf natürliche Weise anpasst. Dieser Ansatz ist besonders relevant in Trend- oder Kompressionsphasen des Marktes, in denen sich die Struktur häufig eher diagonal als horizontal darstellt.

Das folgende Diagramm veranschaulicht, wie Trendlinien aus geordneten Swing-Hochs und -tiefs abgeleitet werden. Aufsteigende Swing-Tiefs definieren die Unterstützung, während absteigende Swing-Hochs den Widerstand definieren, sodass die Struktur als Orientierung für die Bildung von Trendlinien dient.

Auch wenn horizontale Ebenen nach wie vor wertvoll sind, geben sie nicht immer das vollständige Bild wieder. Viele Marktphasen verlaufen entlang geneigter Strukturen, doch solche Trendlinien lassen sich oft nur schwer objektiv ziehen und werden häufig subjektiv angewendet. Dieses Tool soll die Arbeit mit geneigten Trendlinien objektiver, konsistenter und reproduzierbarer gestalten, sodass diese zuverlässiger in den Analyseprozess integriert werden können.

Logischer Ablauf des Tools

Im Großen und Ganzen folgt das Tool einem disziplinierten und strukturierten Prozess:

  • Erkennen signifikanter Swings

Der Prozess beginnt damit, dass signifikante Swing-Punkte direkt aus den Rohkursdaten ermittelt werden, ohne auf durch Indikatoren definierte Pivot-Punkte zurückzugreifen. Diese Swings stellen Punkte lokaler Dominanz dar, an denen der Kurs vorübergehend an Schwung verliert oder an Fahrt gewinnt.

  • Filtern und Überprüfen von Swings

Um Marktrauschen zu reduzieren, wird jeder erkannte Swing anhand von Größen- und Signifikanzkriterien bewertet. Dadurch wird sichergestellt, dass nur echte Veränderungen im Marktverhalten berücksichtigt werden, während geringfügige Schwankungen unberücksichtigt bleiben.

  • Strukturelle Beziehungen aufbauen

Die validierten Kurs-Swings werden anschließend ausgewertet, um festzustellen, ob sie kohärente Unterstützungs- oder Widerstandsstrukturen bilden können. Hochs und Tiefs werden unabhängig voneinander behandelt: Absteigende Swing-Hochs werden im Hinblick auf potenzielle Widerstandstrendlinien ausgewertet, während aufsteigende Swing-Tiefs im Hinblick auf potenzielle Unterstützungstrendlinien ausgewertet werden.

  • Trendlinien zeichnen und verlängern

Wird eine gültige strukturelle Beziehung erkannt, wird die Trendlinie anhand der ausgewählten Kurs-Swings konstruiert, wobei die vom Markt vorgegebene exakte Steigung beibehalten wird. Die Linie wird dann mithilfe eines Strahls nach rechts verlängert, wobei die strukturelle Kontinuität gewahrt bleibt, ohne dass eine Glättung, Mittelung oder Regression erfolgt. Das Ziel besteht nicht darin, zukünftige Kursbewegungen vorherzusagen, sondern die Struktur zu bewahren und zu beobachten, wie sich der Kurs weiterhin mit ihr verhält.

  • Selektive und fokussierte Anzeige

Es werden jeweils nur die aussagekräftigsten Trendlinien auf jeder Seite beibehalten. Durch diese bewusste Einschränkung bleibt das Chart übersichtlich und konzentriert sich auf die dominierenden strukturellen Ebenen, anstatt es mit überflüssigen geometrischen Elementen zu überladen.

Swings anhand der reinen Price Action ermitteln

Die Grundlage dieses Ansatzes liegt in der direkten Ableitung von Swing-Punkten aus der reinen Price Action, wodurch die Abhängigkeit von Hilfsindikatoren vermieden wird. Ein Swing-Hoch wird erkannt, wenn eine Kerze eine lokale Dominanz gegenüber den umgebenden Kerzen aufweist, was auf eine vorübergehende Erschöpfung des Kaufdrucks hindeutet. Umgekehrt markiert ein Swing-Tief einen Punkt, an dem der Verkaufsdruck nachlässt und sich der Kurs zu stabilisieren beginnt.

Die obige Abbildung zeigt ein Beispiel für eine Kursstruktur, die höhere Hochs und höhere Tiefs bildet und so einen aufsteigenden strukturellen Rahmen schafft, aus dem sich eine Unterstützungstrendlinie ableiten lässt.

Um die strukturelle Relevanz sicherzustellen, wird jede Swing zusätzlich anhand ihrer Stärke im Verhältnis zur Marktvolatilität bewertet. Es werden nur Swings berücksichtigt, die einen festgelegten Schwellenwert überschreiten. Diese Kombination aus lokaler Dominanz und Größenfilterung stellt sicher, dass die daraus resultierende Struktur ein aussagekräftiges Marktverhalten widerspiegelt und nicht nur kurzlebiges Rauschen.

Swings zu Trendlinien verbinden

Sobald die Swings validiert und chronologisch geordnet sind, wertet das Tool ihre strukturellen Beziehungen aus. Nicht jedes Swing-Paar eignet sich zur Erstellung einer Trendlinie. Es werden nur diejenigen berücksichtigt, die sich an klare Richtungsregeln halten – sinkende Hochs als Widerstand und steigende Tiefs als Unterstützung. Dadurch wird verhindert, dass eine künstliche oder irreführende Geometrie entsteht, die dem tatsächlichen Marktverhalten widerspricht.

Wird ein gültiges Paar identifiziert, wird die Trendlinie anhand der genauen Steigung konstruiert, die durch diese Swings definiert ist. Durch die Verlängerung der Linie als Strahl bleibt die strukturelle Integrität über die Zeit hinweg erhalten, sodass die Price Action anhand einer stabilen Referenz beobachtet werden kann. Zum jetzigen Zeitpunkt liegt der Schwerpunkt weiterhin rein auf der Analyse: Die Trendlinie wird beibehalten, um die Struktur zu beobachten, nicht um Ergebnisse vorherzusagen.

Nachdem diese konzeptionelle und logische Grundlage geschaffen wurde, wendet sich der nächste Abschnitt von der Theorie der Praxis zu und erläutert detailliert, wie diese Ideen in eine konkrete, regelbasierte MQL5-Implementierung umgesetzt werden. Das folgende Diagramm stellt gültige und ungültige Trendlinien gegenüber, die aus Kurs-Swings auf derselben Seite der Kursstruktur abgeleitet wurden. Gültige Trendlinien stimmen mit konsistenten Swing-Mustern überein, während ungültige Beispiele dadurch entstehen, dass gegensätzliche strukturelle Aspekte miteinander vermischt werden oder die Richtungskontinuität verletzt wird.



MQL5-Implementierung

In diesem Abschnitt wird ausführlich erläutert, wie das konzeptionelle Rahmenwerk für die Analyse struktureller Trendlinien in ein konkretes, regelbasiertes MQL5-Programm umgesetzt wird. Das vorrangige Ziel besteht darin, die Kernprinzipien – wie beispielsweise die objektive Swing-Erkennung, die strukturelle Validierung und das disziplinierte Zeichnen von Trendlinien – so getreu umzusetzen, dass das System sowohl bei historischen als auch bei Echtzeit-Marktdaten stabil, transparent und konsistent bleibt. Die Umsetzung ist in einzelne Phasen gegliedert, von denen jede direkt einem grundlegenden Bestandteil des konzeptionellen Modells entspricht. Diese Eins-zu-eins-Zuordnung erleichtert das Verständnis und macht es einfacher, den Code zu überprüfen, zu erweitern oder zu ändern. Durch die klare Entsprechung zwischen Konzepten und Code wird gewährleistet, dass das System konsistent und regelkonform arbeitet und Händlern ein zuverlässiges Werkzeug zur Strukturanalyse bietet.

Initialisierung und Einrichtung der Umgebung

Der erste Schritt bei der Umsetzung besteht darin, die Umgebung so einzurichten, dass eine robuste und genaue Analyse durchgeführt werden kann. In der Funktion OnInit() bereitet der Code die erforderlichen Indikatoren vor und löscht frühere Analyseergebnisse. Wenn die ATR-Filterung aktiviert ist (UseATRFiltering), erstellt das System über iATR() ein Indikator-Handle, das die aktuelle Marktvolatilität berechnet. Dadurch können sich nachfolgende Swing-Erkennungs- und Qualifizierungsprozesse dynamisch an veränderte Marktbedingungen anpassen, wodurch sichergestellt wird, dass die Schwellenwerte für signifikante Swings unabhängig vom Volatilitätsregime relevant sind.

Zudem ruft das System die Funktion DeleteObjectsByPrefix() auf, um alle vorhandenen Trendlinien oder Swing-Punkt-Objekte aus früheren Durchläufen zu entfernen. Dieser Schritt gewährleistet ein übersichtliches Diagramm, das frei von überflüssigen Elementen ist, die zu Unübersichtlichkeit oder Fehlinterpretationen führen könnten. Der Initialisierungsprozess schafft eine kontrollierte Umgebung und stellt sicher, dass jede Analysesitzung mit einem konsistenten, übersichtlichen visuellen und datentechnischen Zustand beginnt, was für die Gewinnung zuverlässiger und aussagekräftiger struktureller Erkenntnisse unerlässlich ist.

int OnInit()
{
    if(UseATRFiltering)
        atrHandle = iATR(_Symbol, _Period, 14);
        
    DeleteObjectsByPrefix(OBJECT_PREFIX);
    return(INIT_SUCCEEDED);
}

Echtzeit-Datenverarbeitung und Tick-Verarbeitung

Die zentrale Verarbeitungslogik wird innerhalb der Funktion OnTick() ausgeführt, die bei jedem neuen Markttick aufgerufen wird. Damit soll sichergestellt werden, dass die Analyse stets mit den aktuellen Marktdaten synchronisiert bleibt und die visuelle Darstellung die jüngsten Kursbewegungen widerspiegelt. Der Prozess beginnt mit der Überprüfung, ob sich eine neue Bar gebildet hat. Dazu wird mithilfe von iTime() der Zeitstempel der aktuellen Bar mit dem des zuletzt verarbeiteten verglichen. Wird eine neue Bar erkannt, aktualisiert der Code den ATR-Wert, indem er die neuesten Daten aus dem ATR-Indikator-Handle über CopyBuffer() kopiert. Dieser Schritt stellt sicher, dass die auf der Volatilität basierenden Schwellenwerte für die Einstufung als Swing aktuell und relevant sind.

Nach der Aktualisierung der Volatilitätsdaten löscht das System alle bisherigen Trendlinien- und Swing-Punkt-Objekte mithilfe von DeleteObjectsByPrefix(), um das Chart zu bereinigen. Dadurch wird verhindert, dass sich überlappende oder veraltete Objekte das Bild überladen. Abschließend wird die Funktion DrawMostSignificantTrendlines() aufgerufen, um die neuesten Daten zu analysieren, signifikante Swings zu erkennen, deren strukturelle Bedeutung zu bewerten und entsprechend neue Trendlinien zu zeichnen. Dieser Zyklus stellt sicher, dass der visuelle und analytische Rahmen stets aktuell und zuverlässig bleibt und das aktuelle Marktumfeld widerspiegelt.

void OnTick()
{
    static datetime lastBarTime = 0;
    datetime currentBarTime = iTime(_Symbol, _Period, 0);
    
    if(currentBarTime == lastBarTime && lastBarTime != 0)
        return; // No new bar, skip
    
    lastBarTime = currentBarTime;
    
    if(UseATRFiltering && atrHandle != INVALID_HANDLE)
    {
        double atrBuffer[1];
        if(CopyBuffer(atrHandle, 0, 0, 1, atrBuffer) > 0)
            currentATR = atrBuffer[0];
    }
    
    DeleteObjectsByPrefix(OBJECT_PREFIX);
    DrawMostSignificantTrendlines();
}

Swing-Erkennung: Extraktion struktureller Punkte aus den Rohkursdaten

Die Swing-Erkennung erfolgt durch die Identifizierung signifikanter Strukturpunkte direkt aus den Rohkursdaten und wird in der Funktion FindSignificantSwings() umgesetzt. Bei diesem Verfahren stehen Transparenz und Objektivität im Vordergrund, da nicht auf durch Indikatoren ermittelte Pivot-Punkte zurückgegriffen wird, sondern die Analyse ausschließlich auf der Kursreihe basiert. Der Algorithmus durchläuft die letzten Kerzen, beginnend bei einem von SwingLookback definierten Index, um Probleme mit den Grenzen zu vermeiden. Für jede Bar wird geprüft, ob sie als Swing-Hoch gilt, indem ihr Hoch mit der benachbarten Bar innerhalb des Rückblickfensters verglichen wird. Ein Swing-Hoch gilt als bestätigt, wenn das aktuelle Hoch alle Hochs der umgebenden Kerzen übersteigt, was auf einen vorübergehenden Höchststand hindeutet. Umgekehrt werden Swing-Tiefs erkannt, wenn das Tief einer Bar tiefer liegt als das der benachbarten Bars, was auf einen potenziellen Unterstützungspunkt hindeutet.

Um sicherzustellen, dass diese Swings aussagekräftige Marktreaktionen widerspiegeln, wird die Größe jedes Kandidaten als Differenz zwischen dem Swing-Punkt und dem jeweils höchsten benachbarten Tief bzw. dem niedrigsten benachbarten Hoch berechnet. Diese Größe wird anschließend mit Schwellenwerten verglichen – entweder mit einem festen Mindestwert (MinSwingSize) oder einem volatilitätsbereinigten Wert (currentATR * 0,8) –, um unbedeutende Swings herauszufiltern. Es werden nur Swings berücksichtigt, die diese Schwellenwerte überschreiten, wodurch sichergestellt wird, dass sich die Analyse auf echte strukturelle Veränderungen konzentriert und nicht auf geringfügige Swings.

void FindSignificantSwings(const MqlRates &rates[], int totalBars,
                           SwingPoint &highs[], int &highCount,
                           SwingPoint &lows[], int &lowCount)
{
    // Loop through bars starting from SwingLookback
    for(int i = SwingLookback; i < totalBars - SwingLookback; i++)
    {
        // Detect swing high
        bool isSwingHigh = true;
        double currentHigh = rates[i].high;
        for(int j = 1; j <= SwingLookback; j++)
        {
            if(rates[i - j].high >= currentHigh || rates[i + j].high >= currentHigh)
            {
                isSwingHigh = false;
                break;
            }
        }
        if(isSwingHigh)
        {
            // Calculate swing size and validate
            double leftLow  = MathMin(rates[i - 1].low, rates[i - 2].low);
            double rightLow = MathMin(rates[i + 1].low, rates[i + 2].low);
            double swingSize = currentHigh - MathMax(leftLow, rightLow);
            if(swingSize >= (UseATRFiltering ? currentATR * 0.8 : MinSwingSize))
            {
                // Store swing high
                // ...
            }
        }
        // Detect swing low (similar logic)
        // ...
    }
}

Festlegung einer chronologischen Reihenfolge der Swings zur Gewährleistung der strukturellen Konsistenz

Sobald die signifikanten Swings identifiziert und validiert sind, ist es unerlässlich, ihre chronologische Reihenfolge beizubehalten, um die logische Integrität der Analyse zu gewährleisten. Dies wird mithilfe der Funktion AssignSwingOrder() erreicht, die die Swing-Punkte anhand ihrer Zeitstempel vom ältesten zum neuesten sortiert. Diese Reihenfolge stellt sicher, dass bei der anschließenden Erstellung der Trendlinie der tatsächliche zeitliche Verlauf der Marktaktivität berücksichtigt wird. Die Einhaltung einer strengen chronologischen Reihenfolge verhindert logische Unstimmigkeiten, wie beispielsweise die Ableitung von Unterstützungs- oder Widerstandslinien aus Kurs-Swings, die sich zeitlich zu verschieben scheinen, was zu irreführenden Interpretationen führen könnte.

Zudem schützt diese Reihenfolge vor einem Repainting, bei dem sich historische Niveaus mit dem Eintreffen neuer Daten nachträglich zu verändern scheinen, indem die Reihenfolge der Swings in der Analyse festgehalten wird. Dieser Ansatz gewährleistet, dass die in dem Chart dargestellten strukturellen Zusammenhänge stabil und zuverlässig sind und die Entwicklung des Marktes getreu widerspiegeln. Es bietet Tradern eine konsistente und verlässliche Grundlage für die Interpretation der Price Action.

void AssignSwingOrder(SwingPoint swings[], int count)
{
    // Simple bubble sort by timestamp
    for(int i = 0; i < count - 1; i++)
    {
        for(int j = i + 1; j < count; j++)
        {
            if(swings[i].time > swings[j].time)
            {
                SwingPoint tmp = swings[i];
                swings[i] = swings[j];
                swings[j] = tmp;
            }
        }
    }
    // Assign order indices
    for(int i = 0; i < count; i++)
        swings[i].order = i + 1;
}

Erstellen und Überprüfen von Trendlinien für Unterstützungs- und Widerstandsniveaus

Der Prozess der Identifizierung und Validierung von Trendlinien umfasst die systematische Auswertung von Swing-Paaren, um deren Eignung als strukturelle Unterstützungs- oder Widerstandsniveaus zu ermitteln. Funktionen wie FindBestResistanceLine() und FindBestSupportLine() analysieren alle möglichen Paare, die die Richtungskriterien erfüllen – absteigende Paare für den Widerstand und aufsteigende Paare für die Unterstützung. Für jedes Paar berechnet der Algorithmus die Steigung anhand der vertikalen Kursdifferenz geteilt durch die horizontale Zeitdifferenz, wodurch sichergestellt wird, dass die Linie die Richtungsbewegung des Marktes genau widerspiegelt. Die Qualität jeder Kandidatenlinie wird anschließend bewertet, indem gezählt wird, wie viele Bars zwischen den Ankerpunkten innerhalb einer zulässigen Abweichung liegen, die häufig auf Werte wie 0,2 oder -0,3 festgelegt wird, um geringfügige Schwankungen zu berücksichtigen.

Die Linien werden anhand mehrerer Kriterien bewertet: der Anzahl der Berührungspunkte, der Aktualität der Ankerpunkte und der Frage, ob die Linie einen Mindestschwellenwert für Berührungspunkte (MinTouchPointsRequired) erreicht. Nur die Linien, die eine hohe Punktzahl erzielen, werden zur Visualisierung ausgewählt. Dieser strenge Validierungsprozess stellt sicher, dass nur die stabilsten und vom Kurs am deutlichsten bestätigten Unterstützungs- und Widerstandsniveaus berücksichtigt werden, wodurch ein klarer und aussagekräftiger struktureller Rahmen für die Analyse geschaffen wird.

void FindBestResistanceLine(const SwingPoint &highs[], int highCount, /*...*/)
{
    // Loop through pairs of swing highs
    for(int a = 0; a < highCount - 1; a++)
    {
        for(int b = a + 1; b < highCount; b++)
        {
            // Check directional and recency criteria
            // Calculate slope
            // Count touches and evaluate deviation
            // Score candidate line
            // Keep track of best score and pair
        }
    }
}

Trendlinien zeichnen und verlängern – für mehr Übersichtlichkeit

Sobald die besten Kandidatenpaare ermittelt wurden, stellt die Funktion DrawTrendline() diese Niveaus im Chart dar. Jede Trendlinie wird mithilfe von ObjectCreate() mit dem Objekttyp OBJ_TREND erstellt und an den jeweiligen Swing-Punkten verankert. Die Trendlinien werden mithilfe der Eigenschaft OBJPROP_RAY_RIGHT in die Zukunft verlängert, wobei die ursprüngliche Steigung beibehalten und die Unterstützungs- bzw. Widerstandsniveaus zeitlich nach vorn projiziert werden. Diese Erweiterung ermöglicht es Händlern, zu beobachten, wie diese Niveaus mit der zukünftigen Price Action interagieren könnten, und bietet dabei eine stabile visuelle Orientierungshilfe, die sich auf natürliche Weise an die laufenden Marktveränderungen anpasst.

Zur besseren Übersichtlichkeit werden Beschriftungen, die den Linientyp angeben (R für Widerstand, S für Unterstützung), sowie die Anzahl der Berührungen hinzugefügt. Visuelle Parameter wie Farbe, Breite und Linienstil lassen sich über die Eingabeeinstellungen anpassen, sodass Händler die visuelle Darstellung ganz nach ihren Vorlieben gestalten können. Dieser disziplinierte Ansatz bei der Darstellung gewährleistet, dass die Unterstützungs- und Widerstandsniveaus sowohl präzise als auch stabil sind und die tatsächliche Marktstruktur widerspiegeln, anstatt vorübergehender Kursbewegungen oder visueller Artefakte.

void DrawTrendline(const SwingPoint &anchor1, const SwingPoint &anchor2, bool isResistance, int touchCount, const MqlRates &rates[])
{
    // Create or update trendline object
    // Set properties: color, width, style, extend
    // Add label with touch count
}

Gewährleistung der strukturellen Integrität und Vermeidung von Repainting

Während der gesamten Implementierung kommen Mechanismen zum Einsatz, die die Stabilität der Strukturanalyse gewährleisten und visuelle Artefakte wie das Repainting verhindern sollen. Swings werden in der Reihenfolge ihres Auftretens verarbeitet. Dabei kommt die Funktion AssignSwingOrder() zum Einsatz, die die Swings chronologisch sortiert und ihnen einen Reihenfolgeindex zuweist. Trendlinien werden ausschließlich aus validierten Kurs-Swing-Paaren gebildet, die strenge Kriterien hinsichtlich ihrer Richtungskonsistenz und Anpassungsqualität erfüllen. Vor jedem Analysezyklus werden alle vorhandenen Trendlinien- und Swing-Punkt-Objekte mit der Funktion DeleteObjectsByPrefix() gelöscht, um sicherzustellen, dass nur die aktuellsten und genauesten Werte angezeigt werden. Dieser disziplinierte Ansatz verhindert dynamische Verschiebungen der Niveaus, die Händler in die Irre führen können, und stellt sicher, dass die dargestellten Unterstützungs- und Widerstandsniveaus über einen längeren Zeitraum hinweg konsistent bleiben.

Das Ergebnis ist ein robustes und zuverlässiges Rahmenwerk für die Strukturanalyse. Es hilft Händlern dabei, die sich wandelnde Marktlandschaft sicher zu verstehen. Außerdem erleichtert es das Backtesting und Forward-Testing, da die strukturellen Zusammenhänge feststehen, logisch sind und ausschließlich auf tatsächlichen Marktdaten basieren.

// Function to delete all trendline and swing point objects before each analysis cycle
void DeleteObjectsByPrefix(const string prefix)
{
    int totalObjects = ObjectsTotal(0, -1, -1);
    for(int i = totalObjects - 1; i >= 0; i--)
    {
        string name = ObjectName(0, i);
        if(StringFind(name, prefix) == 0) // Object name starts with prefix
        {
            ObjectDelete(0, name);
        }
    }
}

// Usage within OnTick() to clear previous objects
void OnTick()
{
    // ... existing code to process new bar and update ATR
    DeleteObjectsByPrefix(OBJECT_PREFIX);
    DrawMostSignificantTrendlines();
}


Ergebnisse

In diesem Abschnitt werden die Ergebnisse aus den Praxistests des Tools zur Darstellung struktureller Trendlinien vorgestellt. Die folgende Abbildung zeigt ein Beispiel für den EURUSD-Kurs auf dem H1-Chart, bei dem das Tool über einen Zeitraum von etwa zwölf Stunden beobachtet wurde, um zu beurteilen, wie der Kurs mit einer zuvor festgelegten strukturellen Widerstandslinie interagierte.

Während dieses Beobachtungszeitraums näherte sich der Kurs mehrfach der abfallenden Widerstandstrendlinie, bevor er schließlich darüber anstieg. Nach dieser Bewegung kehrte der Kurs in denselben Bereich zurück und testete das Niveau erneut, sodass das Verhalten rund um den ehemaligen Widerstand in einer Live-Umgebung untersucht werden konnte. Es wurden keine Signale erzeugt und keine Richtungsabsicht zugewiesen; der Fokus lag ausschließlich auf der Beobachtung struktureller Interaktionen und nicht auf der Vorhersage von Ergebnissen.

Im Zuge der weiteren Kursentwicklung bewertete das Tool die sich verändernde Struktur neu und ermittelte eine aktuellere Trendlinie auf der gegenüberliegenden Seite des Kurses. Diese Linie wurde anhand von Kurs-Swings auf derselben Strukturseite gebildet und umfasst ein bestätigtes tieferes Tief, auf das ein sich abzeichnendes höheres Tief folgt. Diese Elemente erfüllen die strukturellen Mindestvoraussetzungen für die Bildung von Trendlinien im Rahmen der Logik des Tools und veranschaulichen, wie sich das Rahmenwerk anpasst, sobald neue Strukturen verfügbar werden.

Dieses Beispiel veranschaulicht, wie das Tool bestehende strukturelle Referenzpunkte beibehält und gleichzeitig neu entstehende Referenzpunkte verfolgt, sodass Trendlinien im Verlauf der Kursentwicklung als aktive Referenzniveaus erhalten bleiben.

Das nachstehende Chart erweitert die Analyse um eine historische Überprüfung derselben EURUSD-H1-Struktur. Diese Backtesting-Ansicht wendet dieselbe strukturelle Logik – Swing-Erkennung, Reihenfolge und Trendlinienkonstruktion – unverändert an und gewährleistet so die Konsistenz zwischen der Echtzeit- und der historischen Auswertung.

In diesem Beispiel leitet sich die absteigende Widerstandstrendlinie aus Kurs-Swings auf derselben strukturellen Seite ab, während sich eine aufsteigende Unterstützungstrendlinie aus geordneten Kurs-Swings unterhalb des Kurses ergibt. Beide Linien wurden ausschließlich auf der Grundlage der validierten Struktur konstruiert und als Strahlen nach vorn verlängert, wobei ihre ursprüngliche Steigung und Ausrichtung beibehalten wurden. Das Zusammenspiel zwischen dem Kurs und diesen Niveaus verdeutlicht, wie mehrere strukturelle Bezugspunkte nebeneinander bestehen und sich im Zuge sich ändernder Marktbedingungen weiterentwickeln können.

Anstatt den Fokus auf Ergebnisse oder Handelsszenarien zu legen, verdeutlicht diese Darstellung, wie das Tool die strukturelle Kontinuität über einen längeren Zeitraum hinweg gewährleistet. Durch die Anwendung identischer Regeln sowohl bei der Live-Beobachtung als auch bei der historischen Wiedergabe lässt sich das Verhalten des Kurses im Verhältnis zu festgelegten Trendlinien objektiv untersuchen, was die Grundlage für weitere Diskussionen über strukturelle Beständigkeit und Anpassungsfähigkeit bildet, sobald zusätzliche Marktdaten vorliegen.

Diese Beobachtungen untermauern die Bedeutung strukturbasierter Trendlinien als stabile Referenzniveaus, die sich direkt aus dem Kursverlauf ableiten lassen. Durch den Einsatz validierter Swing-Muster und disziplinierter Konstruktionsregeln gewährleistet das Tool strukturelle Klarheit und bleibt gleichzeitig anpassungsfähig an aktuelle wie auch historische Marktbedingungen.


Schlussfolgerung

In diesem Artikel wird die Konstruktion schräger Trendlinien ausschließlich anhand der Kursstruktur formalisiert. Indem der Ansatz die Ableitung auf geordnete Swings und strenge Validierungsregeln stützt, verringert er die Subjektivität und gewährleistet gleichzeitig strukturelle Konsistenz über verschiedene Marktbedingungen hinweg.

Das Tool ist in erster Linie für Analyse- und Schulungszwecke gedacht und ergänzt bereits etablierte und bestätigte Werkzeuge und Strategien, indem es zusätzlichen strukturellen Kontext liefert, anstatt als eigenständiger Entscheidungsrahmen zu dienen.

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

Die Übertragung der Trading-Signale in einem universalen Expert Advisor. Die Übertragung der Trading-Signale in einem universalen Expert Advisor.
In diesem Artikel wurden die verschiedenen Möglichkeiten beschrieben, um die Trading-Signale von einem Signalmodul des universalen EAs zum Steuermodul der Positionen und Orders zu übertragen. Es wurden die seriellen und parallelen Interfaces betrachtet.
Handelsdisziplin in Code verankern (Teil 1): Mit MQL5 strukturelle Disziplin im Live-Trading schaffen Handelsdisziplin in Code verankern (Teil 1): Mit MQL5 strukturelle Disziplin im Live-Trading schaffen
Disziplin wird dann zuverlässig, wenn sie durch die Gestaltung des Systems und nicht durch Willenskraft entsteht. Mithilfe von MQL5 implementiert der Artikel Echtzeit-Beschränkungen – Obergrenzen für die Handelshäufigkeit und tägliche, auf dem Eigenkapital basierende Stopps –, die das Verhalten überwachen und bei Verstößen Maßnahmen auslösen. Die Leser erhalten eine praktische Vorlage für Steuerungsebenen, die die Umsetzung unter Marktdruck stabilisieren.
Eine alternative Log-datei mit der Verwendung der HTML und CSS Eine alternative Log-datei mit der Verwendung der HTML und CSS
In diesem Artikel werden wir eine sehr einfache, aber leistungsfähige Bibliothek zur Erstellung der HTML-Dateien schreiben, dabei lernen wir auch, wie man eine ihre Darstellung einstellen kann (nach seinem Geschmack) und sehen wir, wie man es leicht in seinem Expert Advisor oder Skript hinzufügen oder verwenden kann.
Larry Williams’ Marktgeheimnisse (Teil 10): Automatisierung von „Smash-Day“-Umkehrmustern in MQL5 Larry Williams’ Marktgeheimnisse (Teil 10): Automatisierung von „Smash-Day“-Umkehrmustern in MQL5
Wir implementieren das Umkehrmuster „Smash-Day“ von Larry Williams in MQL5, indem wir einen regelbasierten Expert Advisor mit dynamischem Risikomanagement, einer Logik zur Bestätigung von Ausbrüchen und mit einer Ausführungslogik, die immer nur eine Position gleichzeitig zulässt, erstellen. Mit dem MetaTrader 5-Strategietester und dem bereitgestellten Quellcode können Leser Backtests durchführen, die Strategie nachbilden und die Auswirkungen der Parameter untersuchen.