Automatisierung·

News-Filter in MT5: eingebauter Kalender oder API?

MetaTrader 5 bringt einen Wirtschaftskalender mit, den Expert Advisors ohne Download auslesen können. Wann er reicht, wann nicht und wie du stattdessen eine kostenlose Kalender-API nutzt, mit MQL5-Code für beide Wege.

Wer Expert Advisors für MetaTrader 5 schreibt, hat eine Wahl, die MT4-Nutzer nicht haben: Das Terminal bringt einen Wirtschaftskalender mit, und MQL5 liest ihn mit einer Handvoll Funktionen aus. Kein Download, keine URL zum Freigeben, nichts zu parsen.

Warum also überhaupt eine externe API? Weil der eingebaute Kalender seine Grenzen hat, und drei davon sind für einen News-Filter entscheidend. Diese Anleitung zeigt zuerst den nativen Code, dann den Code für die API und am Ende, wann sich welcher Weg lohnt.

⚖️ Die beiden Optionen im Vergleich

Eingebauter MQL5-KalenderKalender-API von ShowMyTrades
EinrichtungKeinehttps://showmytrades.com unter Extras → Optionen (Tools → Options) → Expert Advisors freigeben
DatenquelleMetaQuotes, geliefert über den Server des BrokersÖffentliche Kalenderquellen, von ShowMyTrades zusammengeführt; die Termine der wichtigsten Veröffentlichungen werden mit den veröffentlichenden Behörden und Zentralbanken abgeglichen (confidence: official)
Verfügbar beiBrokern, die ihn freischalten (die meisten tun es, manche White-Label-Server nicht)Jedem Broker, jedem Terminal mit Internetzugang
Funktioniert auch in MT4NeinJa, dieselbe Datei
Funktioniert im Strategietester (Strategy Tester)Ja, mit HistorieNein (kein Netzwerk im Tester)
ZeitzoneZeit des Handelsservers, mit einem Versatz zu UTC, den du selbst ermitteln musstUTC (ts in Unix-Sekunden), und jede Antwort enthält die aktuelle UTC-Zeit des Servers: Der EA hängt nie von der Uhr des Brokers oder des VPS ab
WertePrognose, Vorher, Aktuell, mit RevisionenPrognose, Vorher, Aktuell
KostenKostenlosKostenlos, ohne Schlüssel

🧱 Option A: der eingebaute Kalender

Die folgende Funktion prüft, ob für eine der beiden Währungen des Chart-Symbols eine Veröffentlichung mit hoher Wichtigkeit im Pausenfenster liegt. Die Zeiten sind in der Zeit des Handelsservers angegeben, so wie CalendarValueHistory() sie erwartet.

NativeNewsFilter.mqh
//--- eingebauter MQL5-Kalender: true, solange eine Veröffentlichung mit hoher Wichtigkeit
//--- für die Währungen des Charts in [-minutesBefore, +minutesAfter] um jetzt liegt
bool NativeNewsTime(const int minutesBefore, const int minutesAfter, string &reason)
{
   reason = "";
   datetime now  = TimeTradeServer();
   datetime from = now - minutesAfter * 60;
   datetime to   = now + minutesBefore * 60;

   string currencies[2];
   currencies[0] = SymbolInfoString(_Symbol, SYMBOL_CURRENCY_BASE);
   currencies[1] = SymbolInfoString(_Symbol, SYMBOL_CURRENCY_PROFIT);

   for(int c = 0; c < 2; c++)
   {
      if(c == 1 && currencies[1] == currencies[0]) break;
      MqlCalendarValue values[];
      if(CalendarValueHistory(values, from, to, NULL, currencies[c]) <= 0) continue;
      for(int i = 0; i < ArraySize(values); i++)
      {
         MqlCalendarEvent ev;
         if(!CalendarEventById(values[i].event_id, ev)) continue;
         if(ev.importance != CALENDAR_IMPORTANCE_HIGH) continue;
         reason = currencies[c] + ": " + ev.name;
         return true;
      }
   }
   return false;
}

Aufgerufen wird sie in OnTick() genau wie jeder andere Filter:

string news;
if(NativeNewsTime(30, 30, news)) { Comment("News filter: ", news); return; }

Drei Dinge solltest du wissen, bevor du dich darauf verlässt:

  1. Es hängt vom Broker ab. Der Kalender erreicht das Terminal über den Handelsserver. Liefert CalendarValueHistory() bei deinem Broker -1 mit Fehler 5402, ist der Kalender dort nicht freigeschaltet, und daran ändert kein Code etwas.
  2. Es ist Serverzeit, nicht UTC. Auf einem Live-Chart kein Problem. Mühsam wird es, sobald du mit irgendetwas anderem vergleichst.
  3. Es gibt ihn nur in MT5. Ein EA, den du auch für MT4 anbietest, braucht eine zweite Implementierung.

🌐 Option B: die Kalender-API

Die Alternative ist ein kostenloser HTTP-Endpunkt. Er liefert die News der nächsten Tage für die Währungen und die Wichtigkeit deiner Wahl, als CSV oder JSON:

https://showmytrades.com/api/public/calendar/v1?currency=EUR,USD&impact=high&days=2&format=csv

Die Include-Datei SMT_NewsFilter.mqh, die ihn ausliest, steht vollständig in der MT4-Anleitung und in der API-Referenz. Sie lässt sich in MQL5 unverändert kompilieren: Speichere sie in MQL5\Include, gib https://showmytrades.com unter Extras → Optionen → Expert Advisors frei und ruf sie so auf:

#include <SMT_NewsFilter.mqh>

void OnTick()
{
   string news;
   if(SMT_IsNewsTime(news)) { Comment("News filter active: ", news); return; }
   Comment("");
   // ... deine Einstiegslogik ...
}

Die Datei lädt die Termine alle 15 Minuten einmal herunter und vergleicht in UTC mit TimeGMT(); die Eingabeparameter (SMT_Currencies, SMT_Impact, Minuten davor und danach) stehen im Einstellungsdialog des EA.

🎯 Welche Option passt

Deine SituationWahl
Nur MT5, der Broker hat den Kalender, du willst den Filter backtestenEingebaut
Derselbe EA für MT4 und MT5API: eine Datei, ein Verhalten
Broker ohne Kalender (5402)API
Du betreibst auch cBots in cTraderAPI: dieselben Daten in cTrader
Du willst die News zusammen mit dem Trade protokollieren, um sie später auszuwertenBeides geht; die API liefert UTC-Zeitstempel, die zu deinen übrigen Logs passen

Nichts spricht dagegen, beide zu nutzen: den eingebauten Kalender, wenn er antwortet, und die API, wenn nicht. In der Praxis reicht einer.

🧪 Einen News-Filter backtesten

Von den beiden funktioniert nur der eingebaute Kalender im Strategietester, denn der Tester hat kein Internet. Aber auch dort solltest du genau hinsehen, was der Backtest eines News-Filters eigentlich beweist: Der Test nutzt den Kalender so, wie er heute bekannt ist, mit korrigierten Uhrzeiten und mit Terminen, die erst nachträglich eingetragen wurden. Ein Filter im Live-Betrieb kennt nur, was zum jeweiligen Zeitpunkt angesetzt war.

❓ Häufige Fragen

Ist der eingebaute MT5-Kalender kostenlos? Ja. Er gehört zum Terminal und kommt über den Server deines Brokers; auf deiner Seite musst du nichts aktivieren.

Warum liefert CalendarValueHistory() bei meinem Broker nichts? Manche Server, oft White-Label-Server, reichen den Kalender nicht weiter. Prüfe GetLastError(): 5402 heißt, dass der Kalender nicht verfügbar ist. Nimm in diesem Fall die API.

Kann ich nach den Währungen eines anderen Symbols filtern? Ja. Übergib die gewünschten Währungscodes, statt sie aus _Symbol zu lesen. Die API-Version nimmt sie als Eingabestring entgegen: EUR,USD,GBP.

Braucht die API ein Konto? Nein. Kein Schlüssel, keine Anmeldung. Das Limit liegt bei 600 Anfragen pro Minute und IP-Adresse, weit mehr, als beliebig viele Charts mit je einer Anfrage alle 15 Minuten brauchen.

🔗 Weiterführende Artikel


Für welchen Kalender du dich auch entscheidest, das Ergebnis zeigt sich im Track Record: weniger Trades, die mitten in einen Kurssprung hinein eröffnet werden, und ein ruhigerer Drawdown. Verfolge dein MT5-Konto kostenlos und sieh es selbst im Chart.