
Die Handelsstrategie Inverse Fair Value Gap
Einführung
Eine Inverse Fair Value Gap (IFVG) liegt vor, wenn der Kurs in eine zuvor ermittelte „Fair Value Gap“ abprallt und statt der erwarteten unterstützenden oder Widerstandsreaktion diese nicht einhält. Dieses Scheitern kann eine potenzielle Veränderung der Marktrichtung signalisieren und einen konträren Handelsvorteil bieten. In diesem Artikel werde ich meinen selbst entwickelten Ansatz zur Quantifizierung und Nutzung der inversen Fair Value Gap als Strategie für MetaTrader 5 Expert Advisors vorstellen.
Strategie Motivation
Verstehen der Fair Value Gaps (FVGs)
Um die Idee hinter einem „Inversen Fair Value Gap“ zu verstehen, ist es hilfreich, zunächst zu wissen, was ein Fair Value Gap (FVG) standardmäßig darstellt. Eine Fair Value Gap wird in der Regel durch ein Muster aus drei Kerzen definiert.
Ein FVG tritt auf, wenn der Körper von Kerze B (und oft auch die Dochte) den Marktpreis abrupt nach oben oder unten lenkt, sodass eine „Lücke“ zurückbleibt. Konkret: Wenn das Tief von Kerze C höher ist als das Hoch von Kerze A in einer starken Aufwärtsbewegung, wird der Raum zwischen diesen beiden Kurspunkten als „fair value gap“, als faire Wertlücke betrachtet. Diese Lücke spiegelt eine Zone der Ineffizienz oder des Ungleichgewichts auf dem Markt wider - ein Bereich, in dem Handelsgeschäfte nicht richtig beidseitig partizipieren konnten, weil sich der Preis zu schnell in eine Richtung bewegte. Händler gehen oft davon aus, dass institutionelle Auftragsströme diese Verschiebung verursacht und „Fußabdrücke“ von Big-Money-Aktivitäten hinterlassen haben.
Die gängige Logik ist, dass der Preis irgendwann zu diesen Lücken zurückkehrt, um sie zu „füllen“. Das Schließen der Lücke kann als Mittel des Marktes angesehen werden, um den zuvor einseitig gehandelten Auftragsfluss auszugleichen. Händler, die diesen Grundsatz befolgen, warten oft darauf, dass der Kurs diese Lücke wieder aufgreift, und warten auf eine Reaktion, die die Fortsetzung der ursprünglichen Richtung oder manchmal auch eine Umkehr bestätigt.
Was ist ein „Inverse Fair Value Gap“?
Das Konzept der „Inverse Fair Value Gap“ baut auf dieser Idee auf, nähert sich ihr aber aus einer konträren oder umgekehrten Perspektive. Anstatt die Fair Value Gap als Zone zu nutzen, um die Fortsetzung der ursprünglichen Richtung zu bestätigen, könnte eine inverse FVG-Strategie genau diese Lücke nutzen, um zu antizipieren, wo der Markt scheitert und möglicherweise umkehren könnte.
Um zum Beispiel eine fallende inverse Fair Value Gap zu erkennen, kann man wie folgt vorgehen:
- Identifizieren einer steigenden FVG.
- Der Preis kehrt in die FVG-Zone zurück.
- Anstatt das als Unterstützung zu betrachten, sollte beobachtet werden, wie sich der Preis verhält. Wenn er nicht nach oben ausbricht und stattdessen durch die Lücke hindurch gehandelt wird, als ob sie keine nennenswerte Unterstützung bieten würde, könnte dies ein Zeichen für eine Verschiebung des Momentums sein.
- Verkaufen Sie und rechnen Sie damit, dass die Unfähigkeit, das FVG als Sprungbrett für höhere Preise zu nutzen, bedeutet, dass der Markt jetzt nach unten gehen könnte.
Die Intuition hinter Inverse Fair Value Gaps
- Institutioneller Fußabdruck und Schwachstellen: Der Fair Value Gap liegt die Annahme zugrunde, dass große, erfahrene Akteure das anfängliche Ungleichgewicht verursacht haben. Wenn der Preis in diese Zonen zurückkehrt, ist das oft ein Test: Wenn die großen Akteure bei diesen Preisen immer noch einen Wert sehen, können ihre wartenden Aufträge den Preis stützen oder ihm widerstehen, was zu einer Reaktion führt. Wenn der Kurs stattdessen direkt durch das FVG durchbricht, ohne dass es zu einer starken Erholung oder Fortsetzung kommt, deutet dies darauf hin, dass die großen Aufträge möglicherweise ausgeführt oder storniert wurden oder diese Zone nicht mehr verteidigen. Dies kann auf eine Verschiebung der Marktabsichten hinweisen.
- Frühzeitiges Erkennen von Schwächen oder Stärken: Indem sie sich darauf konzentrieren, was nicht passiert, wenn der Kurs in die Lücke zurückkehrt, können Händler subtile Hinweise auf die zugrunde liegende Stärke oder Schwäche gewinnen. Wenn ein steigender Markt von einer bekannten Ineffizienzzone (dem Aufwärts-FVG) keinen Auftrieb erhält, kann dies ein frühzeitiges Warnsignal dafür sein, dass der Aufwärtstrend an Kraft verlieren könnte.
- Umkehr traditioneller FVG-Strategien: Traditionelle FVG-Strategien beruhen auf der Annahme einer Neugewichtung, gefolgt von einer Fortführung in der ursprünglichen Richtung. Die Märkte sind jedoch dynamisch, und nicht jedes Schließen einer Kurslücke führt zu einer Wiederaufnahme des vorherigen Trends. Der inverse FVG-Ansatz kann einem Händler einen zusätzlichen „Vorteil“ verschaffen, indem er Situationen identifiziert, in denen der normale Spielplan versagt, sodass eine gegenläufige Bewegung eine höhere Wahrscheinlichkeit und ein besseres Risiko-Ertrags-Verhältnis haben kann.
Das Konzept der inversen Fair Value Gaps beruht auf der Erkenntnis, dass die Märkte ständig Bereiche mit früheren Ungleichgewichten testen und erneut testen. Während sich der traditionelle FVG-Handel auf eine erfolgreiche Neugewichtung und Fortführung konzentriert, bietet der inverse Ansatz einen Vorteil, indem er erkennt, wann dieser Neugewichtsbildungsprozess nicht das erwartete Ergebnis bringt. Dieser Perspektivwechsel verwandelt das, was eine verpasste Gelegenheit - oder sogar ein Verlustgeschäft - hätte sein können, in ein konträres Setup mit einem potenziell hohen Vorteil. In einem Marktumfeld, in dem das Antizipieren des Unerwarteten oft belohnt wird, fügt das inverse FVG-Konzept dem Arsenal der technischen Analysetechniken eines Händlers ein zusätzliches Werkzeug hinzu.
Entwicklung einer Strategie
Ähnlich wie diskretionäre Händler die Fair Value Gaps nutzen, werden auch inverse Fair Value Gaps aufgrund der anspruchsvollen Kriterien, die zur Ermittlung gültiger Muster erforderlich sind, aktiv gehandelt. Der Handel mit jeder einzelnen inversen Fair Value Gap ohne Unterscheidung würde wahrscheinlich zu einer Random-Walk-Performance führen, da die meisten Lücken nicht mit der strategischen Intuition übereinstimmen, die ich zuvor erörtert habe. In dem Bemühen, die von diskretionären Händlern in Betracht gezogenen Merkmale zu quantifizieren, habe ich umfangreiche Merkmalstests durchgeführt und die folgenden Regeln aufgestellt:
-
Anpassung an den Makrotrend: Der Kurs sollte dem übergeordneten Makrotrend folgen, der durch seine Position im Verhältnis zum gleitenden 400-Perioden-Durchschnitt bestimmt wird.
-
Angemessene Auswahl des Zeitrahmens: Ein niedriger Zeitrahmen, z. B. 1 bis 5 Minuten, sollte verwendet werden, da das Konzept der „Auftragsabwicklung“ innerhalb eines kurzen Zeitraums erfolgt. Für die Zwecke dieses Artikels wird ein Zeitrahmen von 3 Minuten zugrunde gelegt.
-
Konzentration auf die jüngste Marktwertlücke: Es wird nur die jüngste Fair Value Gap (FVG) berücksichtigt, da sie für die Wiedergabe der aktuellen Marktbedingungen die größte Bedeutung hat.
-
Validierung der Größe der Fair Value-Lücke: Das FVG darf im Vergleich zu den umgebenden Kerzen weder zu groß noch zu klein sein. Eine zu kleine Lücke ist nicht aussagekräftig genug, um als verlässliche Unterstützungs- oder Widerstandsmarke zu fungieren, während eine zu große Lücke wahrscheinlich durch ein Nachrichtenereignis verursacht wird, was das Umkehrsignal verzögern kann. Um sicherzustellen, dass das FVG aussagekräftig ist, werden spezifische Schwellenwerte für die Validierung jeder Lücke festgelegt.
-
Kontrollierter Ausbruch Kerzengröße: Ebenso sollte die Ausbruchskerze nicht übermäßig groß sein, da der Einstieg auf dem Schluss der Kerze basiert. Große Ausbruchskerzen können zu späten Signalen führen, die die Strategie vermeiden will.
-
Rechtzeitiger Preisumschwung und Ausbruch: Innerhalb einer bestimmten Zeit nach der Bildung eines FVG muss der Kurs zur Lücke zurückkehren und von der gegenüberliegenden Kante mit einer geschlossenen Kerze ausbrechen. Dies wird dadurch erreicht, dass nur das jüngste FVG innerhalb eines kurzen Rückblickzeitraums untersucht wird.
-
Bestätigung der Ausbruchsstärke: Das FVG sollte mit einem früheren Ablehnungsniveau übereinstimmen, um sicherzustellen, dass ein Ausbruch aus dem FVG eine erhöhte Stärke in der entsprechenden Richtung signalisiert.
Gehen wir nun den Code durch.
Zunächst deklarieren wir die erforderlichen globalen Variablen. Diese globalen Variablen enthalten Schlüsseldaten zur Verfolgung von Fair Value Gaps (FVGs), aktuellen offenen Geschäften und dem Zustand des Systems. Variablen wie previousGapHigh, previousGapLow und lastGapIndex helfen dabei, die zuletzt identifizierte Lücke zu verfolgen. handleMa speichert das Handle des gleitenden Durchschnitts. Die Werte buypos und sellpos erfassen die Tickets offenen Positionen, während currentFVGstatus und newFVGformed den Zustand des letzten identifizierten FVG erfassen.
string previousGapObjName = ""; double previousGapHigh = 0.0; double previousGapLow = 0.0; int LastGapIndex = 0; double gapHigh = 0.0; double gapLow = 0.0; double gap = 0.0; double lott= 0.1; ulong buypos = 0, sellpos = 0; double anyGap = 0.0; double anyGapHigh = 0.0; double anyGapLow = 0.0; int barsTotal = 0; int newFVGformed = 0; int currentFVGstatus = 0; int handleMa; #include <Trade/Trade.mqh> CTrade trade;
Als Nächstes deklarieren wir die folgenden Funktionen, um Handelsgeschäfte mit Take Profit und Stop Loss auszuführen und das Ticket von jedem Handelsgeschäft zu verfolgen.
//+------------------------------------------------------------------+ //| Store order ticket number into buypos/sellpos variables | //+------------------------------------------------------------------+ void OnTradeTransaction(const MqlTradeTransaction& trans, const MqlTradeRequest& request, const MqlTradeResult& result) { if (trans.type == TRADE_TRANSACTION_ORDER_ADD) { COrderInfo order; if (order.Select(trans.order)) { if (order.Magic() == Magic) { if (order.OrderType() == ORDER_TYPE_BUY) { buypos = order.Ticket(); } else if (order.OrderType() == ORDER_TYPE_SELL) { sellpos = order.Ticket(); } } } } } //+------------------------------------------------------------------+ //| Execute sell trade function | //+------------------------------------------------------------------+ void executeSell() { if (IsWithinTradingHours()){ double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID); bid = NormalizeDouble(bid,_Digits); double tp = bid - tpp * _Point; tp = NormalizeDouble(tp, _Digits); double sl = bid + slp * _Point; sl = NormalizeDouble(sl, _Digits); trade.Sell(lott,_Symbol,bid,sl,tp); sellpos = trade.ResultOrder(); } } //+------------------------------------------------------------------+ //| Execute buy trade function | //+------------------------------------------------------------------+ void executeBuy() { if (IsWithinTradingHours()){ double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK); ask = NormalizeDouble(ask,_Digits); double tp = ask + tpp * _Point; tp = NormalizeDouble(tp, _Digits); double sl = ask - slp * _Point; sl = NormalizeDouble(sl, _Digits); trade.Buy(lott,_Symbol,ask,sl,tp); buypos= trade.ResultOrder(); } } //+------------------------------------------------------------------+ //| Check if is trading hours | //+------------------------------------------------------------------+ bool IsWithinTradingHours() { datetime currentTime = TimeTradeServer(); MqlDateTime timeStruct; TimeToStruct(currentTime, timeStruct); int currentHour = timeStruct.hour; if (currentHour >= startHour && currentHour < endHour) return true; else return false; }
Anschließend verwenden wir diese beiden Funktionen, um eine Fair Value Gap zu ermitteln. IsReacted() prüft, ob innerhalb des Rückblickszeitraums mindestens zwei Kerzendochte innerhalb der Preisspanne des aktuellen FVG liegen, was wir als Zeichen für eine früheres Scheitern des FVG interpretieren. IsGapValid() prüft dann, ob die Lückengröße innerhalb des gewünschten Bereichs liegt und gibt entweder true oder false zurück.
//+------------------------------------------------------------------+ //| Function to validate the FVG gap | //+------------------------------------------------------------------+ bool IsGapValid(){ if (anyGap<=gapMaxPoint*_Point && anyGap>=gapMinPoint*_Point&&IsReacted()) return true; else return false; } //+------------------------------------------------------------------+ //| Check for gap reaction to validate its strength | //+------------------------------------------------------------------+ bool IsReacted(){ int count1 = 0; int count2 = 0; for (int i = 4; i < lookBack; i++){ double aLow = iLow(_Symbol,PERIOD_CURRENT,i); double aHigh = iHigh(_Symbol,PERIOD_CURRENT,i); if (aHigh<anyGapHigh&&aHigh>anyGapLow&&aLow<anyGapLow){ count1++; } else if (aLow<anyGapHigh&&aLow>anyGapLow&&aHigh>anyGapHigh){ count2++; } } if (count1>=2||count2>=2) return true; else return false; }
Danach prüfen wir mit diesen Funktionen, ob am letzten FVG gerade ein Ausbruch stattfindet.
//+------------------------------------------------------------------+ //| Check if price broke out to the upside of the gap | //+------------------------------------------------------------------+ bool IsBrokenUp(){ int lastClosedIndex = 1; double lastOpen = iOpen(_Symbol, PERIOD_CURRENT, lastClosedIndex); double lastClose = iClose(_Symbol, PERIOD_CURRENT, lastClosedIndex); if (lastOpen < gapHigh && lastClose > gapHigh&&(lastClose-gapHigh)<maxBreakoutPoints*_Point) { if(currentFVGstatus==-1){ return true;} } return false; } //+------------------------------------------------------------------+ //| Check if price broke out to the downside of the gap | //+------------------------------------------------------------------+ bool IsBrokenLow(){ int lastClosedIndex = 1; double lastOpen = iOpen(_Symbol, PERIOD_CURRENT, lastClosedIndex); double lastClose = iClose(_Symbol, PERIOD_CURRENT, lastClosedIndex); if (lastOpen > gapLow && lastClose < gapLow&&(gapLow -lastClose)<maxBreakoutPoints*_Point) { if(currentFVGstatus==1){ return true;} } return false; }
Schließlich verwenden wir diese beiden Funktionen, um die Gültigkeit der Lücke mit IsGapValid() zu prüfen, und wenn sie gültig ist, aktualisieren wir die globalen Variablen, markieren die FVG als neu und zeichnen sie im Chart. Die Funktion getFVG() ist für die Kodierung der gesamten Strategie unerlässlich. Wir rufen sie bei jedem neuen Balken auf, um zu prüfen, ob ein gültiges FVG vorliegt. Wenn die FVG gültig ist, überprüfen wir, ob sie sich von der zuletzt gespeicherten unterscheidet, und wenn ja, speichern wir sie in der globalen Variablen, um den Status zu aktualisieren.
//+------------------------------------------------------------------+ //| To get the most recent Fair Value Gap (FVG) | //+------------------------------------------------------------------+ void getFVG() { // Loop through the bars to find the most recent FVG for (int i = 1; i < 3; i++) { datetime currentTime = iTime(_Symbol,PERIOD_CURRENT, i); datetime previousTime = iTime(_Symbol,PERIOD_CURRENT, i + 2); // Get the high and low of the current and previous bars double currentLow = iLow(_Symbol,PERIOD_CURRENT, i); double previousHigh = iHigh(_Symbol,PERIOD_CURRENT, i+2); double currentHigh = iHigh(_Symbol,PERIOD_CURRENT, i); double previousLow = iLow(_Symbol,PERIOD_CURRENT, i+2); anyGap = MathAbs(previousLow - currentHigh); // Check for an upward gap if (currentLow > previousHigh) { anyGapHigh = currentLow; anyGapLow = previousHigh; //Check for singular if (LastGapIndex != i){ if (IsGapValid()){ gapHigh = currentLow; gapLow = previousHigh; gap = anyGap; currentFVGstatus = 1;//bullish FVG DrawGap(previousTime,currentTime,gapHigh,gapLow); LastGapIndex = i; newFVGformed =1; return; } } } // Check for a downward gap else if (currentHigh < previousLow) { anyGapHigh = previousLow; anyGapLow = currentHigh; if (LastGapIndex != i){ if(IsGapValid()){ gapHigh = previousLow; gapLow = currentHigh; gap = anyGap; currentFVGstatus = -1; DrawGap(previousTime,currentTime,gapHigh,gapLow); LastGapIndex = i; newFVGformed =1; return; } } } } } //+------------------------------------------------------------------+ //| Function to draw the FVG gap on the chart | //+------------------------------------------------------------------+ void DrawGap(datetime timeStart, datetime timeEnd, double gaphigh, double gaplow) { // Delete the previous gap object if it exists if (previousGapObjName != "") { ObjectDelete(0, previousGapObjName); } // Generate a new name for the gap object previousGapObjName = "FVG_" + IntegerToString(TimeCurrent()); // Create a rectangle object to highlight the gap ObjectCreate(0, previousGapObjName, OBJ_RECTANGLE, 0, timeStart, gaphigh, timeEnd, gaplow); // Set the properties of the rectangle ObjectSetInteger(0, previousGapObjName, OBJPROP_COLOR, clrRed); ObjectSetInteger(0, previousGapObjName, OBJPROP_STYLE, STYLE_SOLID); ObjectSetInteger(0, previousGapObjName, OBJPROP_WIDTH, 2); ObjectSetInteger(0, previousGapObjName, OBJPROP_RAY, false); // Update the previous gap information previousGapHigh = gaphigh; previousGapLow = gaplow; }
Und wir integrieren alle Strategieregeln in der Funktion OnTick() wie folgt - und schon sind wir fertig.
//+------------------------------------------------------------------+ //| OnTick function | //+------------------------------------------------------------------+ void OnTick() { int bars = iBars(_Symbol,PERIOD_CURRENT); if (barsTotal!= bars){ barsTotal = bars; double ma[]; double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID); double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK); CopyBuffer(handleMa,BASE_LINE,1,1,ma); if (IsBrokenLow()&&sellpos == buypos&&newFVGformed ==1&&bid<ma[0]){ executeSell(); newFVGformed =0; } else if (IsBrokenUp()&&sellpos == buypos&&newFVGformed ==1&&ask>ma[0]){ executeBuy(); newFVGformed =0; } getFVG(); if(buypos>0&&(!PositionSelectByTicket(buypos)|| PositionGetInteger(POSITION_MAGIC) != Magic)){ buypos = 0; } if(sellpos>0&&(!PositionSelectByTicket(sellpos)|| PositionGetInteger(POSITION_MAGIC) != Magic)){ sellpos = 0; } } }
Einige Randbemerkungen, wir rufen dies am Anfang von OnTick() auf, sodass der Rest der Zeilen erst verarbeitet wird, wenn sich ein neuer Balken gebildet hat. Diese Maßnahme spart Rechenleistung.
int bars = iBars(_Symbol,PERIOD_CURRENT); if (barsTotal!= bars){ barsTotal = bars;
Außerdem können wir, die wir immer nur einen Handel wollen, nur dann einen Handel eingehen, wenn beide Tickets mit dieser Logik auf 0 gesetzt sind, was bedeutet, dass es keine aktuellen Positionen gibt, die von diesem speziellen EA geöffnet wurden.
if(buypos>0&&(!PositionSelectByTicket(buypos)|| PositionGetInteger(POSITION_MAGIC) != Magic)){ buypos = 0; } if(sellpos>0&&(!PositionSelectByTicket(sellpos)|| PositionGetInteger(POSITION_MAGIC) != Magic)){ sellpos = 0; }
Kurze Zusammenfassung:
- Globale Deklarationen und Eingaben: Einrichten der Umgebung, der Variablen und der nutzerkonfigurierbaren Parameter.
- Initialisierung (OnInit): Vorbereiten des Filter für den gleitenden Durchschnitt und Festlegung der magischen Zahlen.
- OnTick-Logik: Die wesentliche Arbeitsabfolge prüft auf neue Balken, erkennt FVGs, prüft Breakouts und führt Handelsgeschäfte aus, wenn die Bedingungen erfüllt sind.
- FVG-Erkennung (getFVG, IsGapValid, IsReacted): Identifizierung und Validierung von Fair Value Gap und deren Marktreaktionen.
- Ausbruchsprüfungen (IsBrokenUp, IsBrokenLow): Bestätigung der Ausbruchsrichtung für den Einstieg in den Handel.
- Handelsmanagement (OnTradeTransaction, executeBuy, executeSell): Bearbeitung von Auftragstickets und Sicherstellung der korrekten Platzierung von Handelsgeschäften.
- Chartdarstellung (DrawGap): Visualisierung der identifizierten FVGs.
- Zeitfilterung (IsWithinTradingHours): Beschränkung des Handels auf bestimmte Zeiten.
Strategietester
Die Strategie funktioniert am besten bei Aktienindizes aufgrund ihrer relativ niedrigen Spreads und hohen Volatilität, die für den Intraday-Handel für Privatanleger von Vorteil sind. Wir werden diese Strategie testen, indem wir den Nasdaq 100 Index vom 1. Januar 2020 bis zum 1. Dezember 2024 auf dem 3-Minuten-Zeitrahmen (M3) handeln. Hier sind die Parameter, die ich für diese Strategie gewählt habe.
Im Folgenden finden Sie einige Empfehlungen für die Auswahl der Parameterwerte für die Strategie:
- Handeln Sie in Zeiten hoher Marktvolatilität, in der Regel wenn die Börse geöffnet ist. Dieser Zeitpunkt hängt von der Serverzeit Ihres Brokers ab. Bei meiner Serverzeit (GMT+0) ist die Börse zum Beispiel von etwa 14:00 bis 19:00 Uhr geöffnet.
- Ein Rendite-Risiko-Verhältnis von mehr als eins wird empfohlen, da wir in einem sehr volatilen Markt auf den Makrotrend setzen. Vermeiden Sie außerdem, die Take-Profit- und Stop-Loss-Werte (TPSL) zu hoch oder zu niedrig anzusetzen. Wenn die TPSL zu groß ist, kann sie die kurzfristigen Signale nicht effektiv erfassen, und wenn sie zu klein ist, können sich die Spreads negativ auf den Handel auswirken.
- Stellen Sie die Werte für die Gap-Schwellenwerte, die Schwellenwerte für Ausbruchskerzen und den Rückblickzeitraum nicht zu stark ein. Halten Sie diese Parameter in einem vernünftigen Bereich in Bezug auf die Preisspanne des gehandelten Wertpapiers, um eine Überanpassung zu vermeiden.
Hier ist nun das Ergebnis des Backtests:
Wir sehen, dass die Strategie in den letzten fünf Jahren sehr beständig war, was auf ihr Rentabilitätspotenzial hinweist.
Ein typischer Handel im Visualisierungsteil des Strategietesters würde folgendermaßen aussehen:
Ich möchte die Leser ermutigen, auf diesem Strategierahmen aufzubauen und ihn mit ihrer Kreativität zu verbessern. Hier sind einige meiner Vorschläge:
- Die Stärke des IFVG wird durch die Anzahl der abgeprallten Kerzen im Bereich des FVG bestimmt. Sie können die Differenz dieser Zahlen als Regel für die Bewertung verwenden.
- In diesem Artikel haben wir uns nur auf die maximalen Ausbruchspunkte konzentriert. Manchmal kann die Ausbruchskerze jedoch zu klein sein, was auf eine schwache Ausbruchsstärke hindeutet, was sich negativ auf die Trendfortsetzung auswirken könnte. Sie können auch einen Schwellenwert für die Mindestausbruchspunkte festlegen.
- Die Ausstiegsregel wird durch Take Profit und Stop Loss definiert. Alternativ können Sie den Ausstiegslevel auf der Grundlage relevanter Schlüssel-Levels für beide Richtungen über einen bestimmten Rückblickszeitraum festlegen oder einen festen Ausstiegszeitpunkt festlegen.
Schlussfolgerung
In diesem Artikel habe ich meinen selbst entwickelten Ansatz zur Quantifizierung und Nutzung von inversen Fair Value Gaps als Strategie für MetaTrader 5 Expert Advisors vorgestellt und dabei die Motivation, Entwicklung und Prüfung der Strategie behandelt. Diese Strategie weist ein hohes Rentabilitätspotenzial auf, da sie in den letzten fünf Jahren mit mehr als 400 Handelsgeschäften eine konstante Performance erzielt hat. Weitere Änderungen können vorgenommen werden, um diese Strategie an verschiedene Wertpapiere und Zeiträume anzupassen. Der vollständige Code ist unten beigefügt, und Sie können ihn gerne in Ihre eigenen Handelsentwicklungen integrieren.
Übersetzt aus dem Englischen von MetaQuotes Ltd.
Originalartikel: https://www.mql5.com/en/articles/16659





- 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.