Liquidity-Raids optimieren: Den Unterschied zwischen Liquidity-Raids und Marktstrukturverschiebungen verstehen
Einführung
Dieser Artikel richtet sich an Trader, denen es schwerfällt, den Unterschied zwischen Marktstrukturwechsel und Liquidity-Raids zu erkennen, und welche Trade man eröffnen sollte, wenn eine dieser Situationen eintritt. Aufgrund meiner bisherigen Erfahrung und meiner Beobachtungen unter Tradern ist mir aufgefallen, dass sehr viele Trader falsche Entscheidungen treffen, weil ihnen die Erfahrung oder die Fähigkeiten fehlen, Marktstrukturwechsel und Liquiditätsabschöpfungen zu nutzen. Dabei sind Trader oft nicht aufmerksam oder versiert genug, um die richtigen Liquiditätsabschöpfungen oder Marktstrukturwechsel zu erkennen, die sich tatsächlich bewähren, und wählen daher die falschen aus, was schnell zu Verlusten und Drawdowns führt. Dies wiederum gibt Anlass zu unbegründeten Gerüchten und Spekulationen, dass die Konzepte der Liquiditätsabschöpfungen und Marktstrukturwechsel nicht funktionieren.
Dieser Artikel wird für die zweite Gruppe der Trader von großem Nutzen sein, die über mäßige Fähigkeiten und Erfahrungen im Handel mit diesen Konzepten verfügen und daher eine wechselhafte Trefferquote aufweisen: Manchmal sind sie bei der Auswahl ihrer Handels-Setups erfolgreich, manchmal scheitern sie jedoch auch kläglich. Er soll dazu beitragen, das Wissen der Leser zu vertiefen, und den wesentlichen Unterschied zwischen Liquiditätsabschöpfungen und Marktstrukturwechseln ausführlich erläutern, um so Verluste zu minimieren, die durch eine Verwechslung dieser beiden Phänomene entstehen können. Dies wird deutlich zeigen, dass sowohl Liquiditätsabschöpfungen als auch Marktstrukturwechsel bei optimaler Nutzung sehr effektiv und lohnend sein können. Der Artikel beschreibt eine praktische Checkliste von Kriterien, anhand derer sich entweder eine valide Marktstruktur oder Liquiditätsabschöpfungen erkennen lassen; somit kann ein Trader schnell auf diese Kriterien zurückgreifen und seine Handelsentscheidungen abwägen, was für mehr Ruhe im Entscheidungsprozess sorgt und dabei hilft, sowohl impulsives Handeln als auch Entscheidungslähmung zu vermeiden.
Als Trader weiß ich, dass die meisten neuen und fortgeschrittenen Trader, die nach ICT-Konzepten handeln, mit dieser Herausforderung konfrontiert sind. Tatsächlich stehen alle Trader irgendwann in ihrer Trading-Karriere vor fast ähnlichen, wenn nicht sogar identischen Herausforderungen, doch was sie alle voneinander unterscheidet, ist, dass verschiedene Trader diese Herausforderungen unterschiedlich bewältigen, darauf reagieren und sie antizipieren; daraus resultieren die Unterschiede bei den Handelsergebnissen, die sich als kolossal erwiesen haben – selbst wenn es sich um Trader handelt, die in etwa gleich stark sind und sich in Bezug auf Fähigkeiten, Erfahrung, Gelassenheit, Entscheidungsfindung und Technik nur geringfügig unterscheiden. Zudem kann dieselbe Herausforderung unter Verwendung anderer Konzepte, z. B. „Breakouts“, einfach anders bezeichnet werden; daher wird dieser Artikel auch für solche Trader von Nutzen sein und nicht nur für Trader, die sich auf ICT-Konzepte konzentrieren.
In diesem Artikel wird ein EA ausführlich vorgestellt, der speziell für Trader entwickelt wurde, die lernen möchten, wie sie Liquiditätsabschöpfungen optimal erkennen und nutzen können. Diese bieten in der Regel hervorragende Handelsmöglichkeiten, wenn innerhalb eines identifizierten Trends und Marktnarrativs gehandelt wird, wobei es gilt, Trading entgegen der Trendrichtung zu vermeiden. Das System wird zudem so konzipiert sein, dass es Marktstrukturwechsel erkennt, die an bestimmten Marktpunkten auftreten, wie beispielsweise am Ende von Trends oder bei größeren Umkehrungen auf höheren Zeitrahmen. Daher ist es speziell darauf optimiert, entweder Liquiditätsabschöpfungen oder Marktstrukturwechsel zu identifizieren und zu erkennen, wann jeweils gehandelt werden sollte, wenn sich eine solche Gelegenheit bietet. Dabei werden diese beiden Phänomene klar voneinander unterschieden, damit Trader keine Liquiditätsabschöpfungen handeln, wenn es sich tatsächlich um eine Veränderung der Marktstruktur handelt, oder umgekehrt keine Marktstrukturwechsel handeln, wenn es sich lediglich um eine einfache Liquiditätsabschöpfung handelt.
Dieser EA ist auch für Intraday-Trader und kurzfristige Trader von entscheidender Bedeutung, da er ihnen hilft, entsprechend der größtmöglichen Kursbewegung in Trendrichtung zu handeln, die an diesem Tag voraussichtlich eintreten wird. Dadurch erhöht sich die Erfolgsquote, da es fast täglich bei verschiedenen Währungspaaren und mindestens mehrmals pro Woche beim selben Währungspaar zu Liquiditätsabschöpfungen kommt.
Begriffsbestimmungen: Ungleichgewichte, Marktstrukturwechsel und Liquiditätsabschöpfung
In diesem Kapitel werde ich die gängigsten Begriffe und Werkzeuge definieren und erläutern, die wir in diesem Artikel verwenden und anwenden werden, da ich davon ausgehe, dass nicht alle Leser dieses Artikels mit diesen Konzepten vertraut sind und vielleicht zum ersten Mal davon hören. Deshalb müssen wir inklusiv sein und auf alle Leser Rücksicht nehmen.
1. Ungleichgewichte/Ineffizienzen
Diese Ungleichgewichte bzw. Ineffizienzen entstehen, wenn es zu raschen Kursbewegungen in die eine oder andere Richtung kommt, was auf einen starken Kauf- oder Verkaufsdruck hindeutet, der vor allem von institutionellen Akteuren ausgeht. Vereinfacht ausgedrückt führt dieser Handelsdruck oft zu einem Szenario, in dem Trader nicht die gleichen Möglichkeiten haben, Aufträge zu platzieren oder auszuführen. Daher wird dieser Bereich als unausgeglichene Preisspanne bezeichnet, wenn bei einer bullischen Ineffizienz der Preis einen Punkt mit Wucht und Geschwindigkeit in Richtung höherer Preise verlassen hat und Verkäufer nicht genügend Zeit oder Gelegenheit haben, Gegenpositionen einzugehen. Dagegen hat bei einer bärischen Ineffizienz der Preis einen Punkt mit Wucht und Geschwindigkeit in Richtung niedrigerer Preise verlassen und Käufer hatten nicht genügend Zeit oder Gelegenheit, diese auszuführen. Es kam nicht zu einer gegenläufigen Kursbewegung, die diese Expansion ausgleicht.
Dies lässt sich am besten mit der Logik eines Malers erklären: Wenn ein Maler eine Wand bemalt, muss er sie mit gleichen oder sogar ähnlichen Pinselstrichen in entgegengesetzten Richtungen streichen, damit die Farbe gleichmäßig aufgetragen wird und ausgewogen, d. h. von hoher Qualität ist. Diese Logik gilt auch für den Preis. Wenn sich beispielsweise eine bullische Kerze ausdehnt und einen Kurspunkt durchbricht – etwa von 1,3010 auf 1,3030 –, muss auch eine bärische Kerze diesen Kurspunkt durchbrechen, um den Preis auszugleichen; geschieht dies nicht, entsteht ein Ungleichgewicht. Oft, wenn auch nicht immer, wird der Preis irgendwann wieder auf diesen Punkt zurückkehren. Dies kann in jedem beliebigen Zeitraum auftreten.

2. Marktstrukturwechsel
Dies bezieht sich auf ein bestimmtes Phänomen im Kursverlauf und im Handel, bei dem sich der Kurs, der sich zunächst in eine bestimmte Richtung bewegte – beispielsweise bullisch – und dabei neue höhere Tiefststände und neue höhere Höchststände bildete, plötzlich von der sich gerade bildenden bullischen Struktur in eine neue bärische Struktur umschlägt, wobei der Kurs den zuletzt erreichten höheren Tiefststand mit Kraft und Geschwindigkeit durchbricht und immer weiter nach unten drückt, wobei nun niedrigere Tiefststände und niedrigere Höchststände entstehen. Damit eine Marktstruktur gültig ist, muss es zu einem solchen Durchbruch und einer solchen Verschiebung in der Kursstruktur kommen – und zwar mit Geschwindigkeit und Kraft.
Damit es sich bei Marktstrukturwechseln um hochwahrscheinliche Entwicklungen handelt und nicht um falsche Strukturveränderungen, sogenannte Judas-Swings oder Liquiditätsabschöpfung, muss der Kurs von Punkten mit hohem Interesse ausgehen, die wir oft als Liquidität bezeichnen. Marktstrukturwechsel, die nach Liquiditätsabschöpfungen eintreten, weisen eine sehr hohe Erfolgswahrscheinlichkeit auf. Zudem tritt dieses Phänomen in jedem Zeitrahmen von M1 bis MN auf.

3. Liquiditätsabschöpfungen
Unter Liquidität versteht man relevante Liquiditätszonen, die institutionelle Anleger häufig markieren und als potenzielle Bereiche identifizieren, um Long- oder Short-Positionen aus zuvor getätigten Geschäften glattzustellen oder auch um Möglichkeiten für neue Handelsgeschäfte zu schaffen. Diese Bereiche sind von Interesse, da es sich bei den meisten um Bereiche handelt, in denen Privatanleger Stop-Loss-Aufträge platzieren oder Breakout-Trades ausführen und somit viel Liquidität zur Absicherung der Trades institutioneller Anleger bieten; daher werden sie als Liquidität bezeichnet. Da Buy-Stops, Sell-Stops und Stop-Losses ausgelöst werden, setzen auch die institutionellen Trader hier ihre Trades mit der neu gewonnenen Liquidität in Gang; daher spricht man von einem „Liquidity Grab“.
Diese Liquiditätsbereiche zeichnen sich entweder durch doppelte Tiefststände, doppelte Höchststände, relativ gleich hohe Höchst- und Tiefststände oder durch die Tiefst- und Höchststände der vergangenen Tage, Wochen und Monate aus. Hier entsteht stets Liquidität, und diese Bereiche sind äußerst volatil und reaktionsstarke Bereiche und bieten umfangreiche Einstiegsmöglichkeiten für den Handel.

Eine Untersuchung der Entstehung von Liquiditätsabschöpfungen und Marktstrukturwechseln
Einer der wichtigsten ersten Schritte zur effektiven Nutzung dieses Konzepts ist die Ermittlung der Trendrichtung und des zugrunde liegenden Marktnarrativs – genau darauf geht dieser Artikel ein. Dies ist ein sehr wichtiger Schritt für den Erfolg dieses Konzepts, da es uns eine Grundlage und einen Ausgangspunkt dafür bietet, wie wir das zugrunde liegende Marktnarrativ erkennen und einordnen können. Kurz gesagt: Dieses gesamte Konzept kann nicht funktionieren, ohne den jeweiligen Trend oder das jeweilige Marktnarrativ zu bestimmen.
Dieser Artikel und EA helfen dabei, die nach Liquiditätsabschöpfungen ausgeführten Trades am Trend auszurichten und so kurzfristige Trades gegen den Trend zu vermeiden. Dies wird angehenden Tradern helfen, bei der Ausführung von Trades selbstbewusster und kritischer vorzugehen, da sie mit der Zeit lernen und verstehen werden, Trades erst dann auszuführen, wenn sich im Einklang mit den aktuellen Trends und Marktnarrativen eine Liquiditätsabschöpfung auftut. Und sobald diese Herausforderung – die Bestimmung des Trends und der Richtung des Marktnarrativs – gemeistert ist, geht es nur noch darum, nach Liquiditätsabschöpfungen oder gar Marktstrukturwechsel das richtige Setup zu finden.
Die Notwendigkeit für einen Trader, gewinnbringende und exzellente Entscheidungen beim Handel zu treffen, insbesondere bei Intraday- und langfristigen Trades, hängt weitgehend davon ab, wie man sich in Bezug auf die Trendrichtung und -stärke positioniert. Statistisch gesehen hat sich immer wieder gezeigt, dass das Handeln gegen den Trend oft kurzfristige Kursbewegungen mit sich bringt, bei denen es sich meist um Korrekturen kurz vor einer großen Bewegung in Trendrichtung handelt. Wer dabei nicht vorsichtig ist, kann sehr hohe Verluste erleiden, und wenn man die Position nicht rechtzeitig schließt, können diese Verluste letztendlich das Konto sprengen, da Märkte in einem Trend den Kurs tagelang, wenn nicht sogar wochenlang nach oben treiben können.
Dennoch erweisen sich Ausführungen unter Berücksichtigung der Trendstärke und -richtung oft als robuster, selbst wenn man ungünstige Einstiegspunkte wählt, und sie können mitunter zu zusätzlichen Gewinnen in Höhe von Hunderten, wenn nicht sogar Tausenden Dollar führen, sofern der Trader geduldig genug ist, abzuwarten, bis sich der Gesamttrend nach Trendwenden oder Liquiditätsabschöpfungen wieder fortsetzt.
Es hat sich außerdem gezeigt, dass die analysierten, ausgeführten, gehandelten und verfolgten Trades in Bezug auf die Trendrichtung nicht nur genauer und schneller sind, sondern auch einen sehr geringen Drawdown aufweisen, da sich der Preis mit größerer Geschwindigkeit und geringerem Drawdown auf seine Zielpunkte zubewegt. Außerdem sind die Kurs-Swings ausgeprägter, d. h., auch wenn man sich in einem Drawdown befindet, wird der Kurs sich bald entsprechend der Trendrichtung und im Einklang mit dem aktuell dominierenden Trend- und Narrativkontext bewegen und aus dem Drawdown herauskommen.
Und die beste Methode, um das Marktnarrativ und den Trend zu bestimmen, besteht darin, die höheren Zeitrahmen – vor allem W1 und D1 – heranzuziehen und diese genau zu analysieren. Der erste Schritt des EA, der auch manuell durchgeführt werden kann, besteht darin, einfache und exponentielle gleitende Durchschnitte zu verwenden, um zumindest ein klares Bild davon zu erhalten, ob der Markt einem Trend folgt oder sich in einer Konsolidierungsphase befindet. Märkte mit klarer Tendenz bieten weitaus sicherere und qualitativ hochwertigere Handelsmöglichkeiten. Trendmärkte lassen sich erkennen, wenn der einfache gleitende Durchschnitt mit 9 Perioden entweder unterhalb oder oberhalb des gleitenden Durchschnitts mit 21 Perioden liegt und ein deutliches Aufwärts- oder Abwärtsmuster und klar übereinander angeordnet sind. Der zweite wichtige Punkt besteht darin, die Kursentwicklung auf diesen beiden höheren Zeitrahmen zu untersuchen und festzustellen, in welche Richtung sie sich bewegt. Mit diesen Schritten lässt sich der Trend ganz einfach als bullisch oder bärisch bestimmen.
Nachdem nun ein Trend erkannt wurde und feststeht, dass sich der Kurs nicht in einer Konsolidierungsphase befindet, besteht der nächste Schritt darin, das zugrunde liegende Marktnarrativ zu identifizieren – oder, einfach gesagt: das Ziel, das der Kurs anstrebt oder erreichen will. Der Preis strebt im Regelfall drei Arten von Zielen an: Liquidität, PD-Arrays oder Ungleichgewichte, und er bewegt sich zudem meist von einem Liquiditätspunkt zum anderen. Hier kommen die zentrale Bedeutung und der Zweck dieser EA zum Tragen, und man sollte sich Folgendes merken: Wenn an diesen wichtigen Niveaus – wie dem Tagestief des Vortags, dem Wochentief der Vorwoche, dem Monatstief des Vormonats und relativ gleichwertigen Tiefstständen – Liquidität abgezogen wird, beginnen wir nun damit, eine Verschiebung der Marktstruktur an dieser Stelle zu erwarten, da es keinen Grund mehr für das Verkaufsnarrativ gibt. Dieser Marktstrukturwechsel am Markt könnte sich in einem etwas kürzeren Zeitrahmen vollziehen, beispielsweise auf H1-, H4- oder M15-Ebene, was ein neues Kauf-Marktnarrativ auslösen wird, d. h. Käufe bis zur nächsten Liquiditätsstufe.
Auf diese Weise verfolgt, antizipiert und handelt dieser EA Marktstrukturwechsel. Was nun die Trades nach Liquiditätsabschöpfungen betrifft, so werden diese auf folgende einfache Weise ausgeführt: Sobald wir unser Marktnarrativ fest im Blick haben, verlagern wir unseren Fokus auf die niedrigeren Zeitrahmen, wie beispielsweise M15, M5 und M1. Diese kürzeren Zeitrahmen eignen sich hervorragend für den Intraday-Handel und bieten fast täglich mögliche Handels-Setups.
Der Kurs funktioniert ganz einfach so: Er wird zunächst durch die Zeit bestimmt, nämlich durch die Haupthandelszeiten der wichtigsten Börsensitzungen. Sollte die Marktstimmung bullisch sein, könnte es an den jüngsten Tiefstständen zu einem sogenannten „Judas-Swing“ oder einem „Liquidity Grab“ kommen. Nach dem Liquiditätsabzug und dem vorgetäuschten Ausbruch wird der Kurs diesen Bereich mit Kraft und Geschwindigkeit verlassen, was ein deutliches Indiz dafür ist, dass es sich tatsächlich um einen Liquiditätsabzug handelte. Manchmal kann es dabei zu einem Ungleichgewicht kommen, das zum Aufbau neuer Handelspositionen genutzt werden kann. Das Auftreten eines Ungleichgewichts ist ein deutlicher Hinweis auf eine Liquiditätsabschöpfung.
Kurz gesagt: Der EA erkennt jedes Szenario, sobald es auftritt, bewertet es und ermittelt, was dort tatsächlich vor sich geht, bevor er entscheidet, ob es sich um einen Liquiditätsabzug oder eine Veränderung der Marktstruktur handelt. Sobald festgestellt wurde, um welches Szenario es sich handelt, wird das System gemäß den für dieses bestimmte Szenario geltenden Einsatzregeln vorgehen.

Automatisierung von Handelsentscheidungen mit dem Expert Advisor „Liquidity Grab“ in MQL5
Um diese Strategie zu automatisieren, zu veranschaulichen und umzusetzen, habe ich Folgendes entwickelt:
- Ein Expert Advisor zur Analyse von Trends und Marktnarrativen im Zusammenhang mit Liquiditätsabschöpfungen, der mögliche Einstiegspunkte für Trades ausschließlich in Richtung des Trends und des Marktnarrativs nach solchen Liquiditätsabschöpfungen ermittelt und dabei Trailing-Stop-Loss-Aufträge sowie gleitende Durchschnitte zur Unterstützung der Trenderkennung einbezieht.
Prozess der Entscheidungsfindung
Die Entscheidungen dieses Expert Advisors (Trenderkennung, Liquiditätserkennung, Price-Action-Erkennung und Handelsausführung) basieren auf folgender Logik:
Quellcode des Expert Advisors „Liquidity Grab“:
Dieser Expert Advisor erkennt potenzielle Handelssignale, die mit der allgemeinen Trendrichtung und dem Trendbild übereinstimmen, und wartet erst dann auf Handels-Setups, wenn zuvor eine Liquiditätsentnahme stattgefunden hat. Dadurch werden Positionen vermieden, die dem Trend entgegenstehen oder denen keine vorherige Liquiditätsentnahme vorausgegangen ist. Zudem nutzt das System exponentielle und einfache gleitende Durchschnitte, um die allgemeine Trendrichtung zu ermitteln und Handelspositionen zu eröffnen, und wendet eine Trailing-Stop-Loss-Logik an, um Stop-Loss-Niveaus festzulegen und das Kapital zu schützen, wenn sich der Kurs zu seinen Gunsten entwickelt. Er beinhaltet ein Risikomanagement (1 % Risiko pro Handel).
Eingabeparameter: konfigurierbare HandelseinstellungenÜber die Eingabeparameter können Nutzer das Verhalten des EAs für den Handel mit GBPJPY, GBPUSD und EURUSD anpassen, ohne den Kerncode zu ändern. „LotSize“ ist auf 0,1 eingestellt, eine konservative Größe, die für GBP-Paare geeignet ist, um das Risiko bei deren moderater Volatilität (100–300 Pips täglich) zu begrenzen. „LookbackBars“ (3) definiert das Zeitfenster zur Ermittlung der jüngsten Hochs/Tiefs auf H1/H4/D1 und sorgt so für ein Gleichgewicht zwischen Reaktionsgeschwindigkeit und Zuverlässigkeit. „StopLossPips“ (150) und „TakeProfitPips“ (600) sind an die typischen Schwankungsbreiten von GBPJPY, GBPUSD und EURUSD angepasst und zielen auf ein Risiko-Ertrags-Verhältnis von 1:4 ab, um von starken Trends nach einer Liquiditätsabschöpfung zu profitieren. „TrailingStopPips“ (100) stellt sicher, dass Gewinne bei stärkeren Kursbewegungen von GBPJPY gesichert werden. „EngulfingMinBodyRatio“ (0,3) stellt sicher, dass der Körper der Engulfing-Kerze im Verhältnis zur vorherigen Kerze signifikant ist, wodurch schwache Signale herausgefiltert werden.
„TradeTimeframe“ (H1) und „ConfirmationTimeframe“ (M15) ermöglichen eine flexible Erkennung von Bereinigungssignalen, genauer gesagt eine schnellere Bestätigung des Einstiegs. „MaxCandlesPostPurge“ (3) begrenzt das Zeitfenster für Engulfing-Signale nach der Bereinigung, um späte Einstiegsmöglichkeiten zu vermeiden. „VolumeThreshold“ (1.0) erfordert eine Volumenspitze, um die Liquidität zu bestätigen, was für die nachrichtengetriebenen Bewegungen des GBPUSD entscheidend ist. „UseTrendFilter“ (true) und „SMAPeriod“ (50) aktivieren einen 50-Perioden-SMA, um sicherzustellen, dass die Handelsgeschäfte mit dem breiteren Trend übereinstimmen und falsche Ausbrüche in unruhigen GBP-Märkten vermieden werden.
//+-------------------------------------------------------------------------------+ //| Liquidity GrabEA.mq5 | //| Expert Advisor for MetaTrader 5 | //| Description:Trades based on liquidity grabs and market structure shifts, waits| //| for trade set ups after liquidity grab, with flexible execution. | //+-------------------------------------------------------------------------------+ #property copyright "Eugene Mmene" #property link "https://www.EMcapital.com" #property version "1.10" //--- Input parameters input double LotSize = 0.05; // Lot size for trades input int LookbackBars = 1; // Number of bars to check for highs/lows input double StopLossPips = 20.0; // Stop loss in pips (adjusted for GOLD#) input double TakeProfitPips = 60.0; // Take profit in pips (adjusted for GOLD#) input double TrailingStopPips = 30.0; // Trailing stop in pips input double BreakevenPips = 20.0; // Move to BE after 30 pips profit input double EngulfingMinBodyRatio = 0.5; // Min body ratio for engulfing candle input ENUM_TIMEFRAMES TradeTimeframe = PERIOD_M15; // Primary timeframe for trading input ENUM_TIMEFRAMES ConfirmationTimeframe = PERIOD_M5; // Lower timeframe for engulfing input ENUM_TIMEFRAMES TrendTimeframe = PERIOD_H1; // Trend from H1 SMA input int MaxCandlesPostPurge = 5; // Max H1 candles to wait for engulfing input double VolumeThreshold = 1.2; // Volume multiplier for liquidity confirmation input bool UseTrendFilter = true; // Use SMA trend filter input int SMAPeriod = 50; // SMA period for trend filter
Die Funktion OnInit: Einrichtung und Validierung für einen robusten Handel
Die Funktion „OnInit“ wird einmal ausgeführt, wenn der EA auf den Chart geladen wird, und stellt sicher, dass er für den Handel mit GBPUSD, GBPJPY und EURUSD richtig eingestellt ist. Sie validiert „TradeTimeframe“ (M15 oder M30) und den ConfirmationTimeframe (M5 oder M15), um die Kompatibilität mit dem Multi-Zeitrahmen-Ansatz der Strategie zu gewährleisten, und weist ungültige Eingaben zurück, um Fehler zu vermeiden. Die Funktion ruft die Kontraktgröße des Symbols unter Verwendung von „SymbolInfoDouble“ ab, was für eine genaue Positionsgrößenbestimmung bei GBP-Paaren wichtig ist, bei denen die Pip-Werte unterschiedlich sind (z. B. ist der Pip-Wert von GBPJPY aufgrund der JPY-Skala kleiner).
Globale Variablen, die Hochs/Tiefs („lastHighH1“, „lastLowH1“ etc.), Kerzenzeiten und Handelsstatus verfolgen, werden mit Null oder false initialisiert, wodurch der Status des EAs zurückgesetzt wird. Die Überprüfung der Kontraktgröße stellt sicher, dass der EA korrekte Losgrößen berechnen kann, was besonders wichtig für die höhere Pip-Wert-Sensitivität des GBPJPY ist. Eine erfolgreiche Initialisierung protokolliert den Zeitrahmen und die Kontraktgröße und bestätigt damit die Handelsbereitschaft. Dieses Setup stellt sicher, dass der EA robust und auf die spezifische Marktdynamik von EURUSD/GBPUSD/GBPJPY zugeschnitten ist, im Gegensatz zu den breiteren Preisschwankungen von Gold.
int OnInit() { if(TradeTimeframe != PERIOD_M15 && TradeTimeframe != PERIOD_M30) { Print("Invalid trade timeframe. Use M15 or M30."); return(INIT_PARAMETERS_INCORRECT); } if(ConfirmationTimeframe != PERIOD_M5 && ConfirmationTimeframe != PERIOD_M15) { Print("Invalid confirmation timeframe. Use M5 or M15."); return(INIT_PARAMETERS_INCORRECT); } contractSize = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_CONTRACT_SIZE); if(contractSize == 0) { Print("Failed to get contract size for ", _Symbol); return(INIT_PARAMETERS_INCORRECT); } lastHigh = 0; lastLow = 0; lastCandleTime = 0; purgeDetected = false; lastPurgeTime = 0; Print("EA Initialized on ", EnumToString(TradeTimeframe), ", Confirmation TF: ", EnumToString(ConfirmationTimeframe), ", Contract Size: ", contractSize); return(INIT_SUCCEEDED); }
Funktion „IsNewCandle“: Triggerlogik bei neuer Bar
Die Funktion „IsNewCandle“ prüft, ob sich eine neue Kerze auf dem primären Handelszeitrahmen (Standard H1) gebildet hat, indem sie den Zeitstempel der aktuellen Kerze („iTime“) mit der letzten aufgezeichneten Kerzenzeit („lastCandleTime“) vergleicht. Wenn eine neue Kerze erkannt wird, wird „lastCandleTime“ aktualisiert, und die Funktion gibt „true“ zurück, wodurch die Haupthandelslogik in „OnTick“ ausgelöst wird. Dadurch wird sichergestellt, dass der EA die Handelsbedingungen nur einmal pro H1-Kerze auswertet, was den Verarbeitungsaufwand reduziert und redundante Überprüfungen der volatilen Bewegungen während laufender Kursbewegungen innerhalb einer Bar im GBPUSD/GBPJPY verhindert. Durch die Fokussierung auf neue Bars passt sich der EA an die Strategie an, die sich auf vollständige Kerzendaten zur Erkennung von Bereinigungs- und Engulfing-Mustern stützt, die für die Erfassung signifikanter Kursbewegungen in den trendgesteuerten Märkten der GBP-Paare entscheidend sind. Diese Funktion ist schlank implementiert, aber für die Aufrechterhaltung der Effizienz und Genauigkeit des EA unerlässlich.
bool IsNewCandle() { datetime currentCandleTime = iTime(_Symbol, TradeTimeframe, 0); if(currentCandleTime != lastCandleTime) { lastCandleTime = currentCandleTime; return true; } return false; }
UpdateHighsLows Funktion: Überwachen der Liquiditätsabschöpfungsniveaus
Die Funktion „UpdateHighsLows“ verfolgt die höchsten Hochs und tiefsten Tiefs der letzten „LookbackBars“ (Standard 3) auf H1-, H4- und D1-Zeitrahmen und speichert sie in globalen Variablen („lastHighH1“, „lastLowH1“ etc.). Sie verwendet „CopyRates“, um historische Kursdaten abzurufen, wobei „ArraySetAsSeries“ sicherstellt, dass die jüngste Kerze bei Index 0 steht. Für jeden Zeitrahmen werden die Höchst-/Tiefstwerte mit den Werten der ersten Kerze initialisiert und durch Iteration über den Rückblickzeitraum aktualisiert, wobei die extremen Preise erfasst werden.
Diese Funktion ist entscheidend für die Erkennung von Liquiditätsabschöpfungen – wenn die aktuelle H1-Kerze ein vorheriges Hoch oder ein Tief in einem beliebigen Zeitrahmen durchbricht, was eine potenzielle Trendumkehr oder -fortsetzung in EURUSD, GBPUSD oder GBPJPY signalisiert. Der Multi-Zeitrahmen-Ansatz stellt sicher, dass der EA signifikante Liquiditätsabschöpfungen erfasst, wie z. B. solche, die durch volatile Bewegungen des GBPJPY durch eine Jagd nach den Stopps ausgelöst werden. Die Fehlerbehandlung protokolliert Fehler beim Laden der Kursdaten und gewährleistet so Robustheit. Diese Funktion bildet die Grundlage für die auf Liquiditätsabschöpfungen basierende Einstiegslogik, die auf die Empfindlichkeit der GBP-Paare gegenüber wichtigen Unterstützungs-/Widerstandsniveaus zugeschnitten ist.
void UpdateHighsLows() { // H1 MqlRates ratesH1[]; ArraySetAsSeries(ratesH1, true); if(CopyRates(_Symbol, PERIOD_H1, 1, LookbackBars, ratesH1) >= LookbackBars) { lastHighH1 = ratesH1[0].high; lastLowH1 = ratesH1[0].low; for(int i = 1; i < LookbackBars; i++) { if(ratesH1[i].high > lastHighH1) lastHighH1 = ratesH1[i].high; if(ratesH1[i].low < lastLowH1) lastLowH1 = ratesH1[i].low; } } else Print("Failed to load H1 rates"); // H4 MqlRates ratesH4[]; ArraySetAsSeries(ratesH4, true); if(CopyRates(_Symbol, PERIOD_H4, 1, LookbackBars, ratesH4) >= LookbackBars) { lastHighH4 = ratesH4[0].high; lastLowH4 = ratesH4[0].low; for(int i = 1; i < LookbackBars; i++) { if(ratesH4[i].high > lastHighH4) lastHighH4 = ratesH4[i].high; if(ratesH4[i].low < lastLowH4) lastLowH4 = ratesH4[i].low; } } else Print("Failed to load H4 rates"); // D1 MqlRates ratesD1[]; ArraySetAsSeries(ratesD1, true); if(CopyRates(_Symbol, PERIOD_D1, 1, LookbackBars, ratesD1) >= LookbackBars) { lastHighD1 = ratesD1[0].high; lastLowD1 = ratesD1[0].low; for(int i = 1; i < LookbackBars; i++) { if(ratesD1[i].high > lastHighD1) lastHighD1 = ratesD1[i].high; if(ratesD1[i].low < lastLowD1) lastLowD1 = ratesD1[i].low; } } else Print("Failed to load D1 rates"); }
Die Funktion „IsVolumeSpike“: Überprüfen der Handelsliquidität
Die Funktion „IsVolumeSpike“ bestätigt Handels-Setups, indem sie prüft, ob das Tick-Volumen der aktuellen Kerze das durchschnittliche Volumen über „LookbackBars“ (3) um einen Faktor von „VolumeThreshold“ (1.0) übersteigt. Sie verwendet „CopyRates“, um die jüngsten Kerzen auf dem Handelszeitrahmen (H1) abzurufen und das durchschnittliche Volumen der gültigen Bars zu berechnen (diejenigen mit einem Volumen > 1, um Datenprobleme zu vermeiden). Wenn keine gültigen Bars vorhanden sind, wird die Prüfung umgangen, um den Ablauf nicht zu blockieren, und eine Warnung zur Fehlersuche wird protokolliert.
Bei EURUSD, GBPUSD und GBPJPY gehen hohe Volumina häufig mit bedeutenden Kursbewegungen einher, wie z. B. Ausbrüchen nach Nachrichten oder Liquiditätsabschöpfungen, sodass dieser Filter für die Validierung von Liquiditätsabschöpfungen entscheidend ist. Die Funktion protokolliert das aktuelle und durchschnittliche Volumen, um Transparenz zu schaffen. Durch die Sicherstellung der Volumenbestätigung vermeidet der EA Setups mit geringer Liquidität, die zu falschen Signalen in GBP-Paaren führen, und verbessert so die Handelsqualität und Rentabilität in trendorientierten Märkten wie GBPJPY.
bool IsVolumeSpike(long currentVolume) { double avgVolume = 0; MqlRates rates[]; ArraySetAsSeries(rates, true); if(CopyRates(_Symbol, TradeTimeframe, 1, LookbackBars, rates) < LookbackBars) { Print("Failed to load rates for volume check"); return true; } int validBars = 0; for(int i = 0; i < LookbackBars; i++) { if(rates[i].tick_volume > 1) { avgVolume += rates[i].tick_volume; validBars++; } } if(validBars == 0) { Print("Warning: No valid volume data. Average volume is 0. Bypassing volume check."); return true; } avgVolume /= validBars; Print("Current volume: ", currentVolume, ", Average volume: ", avgVolume, ", Valid bars: ", validBars); return currentVolume >= VolumeThreshold * avgVolume; }
Die Funktion „IsBullishTrend“: Sicherstellen der Trendausrichtung
Die Funktion „IsBullishTrend“ verwendet einen einfachen gleitenden 50-Perioden-Durchschnitt (SMA) auf dem Handelszeitrahmen (H1), um die Trendrichtung des Marktes zu bestimmen. Sie erstellt einen SMA-Handle mit „iMA“, holt den letzten SMA-Wert über „CopyBuffer“ und vergleicht ihn mit dem aktuellen Schlusskurs („iClose“). Liegt der Kurs über dem SMA, gibt die Funktion den Wert „true“ zurück, was auf einen Aufwärtstrend hinweist; andernfalls bedeutet dies einen Abwärtstrend oder einen neutralen Trend.
Wenn „UseTrendFilter“ aktiviert ist (Standardeinstellung true), stellt diese Funktion sicher, dass Kauf-Trades nur unter bullischen Bedingungen und Verkaufs-Trades nur unter bärischen Bedingungen getätigt werden. Dies entspricht der Tendenz von EURUSD/GBPUSD/GBPJPY, während der Londoner/New Yorker Sitzungen anhaltenden Trends zu folgen. Die Fehlerbehandlung protokolliert SMA-Datenausfälle und gewährleistet so die Zuverlässigkeit. Dieser Filter reduziert falsche Ausbrüche in unruhigen Märkten, ein häufiges Problem bei GBP-Paaren, indem er den breiteren Marktkontext bestätigt, bevor er in den Handel nach dem Ausbruch einsteigt.
bool IsBullishTrend() { double sma[]; ArraySetAsSeries(sma, true); int smaHandle = iMA(_Symbol, TradeTimeframe, SMAPeriod, 0, MODE_SMA, PRICE_CLOSE); if(CopyBuffer(smaHandle, 0, 0, 1, sma) < 1) { Print("Failed to load SMA data"); return false; } double currentPrice = iClose(_Symbol, TradeTimeframe, 0); Print("Current price: ", currentPrice, ", SMA: ", sma[0]); return currentPrice > sma[0]; }
IsBullishEngulfing und IsBearishEngulfing: Bestätigen von Umkehrsignalen
Diese Funktionen erkennen bullische und bärische Engulfing-Kerzen, wichtige Umkehrmuster, die zur Bestätigung des Einstiegs nach einer Bereinigung verwendet werden. Die Funktion „IsBullishEngulfing“ prüft, ob die aktuelle Kerze bullisch ist (close > open), die vorhergehende Kerze bärisch ist (close < open), die aktuelle Kerze die vorhergehende verschlingt (open ≤ previous close, close ≥ previous open) und der Körper der aktuellen Kerze mindestens „EngulfingMinBodyRatio“ (0,3) mal so groß ist wie der Körper der vorhergehenden Kerze. „IsBearishEngulfing“ wendet die umgekehrte Logik für bärische Handels-Setups an. Bei EURUSD, GBPUSD und GBPJPY signalisieren Engulfing-Kerzen auf M15 oder H1 nach der Liquiditätsabschöpfung oft starke Umkehrungen oder Fortsetzungen, insbesondere nach Liquiditätsabschöpfungen auf Schlüsselwerten.
Die Prüfung des Verhältnisses des Kerzenkörpers stellt sicher, dass die Engulfing-Kerze signifikant ist, und filtert schwache Muster in den volatilen GBP-Paarungen heraus. Diese Funktionen werden auf die letzten drei Kerzen sowohl auf H1 als auch auf M15 angewandt und bieten so die Flexibilität, Signale auf beiden Zeitrahmen abzufangen, was die Reaktionsfähigkeit des EA auf die Dynamik des GBP-Marktes erhöht.
bool IsBullishEngulfing(MqlRates ¤t, MqlRates &previous) { double currentBody = MathAbs(current.close - current.open); double prevBody = MathAbs(previous.close - previous.open); if(current.close > current.open && previous.close < previous.open && current.open <= previous.close && current.close >= previous.open && currentBody >= EngulfingMinBodyRatio * prevBody) { return true; } return false; } bool IsBearishEngulfing(MqlRates ¤t, MqlRates &previous) { double currentBody = MathAbs(current.close - current.open); double prevBody = MathAbs(previous.close - previous.open); if(current.close < current.open && previous.close > previous.open && current.open >= previous.close && current.close <= previous.open && currentBody >= EngulfingMinBodyRatio * prevBody) { return true; } return false; }
Die Funktion PlaceTrade: Ausführen von Marktorders mit SL/TP
Die Funktion „PlaceTrade“ führt Kauf- oder Verkaufsaufträge aus, wenn ein gültiges Signal bestätigt wird (purge + engulfing + volume + trend). Sie konstruiert einen „MqlTradeRequest“ mit dem Symbol, unveränderlicher „LotSize“ (0.1), Auftragsart (Kauf/Verkauf) und Einstiegspreis. Der Stop-Loss wird auf 150 Pips und der Take-Profit auf 600 Pips gesetzt, angepasst an den Punktwert von EURUSD, GBPUSD und GBPJPY („_Point * 100“), um deren Pip-Skalierung zu berücksichtigen. Die Funktion „ORDER_FILLING_IOC“ (Immediate or Cancel) gewährleistet eine schnelle Ausführung, die auf dem schnelllebigen GBPJPY-Markt von entscheidender Bedeutung ist.
Im Erfolgsfall werden die Handelsdetails protokolliert, „tradePlaced“ auf true gesetzt, um Mehrfach-Trades zu verhindern, und „purgeDetected“ zurückgesetzt, um einen erneuten Einstieg bei demselben Signal zu vermeiden. Bei einem Fehlschlag wird der Fehlercode zur Fehlersuche protokolliert. Diese Funktion gewährleistet eine präzise Handelsausführung mit vordefinierten Risikoparametern und optimiert die Rentabilität, indem sie auf hochwahrscheinliche Setups im trendfolgenden Verhalten der GBP-Paare abzielt.
void PlaceTrade(ENUM_ORDER_TYPE orderType, double price) { MqlTradeRequest request = {}; MqlTradeResult result = {}; request.action = TRADE_ACTION_DEAL; request.symbol = _Symbol; request.volume = LotSize; request.type = orderType; request.price = price; request.sl = (orderType == ORDER_TYPE_BUY) ? price - StopLossPips * _Point * 100 : price + StopLossPips * _Point * 100; request.tp = (orderType == ORDER_TYPE_BUY) ? price + TakeProfitPips * _Point * 100 : price - TakeProfitPips * _Point * 100; request.type_filling = ORDER_FILLING_IOC; if(OrderSend(request, result)) { Print("Trade placed successfully: ", orderType == ORDER_TYPE_BUY ? "BUY" : "SELL", " at ", price, " SL: ", request.sl, " TP: ", request.tp); tradePlaced = true; purgeDetected = false; // Reset purge after trade } else { Print("Trade failed: ", result.retcode); } }
Die Funktion „ManageTrailingStop“: Sichern der Gewinne mit Trailing Stops
Die Funktion „ManageTrailingStop“ passt den Stop-Loss offener Positionen dynamisch an, um Gewinne zu sichern, wenn sich der Preis günstig entwickelt. Es wird geprüft, ob eine Position für das Symbol existiert, indem „PositionSelect“ verwendet wird. Für Kaufpositionen wird ein neuer Stop-Loss zum aktuellen Geldkurs minus „TrailingStopPips“ (100 Pips) berechnet, angepasst an den Punktwert von GBPUSD, EURUSD und GBPJPY. Der neue Stop-Loss wird nur angewandt, wenn er höher ist als der aktuelle Stop-Loss und über dem Eröffnungskurs liegt, um den Breakeven oder den Gewinn zu gewährleisten. Bei Verkaufspositionen wird der Stop-Loss über den aktuellen Briefkurs gesetzt und angewendet, wenn er niedriger ist als der aktuelle Stop-Loss (oder wenn keiner existiert) und unter dem offenen Kurs liegt.
Die Funktion verwendet „MqlTradeRequest“ mit „TRADE_ACTION_SLTP“, um den Stop-Loss zu aktualisieren, wobei der Take-Profit erhalten bleibt. Dieser Trailing-Mechanismus ist für die volatilen Schwankungen des GBPJPY von entscheidender Bedeutung, da er es dem EA ermöglicht, große Bewegungen zu erfassen und gleichzeitig Gewinne zu sichern. Die Fehlerbehandlung protokolliert fehlgeschlagene Aktualisierungen und sorgt so für Transparenz. Diese Funktion erhöht die Rentabilität, indem sie das Risiko von Gewinnmitnahmen auf den trendorientierten Märkten für GBP-Paare verringert.
void ManageTrailingStop() { if(!PositionSelect(_Symbol)) return; double currentPrice = (PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY) ? SymbolInfoDouble(_Symbol, SYMBOL_BID) : SymbolInfoDouble(_Symbol, SYMBOL_ASK); double openPrice = PositionGetDouble(POSITION_PRICE_OPEN); double currentSL = PositionGetDouble(POSITION_SL); double newSL = 0; if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY) { newSL = currentPrice - TrailingStopPips * _Point * 100; if(newSL > currentSL && newSL > openPrice) { MqlTradeRequest request = {}; MqlTradeResult result = {}; request.action = TRADE_ACTION_SLTP; request.position = PositionGetInteger(POSITION_TICKET); request.symbol = _Symbol; request.sl = newSL; request.tp = PositionGetDouble(POSITION_TP); if(OrderSend(request, result)) Print("Trailing stop updated for BUY: ", newSL); else Print("Failed to update trailing stop: ", result.retcode); } } else // POSITION_TYPE_SELL { newSL = currentPrice + TrailingStopPips * _Point * 100; if((newSL < currentSL || currentSL == 0) && newSL < openPrice) { MqlTradeRequest request = {}; MqlTradeResult result = {}; request.action = TRADE_ACTION_SLTP; request.position = PositionGetInteger(POSITION_TICKET); request.symbol = _Symbol; request.sl = newSL; request.tp = PositionGetDouble(POSITION_TP); if(OrderSend(request, result)) Print("Trailing stop updated for SELL: ", newSL); else Print("Failed to update trailing stop: ", result.retcode); } } }
Die Funktion OnTick: Kernhandelslogik für „Purge“ und „Engulfing“
Die Funktion „OnTick“ ist die Hauptentscheidungszentrale des EA, die bei jedem Preistick ausgeführt wird, aber nur bei neuen H1-Kerzen über „IsNewCandle“ verarbeitet wird. Es setzt „tradePlaced“ zurück, wenn keine Positionen offen sind, und gewährleistet einen Handel pro Bereinigungszyklus. Trailing-Stops werden für offene Positionen mit „ManageTrailingStop“ verwaltet. Die Funktion lädt Kerzendaten für H1 und M15 unter Verwendung von „CopyRates“ und vergleicht die aktuelle H1-Kerze mit früheren Hochs/Tiefs (aktualisiert über „UpdateHighsLows“), um Liquiditätsabschöpfungen zu erkennen – Kurse, die über H1/H4/D1-Hochs oder unter Tiefs ausbrechen und damit Liquiditätsabschöpfungen signalisieren, die in EURUSD, GBPUSD/GBPJPY während der wichtigsten Sitzungen üblich sind. Wenn eine Bereinigung festgestellt wird, wird „purgeDetected“ gesetzt, und „lastPurgeTime“ verfolgt das Fenster (bis zu drei H1-Kerzen).
Das Volumen wird mit „IsVolumeSpike“ überprüft, und der Trend wird mit „IsBullishTrend“ (falls aktiviert) geprüft. Engulfing-Muster werden sowohl auf H1 als auch auf M15 identifiziert, was eine flexible Bestätigung ermöglicht. Ein Kauf wird ausgelöst, wenn auf eine hohe Bereinigung eine bullische Engulfing-Kerze (H1 oder M15), hohes Volumen und ein Aufwärtstrend folgt; ein Verkauf erfordert eine niedrige Bereinigung, eine bärische Engulfing-Kerze, hohes Volumen und einen Abwärtstrend. Umfangreiche Protokollierung sorgt für Transparenz bei der Fehlersuche. Diese Logik gewährleistet eine hohe Wahrscheinlichkeit für den Handel mit GBP-Paaren durch die Kombination von Liquiditätsabschöpfungen auf mehreren Zeitskalen mit robusten Bestätigungssignalen, die für ihre trendfolgende Natur optimiert sind.
void OnTick() { // Check if a new candle has formed on the trade timeframe if(!IsNewCandle()) return; // Reset tradePlaced if no open positions if(!PositionSelect(_Symbol)) tradePlaced = false; // Manage trailing stop for open positions ManageTrailingStop(); // Get current and previous candle data for trade timeframe MqlRates ratesH1[]; ArraySetAsSeries(ratesH1, true); if(CopyRates(_Symbol, TradeTimeframe, 0, 4, ratesH1) < 4) { Print("Failed to load H1 rates data"); return; } // Get candle data for confirmation timeframe (M15) MqlRates ratesM15[]; ArraySetAsSeries(ratesM15, true); if(CopyRates(_Symbol, ConfirmationTimeframe, 0, 4, ratesM15) < 4) { Print("Failed to load M15 rates data"); return; } // Current H1 candle (index 0) double currentOpenH1 = ratesH1[0].open; double currentCloseH1 = ratesH1[0].close; double currentHighH1 = ratesH1[0].high; double currentLowH1 = ratesH1[0].low; long currentVolumeH1 = ratesH1[0].tick_volume; datetime currentTimeH1 = ratesH1[0].time; // Update highs and lows for all timeframes UpdateHighsLows(); // Check for purge (liquidity sweep) on any timeframe bool highPurgedH1 = (currentHighH1 > lastHighH1 && lastHighH1 > 0); bool highPurgedH4 = (currentHighH1 > lastHighH4 && lastHighH4 > 0); bool highPurgedD1 = (currentHighH1 > lastHighD1 && lastHighD1 > 0); bool lowPurgedH1 = (currentLowH1 < lastLowH1 && lastLowH1 > 0); bool lowPurgedH4 = (currentLowH1 < lastLowH4 && lastLowH4 > 0); bool lowPurgedD1 = (currentLowH1 < lastLowD1 && lastLowD1 > 0); bool highPurged = highPurgedH1 || highPurgedH4 || highPurgedD1; bool lowPurged = lowPurgedH1 || lowPurgedH4 || lowPurgedD1; // Update purge status if(highPurged || lowPurged) { purgeDetected = true; lastPurgeTime = currentTimeH1; highPurge = highPurged; } // Check if within the post-purge window bool withinPurgeWindow = false; if(purgeDetected) { int candlesSincePurge = iBarShift(_Symbol, TradeTimeframe, lastPurgeTime, true); withinPurgeWindow = candlesSincePurge <= MaxCandlesPostPurge; if(!withinPurgeWindow) { purgeDetected = false; // Reset if window expires Print("Purge window expired: ", candlesSincePurge, " candles since last purge"); } } // Check volume for liquidity confirmation bool volumeConfirmed = IsVolumeSpike(currentVolumeH1); if(currentVolumeH1 <= 1) { Print("Warning: Tick volume is ", currentVolumeH1, ". Possible data issue. Bypassing volume check."); volumeConfirmed = true; } // Check trend with SMA bool isBullishTrend = UseTrendFilter ? IsBullishTrend() : true; // Check for engulfing candles on H1 (current + previous 2 candles) bool bullishEngulfingH1 = false, bearishEngulfingH1 = false; for(int i = 0; i < 3; i++) { if(IsBullishEngulfing(ratesH1[i], ratesH1[i+1])) bullishEngulfingH1 = true; if(IsBearishEngulfing(ratesH1[i], ratesH1[i+1])) bearishEngulfingH1 = true; } // Check for engulfing candles on M15 (current + previous 2 candles) bool bullishEngulfingM15 = false, bearishEngulfingM15 = false; for(int i = 0; i < 3; i++) { if(IsBullishEngulfing(ratesM15[i], ratesM15[i+1])) bullishEngulfingM15 = true; if(IsBearishEngulfing(ratesM15[i], ratesM15[i+1])) bearishEngulfingM15 = true; } // Trade logic if(purgeDetected && withinPurgeWindow && !tradePlaced) { if(highPurge && (bullishEngulfingH1 || bullishEngulfingM15) && volumeConfirmed && isBullishTrend) { Print("Buy signal: High purged, bullish engulfing on ", bullishEngulfingH1 ? "H1" : "M15", ", volume confirmed, bullish trend"); PlaceTrade(ORDER_TYPE_BUY, currentCloseH1); } else if(!highPurge && (bearishEngulfingH1 || bearishEngulfingM15) && volumeConfirmed && !isBullishTrend) { Print("Sell signal: Low purged, bearish engulfing on ", bearishEngulfingH1 ? "H1" : "M15", ", volume confirmed, bearish trend"); PlaceTrade(ORDER_TYPE_SELL, currentCloseH1); } } }
Installation und Backtests: Mit MetaEditor kompilieren und auf dem Chart starten. Backtesting für GBPJPY, H1 (Nov. 2025 – Feb. 2026) mit einem Risiko von 1 %.
Testen von Strategien
Strategietests mit dem „Liquidity Grab“-EA
Die Strategie funktioniert aufgrund ihrer Kernlogik bzw. ihrer schnellen Anpassungsfähigkeit an den Trendhandel und der Ausrichtung auf Marktnarrative bei den meisten, wenn nicht sogar allen Währungspaaren am besten. Es verwendet ein Liquiditätsentnahmeskonzept für Handels-Setups und hohe Volatilität, die für die meisten Handelsstrategien vorteilhaft und wesentlich sind. Wir werden diese Strategie testen, indem wir vom 1. Januar 2025 bis zum 8. Februar 2026 das Währungspaar GBPJPY im 60-Minuten-Zeitrahmen (H1) handeln. Hier sind die Parameter, die ich für diese Strategie gewählt habe.
GBPJPY


Ergebnisse im Strategietester
Nach dem Testen im Strategietester sind hier die Ergebnisse dazu, wie die Strategie funktioniert, analysiert und abschneidet.
Ergebnisse des Strategietesters für den EA „Liquidity Grab“
Salden-/Equity-Kurve:
GBPJPY

Backtest-Ergebnisse:
GBPJPY
Zusammenfassung
Ich habe diesen Artikel verfasst, um einen MetaTrader-5-Expert-Advisor zu erläutern, der speziell auf das Trendfolge-Trading zugeschnitten ist. Er unterscheidet zwischen Liquiditätsabschöpfungen und Marktstrukturwechseln, bevor er die jeweils festgestellten Muster nutzt und optimiert. Zudem integriert er Handels- und Risikomanagementtechniken, um Risiken, das Engagement und menschliche Fehler systematisch zu reduzieren und gleichzeitig Handels-Setups mit hoher Wahrscheinlichkeit beim GBPJPY sowie mögliche Ausstiegspunkte unter Verwendung desselben Handels- und Risikomanagementprotokolls zu identifizieren und auszuführen.
Dieser Expert Advisor ist einer der einfachsten und zugleich leistungsstärksten Trading-Expert-Advisors. Er nutzt trendbasierte Konzepte und Liquiditätsschwankungen, um mögliche Einstiegspunkte und Trendwenden zu erkennen. Die robuste und anpassungsfähige Logik für das Risiko- und Trade-Management hilft dem Expert Advisor, eine optimale Leistung zu erbringen und Drawdowns und Handelsverluste zu minimieren.
Ich habe den Expert Advisor auf GBPJPY getestet, und er hat gezeigt, dass er mögliche Einstiegspunkte in jedem Zeitrahmen effizient und treffsicher erkennen kann. Die Erkennung von Einstiegspunkten ist jedoch nur ein Teil des Ganzen, da in die Kernlogik eine optimale Strategie zur Einstiegsvalidierung integriert ist, die eine Ausführung nur dann zulässt, wenn bestimmte Kriterien erfüllt sind. Sobald die Trades validiert und ausgeführt sind, wird das Trade- und Risikomanagement schnell umgesetzt, um eine ordnungsgemäße Ausführung bis zum Abschluss des Handelsgeschäfts zu gewährleisten.
Um diese Strategie in den Expert Advisor zu implementieren, konfigurieren Sie die Eingabeparameter des Expert Advisors wie unten gezeigt, um die gewünschten Ergebnisse zu erzielen. Der Expert Advisor wurde entwickelt, um den vom Trader ausgewählten Zeitrahmen – von M15 bis D1 – auf Liquidität, Liquiditätsentnahme und mögliche Einstiegspunkte zu scannen und dabei sicherzustellen, dass die potenziellen Einstiegspunkte mit dem Trend, den gleitenden Durchschnitten sowie dem ATR-basierten Trailing-Stop-Loss übereinstimmen. Interessierte Trader sollten diesen Expert Advisor auf ihren Demokonten mit GBPJPY einem Backtest unterziehen; er funktioniert dort optimal und ist zwar für GBPJPY konzipiert, kann aber auch auf GBPUSD, EURUSD und GOLD angewendet werden.
Die Hauptziele bei der Entwicklung dieses Expert Advisors bestanden darin, ihn für streng auf Liquidität ausgerichtete Trades und einen auf Marktnarrative basierenden Handel mit fortschrittlicher Handelslogik zu optimieren sowie für Setups mit hoher Wahrscheinlichkeit, die in jedem Zeitrahmen auftreten können – je nach Wahl des Traders – und zudem ein Risikomanagement mit implementierten Trailing Stops zu integrieren.
Ich würde den Tradern auch raten, die Leistungsprotokolle regelmäßig zu überprüfen, um die Einstellungen und Eingabeparameter je nach den eigenen Zielen, der Anlageklasse oder der Risikobereitschaft zu verfeinern. Haftungsausschluss: Jeder, der diesen Expert Advisor nutzt, sollte ihn zunächst auf seinem Demokonto testen und dort mit dem Handel beginnen, um das Konzept der Liquiditätsentnahme und den Ansatz dieser Handelsidee zu beherrschen und damit beständige Gewinne zu erzielen, bevor er echtes Geld riskiert.
Schlussfolgerung
Der Artikel beleuchtet die wichtigsten Herausforderungen, denen Trader bei der Ermittlung von Markttrends, Liquiditätsbereichen und dem Einstieg in Trades gegenüberstehen, sowie in den Bereichen Risikomanagement, Trade-Management und der Vermeidung von Drawdowns – und erläutert, wie man einen Expert Advisor entwickelt, der diesen Prozess vereinfacht und die Chancen auf Gewinne sowie die Ausführung ausschließlich von Trades mit hoher Erfolgswahrscheinlichkeit erhöht. Der Artikel erläutert außerdem, wie der Handel mit Setups, die nach Liquiditätsabschöpfungen auftreten, unter Berücksichtigung des aktuellen Marktnarrativs und unter Ausklammerung von gegenläufigen Handelsideen und Setups dabei erheblich hilft.
Vielen Tradern fehlt ein klares Verständnis dafür, wie sich die Konzepte der Liquidität und der Liquiditätsentnahme im Handel tatsächlich äußerst positiv auf ihre Performance auswirken können – insbesondere in Verbindung mit einem angemessenen Risiko- und Handelsmanagement; dies wird zu einem entscheidenden Faktor, der den Unterschied zwischen durchschnittlichen und wirklich herausragenden Tradern ausmacht. Der vorgeschlagene Expert Advisor hilft bei der Durchsetzung von Disziplin und ermöglicht es Tradern, ihre Handelsideen, Positionsgrößen und Handels-Setups zu validieren, auch wenn sie dessen Einstiegssignale nicht direkt nutzen.
Der automatisierte MQL5 Expert Advisor bietet:
- Trades mit hoher Wahrscheinlichkeit, die sich aus den Setups ergeben, die durch Liquiditätsentnahme des gehandelten Vermögenswerts entstehen;
- Schutz vor der Volatilität von Nachrichten, indem der Handel rund um die Veröffentlichung von Nachrichten blockiert wird;
- Trades nur auf der Grundlage bestätigter Signale und einer validierten Einstiegslogik mit dynamischem SL/TP;
- adaptives Risikomanagement (Verkleinerung der Losgröße in Verlustphasen, Erhöhung in Gewinnphasen);
- Protokollierung der Ergebnisse zur laufenden Optimierung der Strategie;
- Strikte Einhaltung des Grundsatzes, zunächst die zugrunde liegende Dynamik zu identifizieren und anschließend die Art des Marktnarrativs zu bestimmen, z. B. eine Veränderung der Marktstruktur oder eine Liquiditätsentnahme;
- Beseitigung der emotionalen Entscheidungsfindung;
- automatisches Trade-Management (SL, TP, partielle Schließungen).
Zusammen sorgen diese Funktionen für eine konsistente Ausführung von Trades mit hoher Erfolgswahrscheinlichkeit und ein optimales Risikomanagement, wodurch sich die Chancen auf gewinnbringende Trades erhöhen und die Performance der Trader verbessert wird.
Der gesamte Code, auf den in dem Artikel verwiesen wird, ist unten angefügt. In der folgenden Tabelle sind alle Quellcodedateien beschrieben, die dem Artikel beigefügt sind.
| Dateiname | Beschreibung: |
|---|---|
| Liquidity Grab EA.mq5 | Datei mit dem vollständigen Quellcode für den „Liquidity Grab“-EA |
Übersetzt aus dem Englischen von MetaQuotes Ltd.
Originalartikel: https://www.mql5.com/en/articles/21212
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 40): Einsteigerleitfaden zur Dateiverarbeitung in MQL5 (II)
Einführung in MQL5 (Teil 39): Leitfaden für Anfänger zur Dateiverwaltung in MQL5 (I)
Workshop zu benutzerdefinierten Indikatoren (Teil 2): Entwicklung eines praxistauglichen Supertrend-Expert-Advisors in MQL5
Entwicklung eines Toolkits zur Price-Action-Analyse (Teil 61): Durchbrüche struktureller schräg verlaufender Trendlinien mit 3-Swing-Bestätigung
- 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.
Ein Moderator hat die Formatierung dieses Mal korrigiert. Bitte formatieren Sie Code in Zukunft ordnungsgemäß; Beiträge mit falsch formatiertem Code können entfernt werden.
Danke für die neue Version; ABER bist du sicher, dass die Codes in der Datei GENAU DIE GLEICHEN SIND WIE IM ARTIKEL!
(z. B. konnte ich
..
..
.. usw.
aber die Codes lauten wie folgt (die stammen aus deinem alten Artikel „Trending King“ **, enthalten aber seit dem 16. Februar 2026 auch h1/h4/D1 ;;; ICH BIN SO VERWIRRT WEGEN DER CODES! ! !):
Danke für die neue Version; ABER bist du sicher, dass die Codes in der Datei GENAU DIE GLEICHEN SIND WIE IM ARTIKEL!
(z. B. konnte ich nicht finden
..
..
.. usw.
aber die Codes lauten wie folgt (die stammen aus deinem alten Artikel „Trending King“ **, aber seit dem 16. Februar 2026 gibt es auch h1/h4/D1 ;;; ICH BIN SO VERWIRRT WEGEN DER CODES ! ! ! ):
Hallo, ja, die angezeigten Codes und die in der Datei sind identisch