Filtro de noticias en MT5: ¿calendario integrado o API?
Si programas Expert Advisors para MetaTrader 5, tienes una opción que en MT4 no existe: el terminal trae un calendario económico y MQL5 lo lee con un puñado de funciones. Nada que descargar, ninguna URL que autorizar, nada que interpretar.
Entonces, ¿para qué usar una API externa? Porque el calendario integrado tiene sus límites, y tres de ellos pesan en un filtro de noticias. Esta guía muestra primero el código nativo, después el de la API y, al final, cuándo conviene cada uno.
⚖️ Las dos opciones, cara a cara
| Calendario integrado de MQL5 | API del calendario de ShowMyTrades | |
|---|---|---|
| Configuración | Ninguna | Autorizar https://showmytrades.com en Herramientas → Opciones → Asesores Expertos (Tools → Options → Expert Advisors) |
| Fuente de los datos | MetaQuotes, a través del servidor del bróker | Fuentes públicas de calendario combinadas por ShowMyTrades, con las fechas de las publicaciones principales contrastadas con los organismos que las publican y con los bancos centrales (confidence: official) |
| Disponible en | Los brókeres que lo activan (la mayoría; algunos servidores de marca blanca no) | Cualquier bróker y cualquier terminal con internet |
| Funciona también en MT4 | No | Sí, con el mismo archivo |
| Funciona en el probador de estrategias (Strategy Tester) | Sí, con historial | No (en el probador no hay red) |
| Zona horaria | Hora del servidor de trading, con un desfase respecto a UTC que tienes que averiguar | UTC (ts en segundos Unix), y cada respuesta incluye la hora UTC actual del servidor, así que el EA nunca depende del reloj del bróker ni del VPS |
| Valores | Previsión, anterior y actual, con revisiones | Previsión, anterior y actual |
| Costo | Gratis | Gratis, sin clave |
🧱 Opción A: el calendario integrado
La función siguiente indica si hay una publicación de impacto alto de cualquiera de las dos divisas del símbolo del gráfico dentro de la ventana de pausa. Las horas van en hora del servidor de trading, que es lo que espera CalendarValueHistory().
//--- calendario integrado de MQL5: true mientras una publicación de impacto alto de las
//--- divisas del gráfico esté dentro de [-minutesBefore, +minutesAfter] desde ahora
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;
}
Llámala desde OnTick() igual que cualquier otro filtro:
string news;
if(NativeNewsTime(30, 30, news)) { Comment("News filter: ", news); return; }
Tres cosas que conviene saber antes de confiar en él:
- Depende del bróker. El calendario llega al terminal a través del servidor de trading. Si en tu bróker
CalendarValueHistory()devuelve-1con el error5402, el calendario no está activado ahí, y ningún código lo va a arreglar. - Va en hora del servidor, no en UTC. En un gráfico en vivo no da problemas. Se complica cuando lo comparas con cualquier otra cosa.
- Es solo para MT5. Un EA que también distribuyes para MT4 necesita una segunda implementación.
🌐 Opción B: la API del calendario
La alternativa es un endpoint HTTP gratuito que devuelve las noticias de los próximos días para las divisas y el impacto que elijas, en CSV o JSON:
https://showmytrades.com/api/public/calendar/v1?currency=EUR,USD&impact=high&days=2&format=csv
El archivo include SMT_NewsFilter.mqh que lee estos datos aparece completo en la guía de MT4 y en la referencia de la API. Compila tal cual en MQL5: guárdalo en MQL5\Include, autoriza https://showmytrades.com en Herramientas → Opciones → Asesores Expertos y llama a la función:
#include <SMT_NewsFilter.mqh>
void OnTick()
{
string news;
if(SMT_IsNewsTime(news)) { Comment("News filter active: ", news); return; }
Comment("");
// ... tu lógica de entrada ...
}
El archivo descarga los datos una vez cada 15 minutos, compara en UTC con TimeGMT() y deja los parámetros de entrada (SMT_Currencies, SMT_Impact, minutos antes y después) en la ventana de configuración del EA.
🎯 Cuál elegir
| Tu situación | Elige |
|---|---|
| Solo MT5, tu bróker tiene el calendario y haces backtest del filtro | Integrado |
| El mismo EA para MT4 y MT5 | API: un solo archivo y un mismo comportamiento |
Bróker sin calendario (5402) | API |
| También usas cBots en cTrader | API: los mismos datos en cTrader |
| Quieres registrar la noticia junto con la operación para revisarla después | Cualquiera de los dos; la API da marcas de tiempo en UTC que coinciden con el resto de tus registros |
Nada te impide usar los dos: el calendario integrado cuando responde y la API cuando no. En la práctica, con uno basta.
🧪 Backtest de un filtro de noticias
El calendario integrado es el único de los dos que funciona en el probador de estrategias, porque el probador no tiene internet. Aun así, ten cuidado con lo que demuestra el backtest de un filtro de noticias: la prueba usa el calendario tal como se conoce hoy, con las horas ya revisadas y con eventos que se agregaron a posteriori. Un filtro en real solo sabe lo que estaba programado en ese momento.
❓ Preguntas frecuentes
¿El calendario integrado de MT5 es gratis? Sí. Forma parte del terminal, llega a través del servidor de tu bróker y no tienes que activar nada por tu parte.
¿Por qué CalendarValueHistory() no devuelve nada en mi bróker?
Algunos servidores, a menudo los de marca blanca, no transmiten el calendario. Revisa GetLastError(): 5402 significa que el calendario no está disponible. En ese caso, usa la API.
¿Puedo filtrar por las divisas de otro símbolo?
Sí. Pasa los códigos de divisa que quieras en lugar de leerlos de _Symbol. La versión con API los recibe como texto en un parámetro de entrada: EUR,USD,GBP.
¿La API necesita una cuenta? No. Ni clave ni inicio de sesión. El límite es de 600 solicitudes por minuto por dirección IP, muy por encima de lo que necesita cualquier cantidad de gráficos con una solicitud cada 15 minutos.
🔗 Artículos relacionados
- Cómo agregar un filtro de noticias a tu Expert Advisor de MT4: el archivo include completo
- Referencia de la API del calendario económico: parámetros, formatos y límites
- Cómo agregar un filtro de noticias a un cBot de cTrader
- Qué es un Expert Advisor
Elijas el calendario que elijas, el resultado se nota en el historial: menos operaciones abiertas en pleno pico de volatilidad y un drawdown más suave. Haz seguimiento gratis de tu cuenta MT5 y compruébalo en el gráfico.
Cómo agregar un filtro de noticias a tu Expert Advisor de MT4
MetaTrader 4 no ofrece un calendario económico a los Expert Advisors. Esta guía te enseña a agregarlo en diez minutos: una API de calendario gratuita, un archivo include y una función que llamas antes de cada entrada. Código MQL4 completo, sin clave de API.
Cómo agregar un filtro de noticias a un cBot de cTrader (también en la nube)
cTrader no ofrece a los cBots ninguna API de calendario, y cTrader Cloud bloquea las solicitudes HTTP. Aquí tienes un filtro de noticias que funciona en el escritorio y en la nube, con un calendario gratuito por WebSocket y el código C# completo.