DAS PROBLEM
Die meisten Nachrichtenfilter greifen auf den MQL5-Wirtschaftskalender (CalendarValueHistory) zurück. Da dieser Kalender im Strategietester nicht vorhanden ist, bleiben diese Filter bei Backtests stillschweigend inaktiv: Der EA handelt direkt bei der Veröffentlichung von NFP-, CPI- oder Zinsentscheidungen, und der Backtest entspricht nicht mehr dem Live-Verhalten. In einem meiner Tests wurde eine Pending-Order auf XAUUSD 5 Minuten vor der Veröffentlichung des US-CPI ausgeführt, und der Stop-Loss wurde mit einem Slippage von 45 USD ausgelöst – ein einzelner Trade verlor das 6,5-Fache des geplanten Risikos.
Ein zweites, weniger bekanntes Problem: Das Terminal rechnet historische Kalenderzeiten mit dem AKTUELLEN Server-Offset um. Beim Export im Sommer bei einem Broker mit GMT+2 / GMT+3 erscheinen alle Winterereignisse eine Stunde zu spät (NFP um 16:30 Uhr statt um 15:30 Uhr Serverzeit). Ein auf diesen Zeiten basierender Filter blockiert die falsche Uhrzeit für die Hälfte des Jahres.
DIE LÖSUNG – DREI DATEIEN
NewsCalendarExport.mq5 (Skript) – exportiert die Ereignisse in „Terminal\Common\Files\NewsCalendar.csv“ und berechnet jedes Ereignis unter Berücksichtigung des Server-Offsets des jeweiligen Datums neu. Am Ende führt es eine Selbstprüfung durch: Die häufigste Uhrzeit von USD-Ereignissen muss im Winter und im Sommer identisch sein.
NewsFilter.mqh (Klasse CNewsFilter) – ein Filter sowohl für den Live-Handel als auch für Backtests. Im Live-Handel liest es den Wirtschaftskalender aus (maximal einmal pro Minute abgefragt); im Strategietester liest es die CSV-Datei ein. Es werden nur die Währungen des Symbols verwendet (EURUSD: EUR + USD, XAUUSD: USD, in USD notierte Index-CFDs: USD).
NewsFilter_Example.mq5 – ein minimalistischer EA, der anzeigt, wann ein Nachrichtenfenster beginnt und endet, und die gesperrten Fenster im Chart einblendet, sodass Sie die Funktionsweise des Filters im visuellen Modus des Testers sehen können.
ANWENDUNG
Kopieren Sie „NewsFilter.mqh“ in den Ordner „MQL5\Include“, „NewsCalendarExport.mq5“ in den Ordner „MQL5\Scripts“ und „NewsFilter_Example.mq5“ in den Ordner „MQL5\Experts“. Kompilieren Sie das Skript und das Beispiel (die .mqh-Datei wird dabei mitkompiliert).
Führen Sie NewsCalendarExport einmal auf einem beliebigen Chart eines verbundenen Terminals aus. Auf der Registerkarte „Experten“ sollte Folgendes angezeigt werden: „OK: gleiche Zeit im Winter und Sommer“.
Fügen Sie in Ihrem EA den folgenden Code ein:
C++
#include <NewsFilter.mqh>
CNewsFilter news;
int OnInit()
{
news.Init(_Symbol, 30, 30); // Block von 30 Minuten vor und nach jedem Ereignis
return(INIT_SUCCEEDED);
}
void OnTick()
{
if(news.IsBlocked())
return; // keine neuen Einträge während der Nachrichten
// ... deine Eintragslogik ...
}
Backtest wie gewohnt. Das Journal zeigt an, wie viele Ereignisse für das Symbol geladen wurden.
SKRIPT-EINGABEN
Ereignisse exportieren ab: Startdatum des Exports.
Exportiere auch geplante Ereignisse N Tage im Voraus: umfasst bevorstehende Ereignisse.
Währungen: durch Kommas getrennte Liste (Standard: USD, EUR, GBP, JPY, CAD, AUD, NZD, CHF).
Bedeutung: nur hohe Auswirkung oder mittlere + hohe Auswirkung.
DST-Regel des Broker-Servers: US-Regel (Standard, Server = New York + 7h, die meisten Broker mit GMT+2/+3), EU-Regel oder keine Sommerzeit.
Dateiname: wird unter „Terminal\Common\Files“ gespeichert.
CNewsFilter::Init(symbol, minutesBefore, minutesAfter, mediumToo = false, csvFile = "NewsCalendar.csv")
HINWEISE UND EINSCHRÄNKUNGEN
Getestet bei FTMO (GMT+2 / GMT+3, US-Sommerzeitregel) und bei IC Markets EU. Beispielausgabe: 5645 Ereignisse exportiert, davon 1897 um eine Stunde verschoben; vor der Korrektur war die häufigste USD-Zeit 16:30 Uhr im Winter und 15:30 Uhr im Sommer, nach der Korrektur 15:30 Uhr in beiden Jahreszeiten.
Sollte die Selbstprüfung weiterhin unterschiedliche Winter- und Sommerzeiten anzeigen, probieren Sie eine andere „Broker-Server-Sommerzeitregel“ aus.
Der MQL5-Kalenderverlauf ist begrenzt und hängt vom Terminal ab; auf meinem Terminal beginnt er im Jahr 2020, sodass ältere Backtests keine Ereignisse enthalten.
Es werden nur die Währungen des Symbols verwendet; bei Indizes und Rohstoffen entscheidet daher die Notierungswährung, welche Ereignisse gelten.
Remote- und Cloud-Agenten können „Common\Files“ nicht lesen – optimieren Sie daher mit lokalen Agenten.
Einige Währungen weisen im MQL5-Kalender nur sehr wenige Ereignisse mit hoher Auswirkung auf (z. B. AUD). Verwenden Sie für diese die Einstellung „Mittlere + hohe Auswirkung“.
Der Filter teilt Ihrem EA lediglich mit, wann er KEINE neuen Trades eröffnen soll. Die Verwaltung bereits offener Positionen obliegt Ihrem EA.
Führen Sie das Skript von Zeit zu Zeit erneut aus, um neue Ereignisse einzubeziehen.
BENÖTIGEN SIE HILFE BEI DER INTEGRATION?
Wenn Sie kein Programmierer sind und diesen Nachrichtenfilter in Ihren bestehenden EA integrieren möchten oder wenn Sie maßgeschneiderte Risikomanagementregeln benötigen, die auf die Bewertungen Ihrer Prop-Firma zugeschnitten sind, kontaktieren Sie mich direkt über mein MQL5-Freelancer-Profil. Ich programmiere das gerne für Sie!