EL PROBLEMA
La mayoría de los filtros de noticias consultan el calendario económico de MQL5 (CalendarValueHistory). Ese calendario no existe en el Probador de Estrategias, por lo que esos filtros no hacen nada de forma silenciosa en las pruebas retrospectivas: el EA opera directamente en los datos de empleo (NFP), el IPC o las decisiones sobre tipos de interés, y la prueba retrospectiva ya no se corresponde con el comportamiento en tiempo real. En una de mis pruebas, una orden pendiente sobre el XAUUSD se ejecutó 5 minutos antes de la publicación del IPC de EE. UU. y el stop loss se activó con un deslizamiento de 45 USD: una sola operación supuso una pérdida de 6,5 veces el riesgo previsto.
Un segundo problema, menos conocido: la terminal convierte las horas históricas del calendario según el desfase horario ACTUAL del servidor. Al exportar en verano con un bróker en GMT+2 / GMT+3, todos los eventos de invierno aparecen con una hora de retraso (el NFP a las 16:30 en lugar de a las 15:30, hora del servidor). Un filtro basado en esos horarios bloquea la hora incorrecta durante la mitad del año.
LA SOLUCIÓN: TRES ARCHIVOS
NewsCalendarExport.mq5 (script): exporta los eventos a Terminal\Common\Files\NewsCalendar.csv y recalcula cada evento con el desfase horario del servidor correspondiente a su propia fecha. Al final, muestra una comprobación automática: la hora más frecuente de los eventos del USD debe ser idéntica tanto en invierno como en verano.
NewsFilter.mqh (clase CNewsFilter): un filtro tanto para el trading en tiempo real como para las pruebas retrospectivas. En tiempo real, lee el calendario económico (consultado como máximo una vez por minuto); en el Strategy Tester, lee el archivo CSV. Solo se utilizan las divisas del símbolo (EURUSD: EUR + USD, XAUUSD: USD, CFD sobre índices cotizados en USD: USD).
NewsFilter_Example.mq5: un EA mínimo que muestra un mensaje cuando comienza y termina una ventana de noticias, y pinta las ventanas bloqueadas en el gráfico, para que puedas ver cómo funciona el filtro en el modo visual del Strategy Tester.
CÓMO UTILIZARLO
Copia NewsFilter.mqh en MQL5\Include, NewsCalendarExport.mq5 en MQL5\Scripts y NewsFilter_Example.mq5 en MQL5\Experts. Compila el script y el ejemplo (el archivo .mqh se compila junto con ellos).
Ejecuta NewsCalendarExport una vez, en cualquier gráfico de un terminal conectado. En la pestaña «Expertos» deberías ver: «OK: misma hora en invierno y en verano».
En su EA, añada el siguiente código:
C++
#include <NewsFilter.mqh>
CNewsFilter news;
int OnInit()
{
news.Init(_Symbol, 30, 30); // bloquea 30 minutos antes y después de cada evento
return(INIT_SUCCEEDED);
}
void OnTick()
{
if(news.IsBlocked())
return; // no hay nuevas entradas durante las noticias
// ... tu lógica de entrada ...
}
Realiza el backtest como de costumbre. El diario muestra cuántos eventos se han cargado para el símbolo.
ENTRADAS DEL SCRIPT
Exportar eventos desde: fecha de inicio de la exportación.
Exportar también eventos programados con N días de antelación: incluye los próximos eventos.
Divisas: lista separada por comas (por defecto: USD, EUR, GBP, JPY, CAD, AUD, NZD, CHF).
Importancia: solo de alto impacto, o de impacto medio y alto.
Regla de horario de verano del servidor del bróker: regla de EE. UU. (por defecto, servidor = Nueva York + 7 h, la mayoría de los brókers GMT+2/+3), regla de la UE o sin horario de verano.
Nombre del archivo: se guarda en Terminal\Common\Files.
CNewsFilter::Init(symbol, minutesBefore, minutesAfter, mediumToo = false, csvFile = "NewsCalendar.csv")
NOTAS Y LIMITACIONES
Probado en FTMO (GMT+2 / GMT+3, regla de horario de verano de EE. UU.) y en IC Markets UE. Ejemplo de resultado: 5645 eventos exportados, 1897 de ellos desplazados una hora; antes de la corrección, la hora más frecuente para el USD era las 16:30 en invierno y las 15:30 en verano; tras la corrección, las 15:30 en ambas estaciones.
Si la autocomprobación sigue mostrando horarios diferentes para invierno y verano, prueba con otra «regla de horario de verano del servidor del bróker».
El historial del calendario de MQL5 es limitado y depende de la terminal; en mi terminal comienza en 2020, por lo que las pruebas retrospectivas más antiguas no contendrán ningún evento.
Solo se utilizan las divisas del símbolo, por lo que, en el caso de los índices y las materias primas, la divisa de cotización determina qué eventos se aplican.
Los agentes remotos y en la nube no pueden leer la carpeta «Common\Files»; optimiza el sistema con agentes locales.
Algunas divisas tienen muy pocos eventos de alto impacto en el calendario de MQL5 (el AUD, por ejemplo). Utiliza «Impacto medio + alto» para ellas.
El filtro solo indica a tu EA cuándo NO debe abrir nuevas operaciones. La gestión de las posiciones ya abiertas depende de tu EA.
Vuelve a ejecutar el script de vez en cuando para incluir nuevos eventos.
¿NECESITAS AYUDA PARA INTEGRARLO?
Si no eres programador y quieres integrar este filtro de noticias en tu EA actual, o si necesitas reglas de gestión de riesgo personalizadas adaptadas a las evaluaciones de tu empresa de inversión, ponte en contacto conmigo directamente a través de mi perfil de autónomo en MQL5. ¡Estaré encantado de programarlo para ti!