News-Filter in MT5: eingebauter Kalender oder API?
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-Kalender | Kalender-API von ShowMyTrades | |
|---|---|---|
| Einrichtung | Keine | https://showmytrades.com unter Extras → Optionen (Tools → Options) → Expert Advisors freigeben |
| Datenquelle | MetaQuotes, 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 bei | Brokern, die ihn freischalten (die meisten tun es, manche White-Label-Server nicht) | Jedem Broker, jedem Terminal mit Internetzugang |
| Funktioniert auch in MT4 | Nein | Ja, dieselbe Datei |
| Funktioniert im Strategietester (Strategy Tester) | Ja, mit Historie | Nein (kein Netzwerk im Tester) |
| Zeitzone | Zeit des Handelsservers, mit einem Versatz zu UTC, den du selbst ermitteln musst | UTC (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 |
| Werte | Prognose, Vorher, Aktuell, mit Revisionen | Prognose, Vorher, Aktuell |
| Kosten | Kostenlos | Kostenlos, 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.
//--- 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:
- Es hängt vom Broker ab. Der Kalender erreicht das Terminal über den Handelsserver. Liefert
CalendarValueHistory()bei deinem Broker-1mit Fehler5402, ist der Kalender dort nicht freigeschaltet, und daran ändert kein Code etwas. - Es ist Serverzeit, nicht UTC. Auf einem Live-Chart kein Problem. Mühsam wird es, sobald du mit irgendetwas anderem vergleichst.
- 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 Situation | Wahl |
|---|---|
| Nur MT5, der Broker hat den Kalender, du willst den Filter backtesten | Eingebaut |
| Derselbe EA für MT4 und MT5 | API: eine Datei, ein Verhalten |
Broker ohne Kalender (5402) | API |
| Du betreibst auch cBots in cTrader | API: dieselben Daten in cTrader |
| Du willst die News zusammen mit dem Trade protokollieren, um sie später auszuwerten | Beides 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
- So baust du einen News-Filter in deinen MT4-Expert-Advisor ein: die vollständige Include-Datei
- Referenz der Wirtschaftskalender-API: Parameter, Formate, Limits
- News-Filter in einen cTrader-cBot einbauen
- Was ist ein Expert Advisor?
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.
So baust du einen News-Filter in deinen MT4-Expert-Advisor ein
MetaTrader 4 bietet Expert Advisors keinen Wirtschaftskalender. Mit dieser Anleitung rüstest du ihn in zehn Minuten nach: eine kostenlose Kalender-API, eine Include-Datei und eine Funktion, die du vor jedem Einstieg aufrufst. Vollständiger MQL4-Code, kein API-Schlüssel.
News-Filter in einen cTrader-cBot einbauen (Cloud inklusive)
cTrader bietet cBots keine Kalender-API, und die cTrader Cloud blockiert HTTP-Anfragen. Dieser News-Filter funktioniert am Desktop und in der Cloud: mit einem kostenlosen Kalender über WebSocket und dem vollständigen C#-Code.