Diskussion zum Artikel "Verwendung des MQL5-Wirtschaftskalenders zur Nachrichtenfilterung (Teil 2): Verwaltung von Stopps offener Positionen während Nachrichtenereignissen"

 

Neuer Artikel Verwendung des MQL5-Wirtschaftskalenders zur Nachrichtenfilterung (Teil 2): Verwaltung von Stopps offener Positionen während Nachrichtenereignissen :

In Teil 2 erweitern wir den Nachrichtenfilter, um bestehende Positionen während Nachrichtenereignissen zu schützen. Anstatt Trades zu schließen, entfernen wir die Werte von Stop-Loss und Take-Profit vorübergehend und speichern sie sicher im Speicher. Wenn das Nachrichtenfenster endet, werden die Stopps deterministisch unter Einhaltung der Mindestabstände des Brokers wiederhergestellt und angepasst, falls der Kurs die ursprünglichen Niveaus bereits überschritten hat. Das Ergebnis ist ein Mechanismus, der die Handelslogik wahrt, ohne die Einstiegslogik zu beeinträchtigen, und dafür sorgt, dass der EA auch bei Volatilität die Kontrolle behält.

Das Ziel von Teil 2 ist klar definiert: Stop-Loss- und Take-Profit-Werte sollen während des Sperrfensters rund um Nachrichten vorübergehend ausgesetzt und nach Ablauf dieses Nachrichtenfensters sicher wiederhergestellt werden.

Dieser Ansatz versucht nicht, die Marktrichtung auf Basis der Nachrichten zu interpretieren. Er verhindert lediglich vorzeitige Stop-outs, die durch außergewöhnliche Marktbedingungen verursacht werden.

Grundsätze der Stop-Wiederherstellung

Die Wiederherstellungslogik ist deterministisch:

  • Wenn der Kurs das ursprünglich gespeicherte Stop-Loss- oder Take-Profit-Niveau nicht überschritten hat, wird der Stop genau auf seinen ursprünglichen Wert wiederhergestellt.
  • Wenn der Kurs das ursprüngliche Stop-Loss-Niveau bereits überschritten hat, wird der Stop auf das nächstgelegene gültige Niveau unmittelbar vor dem aktuellen Kurs wiederhergestellt.
  • Die gleiche Logik gilt auch für Take-Profit-Niveaus.

Dies gewährleistet:

  • keine ungültige Stop-Platzierung,
  • keine Ablehnung durch den Broker aufgrund bereits überschrittener Preisniveaus,
  • keine Wiederherstellung logisch unmöglicher Werte und
  • Beibehaltung der ursprünglichen Handelsstruktur, soweit dies technisch machbar ist.

Der Mechanismus basiert weiterhin auf Regeln.


Autor: Solomon Anietie Sunday

 

So möchte ich diese Funktionen nutzen:

Ich beabsichtige, den Artikel „Teil 1 – Verhindern der Eröffnung neuer Trades oder des Schließens bestehender Trades während des eingeschränkten Nachrichtenfensters“ auf alle meine EAs anzuwenden, die ich bei Prop-Firmen laufen habe.

Teil 2 und Teil 3 – das Entfernen von SL/TP und das anschließende Ersetzen von SL/TP vor bzw. nach dem eingeschränkten Nachrichtenfenster – möchte ich jedoch in einem separaten EA verwenden. Da dieser Code alle offenen Positionen des Kontos durchläuft, habe ich möglicherweise mehr als ein Chart geöffnet und möchte diesen Vorgang nicht öfter als nötig ausführen. Ich werde die Symbolauswahl manuell auf „USD, GBP, EUR“ festlegen, da dies die einzigen Nachrichten im roten Ordner sind, von denen ich aus Erfahrung weiß, dass ich sie bereits herausfiltern muss (bei dir wird das anders sein).

Daher habe ich eine einzeilige Änderung an der Funktion „RestoreStops()“ vorgenommen.

Die Funktion „SuspendStops()“ musste nicht geändert werden.

So wie es aussieht, muss ich an Teil 3 nichts ändern, da ich lediglich die Ticketnummer, SL und TP benötige.

Vielen Dank, @Solomon Anietie Sunday

Ich werde es live auf dem Demokonto testen!

// I won't need this if statement, in the 2nd EA, as the 2nd EA only modifies trades, 
// only need this is statement in the first EA (that opens trades)

if(!CanOpenNewTrade(_Symbol))
    return;
 
//+------------------------------------------------------------------+
//| Wiederaufnahme der Sendepausen nach den Nachrichten (bearbeiteter Artikel – siehe Original)      |
//+------------------------------------------------------------------+
bool RestoreStops(ulong ticket, double sl, double tp)
{
    if (!PositionSelectByTicket(ticket))
      return(false);
    string   symbol= PositionGetString(POSITION_SYMBOL);  // Die ursprüngliche Variable „_Symbol“ wurde durch „symbol“ ersetzt
    ENUM_POSITION_TYPE type = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);
    double price = (type == POSITION_TYPE_BUY) ?
        SymbolInfoDouble(symbol, SYMBOL_BID) :  //z. B. „_Symbol“ heißt nun „symbol“
        SymbolInfoDouble(symbol, SYMBOL_ASK);
        
    double point = SymbolInfoDouble(symbol, SYMBOL_POINT);
    
    double minStopDist = SymbolInfoInteger(symbol, SYMBOL_TRADE_STOPS_LEVEL) * point;

    // Sicherheitsprüfung: Wenn der Kurs die gespeicherten SL/TP-Werte überschritten hat, passe sie auf ein gültiges Niveau an
    if(type == POSITION_TYPE_BUY)
    {
        if(sl != 0 && price <= sl)
            sl = price - minStopDist;
        if(tp != 0 && price >= tp)
            tp = price + minStopDist;
    }
    else // VERKAUFEN
    {
        if(sl != 0 && price >= sl)
            sl = price + minStopDist;
        if(tp != 0 && price <= tp)
            tp = price - minStopDist;
    }

    // Vollständige Wiederherstellung der Register 
    if(trade.PositionModify(ticket, sl, tp))
    {
        PrintFormat("Restored SL/TP for #%I64u | SL=%.5f, TP=%.5f", ticket, sl, tp);
        return true;
    }
    else
    {
        PrintFormat("Failed to restore SL/TP for #%I64u | Error=%d", ticket, GetLastError());
        return false;
    }
}
Discussing the article: "Using the MQL5 Economic Calendar for News Filtering (Part 1): Implementing Pre- and Post-News Windows in MQL5"
Discussing the article: "Using the MQL5 Economic Calendar for News Filtering (Part 1): Implementing Pre- and Post-News Windows in MQL5"
  • 2026.02.18
  • www.mql5.com
Check out the new article: Using the MQL5 Economic Calendar for News Filtering (Part 1): Implementing Pre- and Post-News Windows in MQL5...
 
Ja!, das ist ein sehr effektiver Ansatz. Sie können auch eine „magische Zahl“ verwenden, um bestimmte EAs zu blockieren. Sich jedoch auf die drei wichtigsten Instrumente zu konzentrieren, mit denen Sie handeln – insbesondere auf diejenigen mit der höchsten Volatilität –, kann eine wirksame Methode sein, um Ihr gesamtes Portfolio zu schützen.
Die Umsetzung in dieser Artikelserie kann bei korrekter Durchführung sehr flexibel und individuell anpassbar sein.
Das Testen kann anhand historischer Daten (Backtest) erfolgen, ist jedoch knifflig und erfordert einigen Aufwand. Ich werde versuchen, dies in einem kommenden Artikel für diejenigen bereitzustellen, die Backtests mit Nachrichtenereignissen durchführen möchten.

Gern geschehen, Philip. Ich stehe dir jederzeit zur Verfügung, wenn du etwas zum Thema algorithmischer Handel besprechen möchtest.

Meine Antwort kommt etwas verspätet, ich bin manchmal sehr beschäftigt … entschuldige bitte.