De novato a experto: Noticias animadas utilizando MQL5 (V) Sistema de recordatorio de eventos
Índice:
Introducción
Las noticias económicas de gran repercusión pueden provocar fuertes oscilaciones en los precios, lo que en ocasiones genera grandes beneficios y, en otras, pilla desprevenidos a los traders con pérdidas repentinas. Nuestro EA News Headline ya te ofrece una ventaja al mostrar los próximos eventos, señales/análisis de indicadores técnicos y comentarios generados por IA directamente en el gráfico, para que no tengas que cambiar de ventana. Pero seamos realistas: nadie quiere pasarse todo el día pegado a la pantalla esperando la próxima publicación de datos.
Para que este flujo de trabajo resulte realmente práctico, estamos dando un paso más al integrar un sistema de alertas inteligente que le avisará de forma proactiva momentos antes de cada evento importante. De esta forma, podrás centrarte en tu estrategia, con la seguridad de que no te perderás ninguna noticia importante cuando más te interese.
Dado que esta serie está pensada tanto para desarrolladores con experiencia como para quienes se inician en MetaTrader 5, hemos reunido todo el material relacionado con las notificaciones en una sección específica. Aquí analizaremos en detalle las funciones de alerta integradas en la plataforma, desde ventanas emergentes en pantalla y sonidos hasta notificaciones push en tu teléfono, para que pueda personalizar los recordatorios oportunos según tu estilo de trading.
En este debate, analizaremos las limitaciones actuales de nuestro EA «News Headline» y, al mismo tiempo, te proporcionaremos los conocimientos necesarios para integrar las alertas de MQL5 en cualquier proyecto en el que estés trabajando. En la siguiente sección, analizaremos con detalle cómo funcionan exactamente las alertas de MQL5 y explicaremos nuestro plan para integrarlas a la perfección en el EA. Una vez sentadas estas bases, estarás listo para pasar con confianza a la implementación del código.
Concepto
En esta sección, analizaremos en primer lugar las funciones que ofrece MQL5 en materia de alertas y comentaremos el plan de integración. En el siguiente párrafo, descubre cómo funcionan las alertas en MetaTrader 5.
Comprender las alertas en MQL5
Las alertas son una función esencial de MetaTrader 5, diseñada para llamar la atención del operador cuando se producen acontecimientos o condiciones importantes en el mercado, como el alcance de niveles de precios específicos, la activación de señales de indicadores o la ejecución de operaciones. Por defecto, las alertas de la plataforma MetaTrader 5 se gestionan a través de la pestaña «Caja de herramientas > Alertas», donde los usuarios pueden configurar las condiciones básicas de las alertas.
Sin embargo, MQL5 ofrece potentes funciones para crear alertas personalizadas, entre las que se incluyen Alert(), PlaySound(), SendMail() y SendNotification(). Estas funciones generan ventanas emergentes, señales sonoras y mensajes que se pueden recibir tanto en los terminales de MetaTrader 5 de escritorio como en los móviles. Aunque no utilices una función de alerta explícita, puedes registrar eventos importantes mediante Print() para enviar mensajes a la pestaña «Diario».
Es posible lograr una mayor integración ampliando el mecanismo nativo Alert() para que funcione con servicios de notificación externos, como Telegram, Discord y otros, mediante llamadas a la API. Aunque en el debate de hoy no se profundiza en esas integraciones externas, ya se han tratado en algunas de nuestras sesiones anteriores.
En cambio, hoy nos centraremos en comprender cómo utilizar las alertas de forma eficaz en el contexto del trading con noticias, donde la rapidez y la visibilidad de la información son fundamentales para la toma de decisiones.
La tabla siguiente ofrece una descripción de las funciones de alerta disponibles en MQL5, junto con una explicación de cómo se puede adaptar y aplicar cada una de ellas de forma eficaz en el contexto de este proyecto.
| Función | Descripción | Adaptabilidad a «News Headline EA» |
|---|---|---|
| Alert() | Muestra un cuadro de diálogo emergente con un mensaje en la terminal MetaTrader 5. Interrumpe al usuario con información inmediata en pantalla y, además, registra el mensaje en el registro de Expertos. | Es ideal para notificar a los traders sobre eventos inminentes de gran repercusión o cambios repentinos detectados por el EA, lo que garantiza que se capte la atención del usuario incluso durante las sesiones de trading en tiempo real. |
| PlaySound() | Reproduce un archivo de sonido personalizado (formato WAV) en el terminal de escritorio. Es útil para emitir una señal sonora sin que el usuario tenga que mirar la pantalla. | Es ideal para añadir una señal sonora cuando aparecen nuevos titulares de noticias, señales de indicadores o análisis de IA en el EA, lo que ayuda a los traders a mantenerse informados incluso mientras realizan varias tareas a la vez. |
| SendMail() | Envía un mensaje de correo electrónico a través del servidor SMTP configurado en las opciones de MetaTrader 5. El correo electrónico puede incluir un asunto y un cuerpo con los datos relevantes de la operación. | Resulta útil para enviar resúmenes detallados de noticias o alertas sobre acontecimientos de gran repercusión a los traders que prefieren recibir actualizaciones fuera de la plataforma, especialmente cuando se encuentran fuera de su puesto de trabajo. |
| SendNotification() | Envía una notificación push a la aplicación móvil de MetaTrader 5, lo que permite a los traders recibir mensajes concisos en sus teléfonos inteligentes o tabletas en tiempo real. | Es ideal para notificar al instante a los traders sobre acontecimientos críticos, noticias importantes o conclusiones significativas de la IA detectadas por el EA, garantizando que permanezcan conectados independientemente de su ubicación física. |
Según se desprende de la tabla anterior, las opciones que ofrecen una respuesta inmediata, como las alertas emergentes y los sonidos en la terminal, resultan especialmente valiosas, ya que queremos recibir notificaciones con antelación sobre los próximos eventos para poder prepararnos a tiempo. En este contexto, las alertas en la terminal tendrán mayor prioridad, mientras que SendMail() y SendNotification() se utilizarán como opciones secundarias. Aunque el correo electrónico y las notificaciones push conllevan un ligero retraso debido a la transmisión de los mensajes, este suele ser mínimo; no obstante, es importante tenerlo en cuenta cuando el tiempo es un factor crítico.
Capacidad de ampliación
Como se ha mencionado anteriormente, podemos ampliar las capacidades del EA para admitir notificaciones externas en otras plataformas mediante la integración de API. Esto implica crear funciones personalizadas que recopilen los detalles de las alertas y los transmitan mediante WebRequest a servidores externos, lo que permite la comunicación y el envío de notificaciones a través de servicios como Slack, Telegram, pasarelas SMS o aplicaciones web personalizadas. Este enfoque hace que el EA News Headline sea muy flexible y capaz de integrarse a la perfección en diversos flujos de trabajo de trading y ecosistemas de notificaciones.
Plan de integración
Hoy nos centraremos principalmente en la implementación de alertas para próximos eventos de noticias, diseñadas para activarse con una antelación predefinida para cada evento. Hay tres categorías fundamentales de alertas de noticias, que se corresponden con los niveles de impacto de las noticias: alto, medio y bajo. Por ahora, nos centraremos exclusivamente en gestionar las alertas relacionadas con estas noticias y dejaremos de lado otras funciones del EA. Es importante señalar que no todas las noticias tienen por qué generar una alerta; por el contrario, queremos ofrecer a los traders la flexibilidad de elegir los niveles de impacto sobre los que desean recibir notificaciones, así como el tiempo, en minutos, con el que desean ser avisados antes de que se produzca cada evento.
Implementación
Paso 1: Configuración de los parámetros de entrada
La integración comienza definiendo todos los ajustes relacionados con las alertas en un solo lugar: controles generales para las alertas y las notificaciones push, controles independientes para los niveles de impacto alto, medio y bajo, y el parámetro «minutos antes». Esta configuración centralizada no solo simplifica la interfaz de usuario —los traders pueden personalizar exactamente qué eventos activan las ventanas emergentes o las notificaciones push—, sino que también mantiene la lógica condicional del EA optimizada. Al iniciarse, el EA lee estos datos de entrada y, a continuación, se limita a comprobar cada uno de ellos antes de activar cualquier alerta, evitando así el uso de valores fijos o indicadores ocultos en el código.
//--- ALERT INPUTS --------------------------------------------------- input bool InpEnableAlerts = true; //Enable Alerts input bool InpAlertHigh = true; //High Impact Alerts input bool InpAlertMed = false; // Medium Impact Alerts input bool InpAlertLow = false; // Low Impact Alerts input int InpAlertMinutesBefore = 5; //Alert Minutes Before Event //--- PUSH NOTIFICATIONS INPUTS ------------------------------------- input bool InpEnablePush = false; //Enable Push Notifications input bool InpPushHigh = true; //High Impact Push input bool InpPushMed = false; //Medium Impact Push input bool InpPushLow = false; //Low impact Push
Paso 2: Seguimiento del estado de los eventos
Cada evento del calendario se encapsula en un objeto CEvent que contiene su propio valor booleano «alerted», inicializado en «false». Cuando el programa determina que es el momento de enviar una notificación, el propio EA llama a Alert() (para la ventana emergente en pantalla) y, si está habilitada, a SendNotification() (para la notificación push en dispositivos móviles), y a continuación establece inmediatamente el indicador de alerta de ese evento en «true». Este patrón evita los duplicados sin necesidad de recurrir a estructuras de consulta externas. Una advertencia: actualiza siempre el estado de tu evento inmediatamente después de activar la notificación para garantizar que solo se envíe una alerta por evento.
// Event storage class CEvent : public CObject { public: datetime time; string sym, name; int imp; bool alerted; CEvent(datetime t,const string &S,const string &N,int I) { time = t; sym = S; name = N; imp = I; alerted = false; } };
Paso 3: Lógica de envío de notificaciones
Todo el envío de notificaciones se realiza dentro de CheckAndAlertEvents(), que se ejecuta en cada ciclo del temporizador. La rutina comprueba primero el interruptor de alerta principal, calcula un instante límite (now + minutesBefore * 60) y, a continuación, recorre sucesivamente las matrices de impacto alto, medio y bajo. Cuando detecta un evento que aún no ha sido notificado, que se encuentra dentro del plazo establecido y que se ajusta a los niveles de impacto seleccionados por el usuario, el EA elabora un mensaje conciso y activa las llamadas de notificación. Centralizar esta lógica facilita la incorporación de canales alternativos —como el correo electrónico o los SMS— mediante la ampliación de esta única función, en lugar de modificar múltiples partes del EA.
//+------------------------------------------------------------------+ //| CheckAndAlertEvents: popups and optional push | //+------------------------------------------------------------------+ void CheckAndAlertEvents() { if(!InpEnableAlerts) return; datetime now = TimeTradeServer(); datetime threshold = now + InpAlertMinutesBefore * 60; string msg; for(int i=0;i<ArraySize(highArr);i++) { CEvent *e=highArr[i]; if(!e.alerted && e.time<=threshold && InpAlertHigh) { msg = "In "+IntegerToString(InpAlertMinutesBefore)+"m: "+e.sym+" "+e.name; Alert(msg); if(InpEnablePush && InpPushHigh) SendNotification(msg); e.alerted = true; } } for(int i=0;i<ArraySize(medArr);i++) { CEvent *e=medArr[i]; if(!e.alerted && e.time<=threshold && InpAlertMed) { msg = "In "+IntegerToString(InpAlertMinutesBefore)+"m: "+e.sym+" "+e.name; Alert(msg); if(InpEnablePush && InpPushMed) SendNotification(msg); e.alerted = true; } } for(int i=0;i<ArraySize(lowArr);i++) { CEvent *e=lowArr[i]; if(!e.alerted && e.time<=threshold && InpAlertLow) { msg = "In "+IntegerToString(InpAlertMinutesBefore)+"m: "+e.sym+" "+e.name; Alert(msg); if(InpEnablePush && InpPushLow) SendNotification(msg); e.alerted = true; } } }
Paso 4: OnTimer
Para garantizar que las animaciones de los gráficos se ejecuten con fluidez, el EA invoca CheckAndAlertEvents() al inicio de OnTimer(), antes de cualquier operación de obtención de datos o de dibujo. Dado que tanto Alert() como SendNotification() son funciones no bloqueantes en MQL5, las operaciones de actualización y desplazamiento de los 20 ms siguientes se llevan a cabo sin interrupciones. Es una táctica útil: ejecuta primero las rutinas con efectos secundarios en el bucle para que la representación posterior siga siendo fluida.
void OnTimer() { CheckAndAlertEvents(); // fire alerts and pushes first ReloadEvents(); FetchAlphaVantageNews(); FetchAIInsights(); DrawAll(); // … remaining drawing and scrolling … }
Detrás de todo esto se esconde un diseño modular: las entradas se encargan de la configuración, ReloadEvents y FetchAlphaVantageNews gestionan la recuperación de datos, CheckAndAlertEvents se ocupa de las notificaciones, y DrawAll, junto con sus funciones auxiliares, gestiona la representación en el gráfico. Esta clara separación de responsabilidades le permite sustituir o mejorar el mecanismo de notificación —añadiendo SMS, correo electrónico, webhooks, etc.— modificando únicamente una función, sin alterar el resto de la aplicación. Crear tu asesor experto de esta forma, con una arquitectura poco acoplada y bien documentada, facilita enormemente su mantenimiento, ampliación y depuración a lo largo del tiempo.
Pruebas
Para probar las nuevas funciones de alerta, hemos cargado el EA «News Headline» actualizado en un gráfico en tiempo real y hemos configurado el parámetro «minutos antes» para que se ajuste a los próximos eventos programados. El panel de configuración le permite especificar exactamente con cuántos minutos de antelación deseas recibir cada alerta, lo que garantiza que se te avise justo en el momento adecuado. A continuación se muestran algunas capturas de pantalla de mis pruebas prácticas: una muestra la configuración de entrada del EA, otra muestra la ventana emergente que aparece en pantalla unos minutos antes del evento y, por último, una imagen de la notificación push correspondiente que recibí en mi dispositivo móvil.

Configuración de «News Headline EA»
Prueba de notificaciones push
Cada vez que se instala MetaTrader 5 en un dispositivo móvil compatible, se le asigna un identificador único de MetaQuotes (MQID). Este ID es fundamental para permitir la comunicación entre la plataforma MQL5 y el terminal de escritorio MetaTrader 5. Para que el dispositivo móvil pueda recibir notificaciones push, debes añadir tu MQID al terminal de escritorio y activar las notificaciones push.
Para ello, abre el cuadro de diálogo «Opciones», ya sea a través del menú «Herramientas» o mediante el atajo de teclado Ctrl + O. En esta configuración, busca la sección «Notificaciones», localiza tu MQID en la aplicación móvil e introdúcelo en la lista de identificadores que deseas utilizar para las alertas. Consulta la imagen siguiente como referencia. Esta configuración es imprescindible: sin ella, no podrás recibir ninguna notificación en tu dispositivo móvil.
A su vez, asegúrate de que las notificaciones de MetaTrader 5 estén permitidas en tu dispositivo móvil y plantéate configurar un tono de notificación específico para que te llame la atención. Este tipo de alerta resulta especialmente útil para los traders, ya que normalmente llevan sus dispositivos móviles siempre a mano, lo que garantiza que nunca se pierdan una notificación importante del EA News Headline.

Configuración de las notificaciones push
En mi terminal MetaTrader 5 para móvil, las notificaciones push llegaron tal y como esperaba. A continuación se muestra un fragmento de la captura de pantalla en la que aparecen esas alertas, que se corresponden con los ejemplos del gráfico anteriores.
Notificaciones push recibidas en la aplicación MetaTrader 5 para dispositivos móviles Android
Conclusión
Es fundamental incorporar funciones de alerta en nuestros indicadores y asesores expertos para aumentar su utilidad práctica para los traders. En este proyecto, hemos integrado con éxito un sistema de notificaciones, lo que ha transformado de manera significativa el EA News Headline en algo más parecido a un auténtico compañero de trading. Los Expert Advisors tienen amplias capacidades: no solo pueden realizar operaciones de trading, sino que también pueden funcionar como indicadores o scripts para ofrecer información, visualizaciones o respuestas automatizadas.
En este caso concreto, el EA se centra en ofrecer información y mostrar los próximos acontecimientos económicos, más que en ejecutar operaciones. En la práctica, ningún operador puede pasarse todo el día mirando el gráfico a la espera de noticias y actualizaciones del calendario. Esto hace que la integración de alertas sea una solución perfecta para notificar a los usuarios de forma proactiva sobre acontecimientos importantes. La incorporación de notificaciones push mejora aún más la herramienta, ya que permite a los traders recibir actualizaciones puntuales en sus dispositivos móviles. Esto aporta verdadera movilidad y flexibilidad, especialmente cuando el EA está alojado en línea y aun así puede comunicarse con un terminal móvil remoto.
En un principio, tenía pensado que esta fuera la última actualización de «News Headline EA». Sin embargo, llegar a esta fase ha puesto de manifiesto nuevas posibilidades y mejoras que podrían convertirla en una solución aún más completa. Por ejemplo, la integración de una lógica de trading directamente vinculada a las noticias, el diseño de un panel de control de operaciones para estrategias basadas en las noticias y otras funciones avanzadas siguen siendo oportunidades interesantes para el desarrollo futuro. A menudo surgen ideas nuevas tras cada publicación, y si tengo la oportunidad, me encantaría ampliar aún más este proyecto.
Espero que este debate te haya aportado ideas útiles. A continuación, adjunto el código fuente completo con todos los detalles que hemos visto juntos y los archivos de Python del artículo anterior. Te invito a que lo utilices como base, añadas nuevas funciones o perfecciones el EA como mejor te parezca. ¡Tus opiniones y comentarios son bienvenidos en la sección de comentarios que aparece a continuación!
Lecciones clave
| Lección | Descripción |
|---|---|
| Configuración centralizada | Agrupe todos los parámetros ajustables por el usuario (interruptores, umbrales, claves API) en la parte superior de su código para que la configuración sea fácil de encontrar, documentar y modificar sin tener que profundizar en la lógica. |
| Arquitectura controlada por temporizador: | Utilice temporizadores de milisegundos (OnTimer) para controlar tareas periódicas como la obtención de datos, las comprobaciones de alertas y las actualizaciones del lienzo, equilibrando la capacidad de respuesta con la carga de la CPU. |
| Doble búfer de Canvas | Renderice todas las operaciones de dibujo en un mapa de bits fuera de pantalla (Canvas) antes de llamar a Update, lo que evita el parpadeo y garantiza animaciones fluidas en el gráfico. |
| Notificaciones no bloqueantes | Invoca Alert() y SendNotification() al principio de tu bucle; como no son bloqueantes, no interrumpirán los redibujados ni el procesamiento de datos. |
| Objetos de eventos con estado | Incluye un indicador de «alerta» directamente en cada objeto de evento para hacer un seguimiento de los eventos que ya han generado notificaciones, lo que permite eliminar las alertas duplicadas sin necesidad de mapas externos. |
| Separación modular de responsabilidades | Divide tu EA en secciones claras (configuración, recuperación de datos, lógica de alertas y representación) para simplificar el mantenimiento y las futuras ampliaciones. |
| Lógica de limitación de velocidad | Implementa comprobaciones sencillas basadas en el tiempo (por ejemplo, umbrales de «minutos antes») para evitar alertas excesivas o prematuras y para controlar la frecuencia de las llamadas a la API externa. |
| Integración de WebRequest | Aprovecha la función WebRequest de MQL5 para llamar a servicios externos (API de noticias, servidores de IA), gestionando los encabezados, los tiempos de espera y el análisis de las respuestas desde tu EA. |
| Técnicas de análisis de JSON | Extrae solo los campos necesarios de las cadenas JSON devueltas (por ejemplo, títulos o texto de información) utilizando StringFind y operaciones de subcadena, manteniendo una lógica de análisis sólida pero sencilla. |
| Limpieza y gestión de recursos | Destruye siempre los objetos creados (Canvas, temporizadores) y libera la memoria dinámica en OnDeinit para evitar fugas de memoria y mantener la estabilidad de la plataforma. |
Archivos adjuntos
| Nombre del archivo | Versión | Descripción |
|---|---|---|
| News Headline EA.mq5 | 1.07 | Calendario económico, noticias de Alpha Vantage, análisis de indicadores en los gráficos (RSI, estocástico, MACD, CCI), sección de comentarios basada en IA, además de alertas de eventos y notificaciones push opcionales. |
| download_model.py | 1.00 | Sencillo script en Python que utiliza el cliente de Hugging Face Hub para descargar y almacenar en caché el modelo GGUF cuantificado, mostrando la ruta del archivo local. |
| serve_insights.py | 1.00 | Aplicación FastAPI que carga el modelo GGUF a través de llama-cpp y expone un punto final POST /insights que genera y devuelve información generada por IA. |
Traducción del inglés realizada por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/en/articles/18750
Advertencia: todos los derechos de estos materiales pertenecen a MetaQuotes Ltd. Queda totalmente prohibido el copiado total o parcial.
Este artículo ha sido escrito por un usuario del sitio web y refleja su punto de vista personal. MetaQuotes Ltd. no se responsabiliza de la exactitud de la información ofrecida, ni de las posibles consecuencias del uso de las soluciones, estrategias o recomendaciones descritas.
Redes neuronales en el trading: Previsión probabilística de series temporales (Final)
Red neuronal cuántica en MQL5 (Parte I): Creamos un archivo de inclusión
Simulación de mercado: Position View (VI)
Redes neuronales en el trading: Previsión probabilística de series temporales (Codificador)
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso