Do iniciante ao especialista: Criação de um EA de notícias animado em MQL5(V): sistema de lembretes de eventos
Sumário:
Introdução
Notícias econômicas importantes podem provocar oscilações bruscas de preço, às vezes gerando grandes oportunidades e, em outras ocasiões, pegando traders de surpresa com perdas repentinas. Nosso EA "Manchetes de notícias" já dá uma vantagem ao exibir eventos programados, informações de indicadores técnicos e comentários gerados por inteligência artificial diretamente no gráfico, de modo que você não precise alternar entre janelas. Mas sejamos francos: ninguém quer passar o dia inteiro grudado na tela esperando a próxima divulgação de dados.
Para tornar esse fluxo de trabalho realmente prático, damos o próximo passo ao integrar um sistema inteligente de alertas, que avisará você com antecedência sobre cada evento importante. Assim, você pode permanecer focado em sua estratégia, com a segurança de que não deixará passar notícias relevantes justamente no momento em que elas mais importam.
Como esta série é destinada tanto a desenvolvedores experientes quanto a iniciantes no MetaTrader 5, separamos todo o material relacionado a notificações em uma seção própria. Aqui, analisaremos em detalhes os recursos de alerta integrados à plataforma, desde janelas pop-up na tela e sinais sonoros até notificações push no seu telefone, para que você possa configurar lembretes no momento certo de acordo com seu estilo de trading.
Nesta discussão, examinaremos as limitações atuais do nosso EA "Manchetes de notícias" e também mostraremos como integrar alertas em MQL5 aos projetos em que você estiver trabalhando. Na próxima seção, explicaremos em detalhes como funcionam os alertas MQL5 e apresentaremos nosso plano para incorporá-los de forma fluida ao EA. Com essa base, você estará pronto para avançar com confiança para a implementação no código.
Conceito
Nesta seção, primeiro examinaremos os recursos de alerta do MQL5 e discutiremos o plano de integração. No próximo parágrafo, você conhecerá os alertas no MetaTrader 5.
Conhecendo os alertas no MQL5
Os alertas são um recurso importante do MetaTrader 5, destinado a chamar a atenção do trader quando ocorrem eventos ou condições de mercado relevantes, como o alcance de determinados níveis de preço, o acionamento de sinais de indicadores ou a execução de operações. Por padrão, o gerenciamento de alertas no terminal MetaTrader 5 é feito por meio da Caixa de ferramentas > aba Alertas, onde os usuários podem configurar condições básicas de alerta.
No entanto, o MQL5 oferece funções poderosas para criar alertas personalizados, incluindo Alert(), PlaySound(), SendMail() e SendNotification(). Essas funções geram caixas de diálogo pop-up, sinais sonoros e mensagens que podem ser recebidas tanto no terminal desktop quanto nos terminais móveis do MetaTrader 5. Mesmo sem usar uma função explícita de alerta, você ainda pode registrar eventos importantes com a função Print() para exibir mensagens na aba Journal (Registro).
Também é possível ampliar a integração estendendo o mecanismo integrado Alert() para funcionar com serviços externos de notificação, como Telegram, Discord e outros, por meio de chamadas de API. Embora a discussão de hoje não trate dessas integrações externas, elas já foram abordadas em algumas de nossas sessões anteriores.
Em vez disso, hoje vamos nos concentrar em entender como usar alertas de forma eficiente no contexto do trading de notícias, em que o recebimento das informações em tempo hábil e sua disponibilidade são decisivas para a tomada de decisão.
A tabela abaixo descreve as funções de alerta disponíveis no MQL5, bem como a forma como cada uma delas pode ser adaptada e aplicada de maneira eficiente no contexto deste projeto.
| Função | Descrição | Aplicabilidade ao EA "Manchetes de notícias" |
|---|---|---|
| Alert() | Exibe uma caixa de diálogo pop-up com uma mensagem no terminal MetaTrader 5. Ela interrompe a atividade do usuário, exibindo imediatamente a informação na tela, e também registra a mensagem no log do EA. | É excelente para alertar traders sobre eventos importantes programados ou mudanças repentinas detectadas pelo EA, garantindo que a atenção do usuário seja atraída mesmo durante sessões de trading em tempo real. |
| PlaySound() | Reproduz um arquivo de som personalizado (formato WAV) no desktop do terminal. Serve para emitir um sinal sonoro sem exigir que o usuário olhe para a tela. | É ideal para adicionar um sinal sonoro quando o EA exibir novos títulos de notícias, sinais de indicadores ou análises de inteligência artificial, ajudando os traders a se manterem informados mesmo enquanto realizam várias tarefas ao mesmo tempo. |
| SendMail() | Envia uma mensagem de e-mail por meio do servidor SMTP configurado nas opções do MetaTrader 5. O e-mail pode conter um assunto e um corpo de texto com os detalhes de trading relevantes. | É útil para fornecer resumos detalhados de notícias ou alertas sobre eventos importantes a traders que preferem receber atualizações fora do terminal, especialmente quando estão longe de sua estação de trabalho principal. |
| SendNotification() | Envia uma notificação push para o aplicativo móvel MetaTrader 5, permitindo que os traders recebam mensagens curtas em tempo real em smartphones ou tablets. | É ideal para alertar instantaneamente os traders sobre eventos críticos, atualizações das principais notícias ou informações relevantes de inteligência artificial detectadas pelo EA, permitindo que permaneçam conectados independentemente de sua localização física. |
Como se vê na tabela acima, as opções que chamam a atenção imediatamente, como notificações pop-up no terminal e sinais sonoros, são especialmente valiosas, pois precisamos receber avisos com antecedência sobre eventos programados para nos prepararmos em tempo hábil. Nesse contexto, os alertas no terminal terão prioridade mais alta, enquanto SendMail() e SendNotification() serão usados como opções adicionais. Embora e-mails e notificações push causem um pequeno atraso na transmissão das mensagens, em geral esse atraso é mínimo; ainda assim, é importante levá-lo em conta quando o tempo é decisivo.
Extensibilidade
Como mencionado anteriormente, podemos ampliar os recursos do EA para oferecer suporte a notificações externas em outras plataformas por meio da integração de APIs. Isso inclui a criação de funções personalizadas que coletam informações sobre os alertas e as transmitem via WebRequest para servidores externos, dando suporte à comunicação e ao envio de notificações por serviços como Slack, Telegram, gateways de SMS ou aplicações web personalizadas. Essa abordagem torna o EA "Manchetes de notícias" muito flexível e capaz de se integrar naturalmente a diferentes fluxos de trading e ecossistemas de notificação.
Plano de integração
Hoje, nosso foco principal será implementar alertas sobre eventos de notícias programados, que serão acionados em um horário predefinido antes do início de cada evento. Existem três categorias principais de alertas de notícias, correspondentes aos níveis de impacto das notícias: alto, médio e baixo. Por enquanto, vamos nos concentrar exclusivamente no gerenciamento dos alertas desses eventos e deixaremos de lado outras funções do EA. É importante observar que nem toda notícia deve gerar um alerta. Em vez disso, queremos oferecer aos traders flexibilidade para escolher sobre quais níveis de impacto desejam receber notificações, bem como o tempo, em minutos, para receber esses avisos antes do início de cada evento.
Implementação
Etapa 1: Configuração dos parâmetros de entrada
A integração começa com a definição de todos os parâmetros relacionados a alertas em um único lugar: interruptores globais para alertas e notificações push, interruptores separados para níveis de impacto alto/médio/baixo e o parâmetro "minutos antes". Essa configuração centralizada não apenas simplifica a interface do usuário, permitindo que os traders definam com precisão quais eventos acionam pop-ups ou notificações push, como também simplifica a lógica condicional do EA. Na inicialização, o EA lê esses parâmetros de entrada e, em seguida, simplesmente verifica cada um deles antes de disparar qualquer alerta, evitando valores codificados diretamente ou flags ocultas no 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
Etapa 2: Rastreamento do estado do evento
Cada evento do calendário fica encapsulado em um objeto CEvent, que contém seu próprio valor booleano alerted, inicializado com false. Quando o programa identifica que chegou a hora de notificar, o próprio EA chama Alert() (para a janela pop-up na tela) e, se estiver habilitado, SendNotification() (para a notificação push no terminal móvel) e, em seguida, define imediatamente a flag de alerta desse evento como true. Esse padrão evita duplicações sem qualquer estrutura externa de busca. Uma pequena ressalva: sempre atualize o estado do evento logo após chamar a notificação, para garantir exatamente um 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; } };
Etapa 3: Lógica de envio de notificações
O envio de todas as notificações ocorre dentro da função CheckAndAlertEvents(), que é executada a cada tick do temporizador. O procedimento primeiro verifica a opção principal de alertas, calcula um único limite temporal (agora + minutesBefore * 60) e, em seguida, percorre sequencialmente os arrays de eventos de alta, média e baixa importância. Ao encontrar um evento ainda não notificado, que se enquadra no prazo definido e corresponde aos níveis de impacto selecionados pelo usuário, o EA cria uma mensagem breve e dispara as chamadas de notificação. Centralizar essa lógica facilita a adição de canais alternativos, como e-mail ou SMS, estendendo essa única função, em vez de modificar várias partes do 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; } }
Etapa 4: OnTimer
Para manter a animação do gráfico fluida, o EA executa a função CheckAndAlertEvents() no início de OnTimer(), antes de qualquer coleta de dados ou renderização gráfica. Como, em MQL5, tanto Alert() quanto SendNotification() não são bloqueantes, as operações subsequentes de redesenho e rolagem de 20 milissegundos continuam sendo executadas sem interrupção. Esta é uma tática útil: execute primeiro suas procedimentos auxiliares no ciclo, para que a renderização posterior permaneça fluida.
void OnTimer() { CheckAndAlertEvents(); // fire alerts and pushes first ReloadEvents(); FetchAlphaVantageNews(); FetchAIInsights(); DrawAll(); // … remaining drawing and scrolling … }
Por trás de tudo isso, há uma estrutura modular: a configuração do tratamento dos parâmetros de entrada, ReloadEvents e FetchAlphaVantageNews gerenciam a obtenção dos dados, CheckAndAlertEvents cuida das notificações, e DrawAll, junto com suas rotinas auxiliares, gerencia a renderização do gráfico. Essa separação clara de responsabilidades permite substituir ou aprimorar o mecanismo de notificações, adicionando SMS, e-mail, webhooks etc., alterando apenas uma função e mantendo as demais funções do EA intactas. Construir seu EA com baixo acoplamento e boa documentação simplifica significativamente sua manutenção, expansão e depuração ao longo do tempo.
Testes
Para testar os novos recursos de alerta, carregamos o EA "Manchetes de notícias" atualizado em um gráfico ao vivo e configuramos a entrada "minutos antes" para cobrir os próximos eventos programados. O painel de entrada permite especificar com precisão quantos minutos antes você deseja receber cada alerta, garantindo que você seja notificado no momento certo. Abaixo estão capturas de tela do meu teste prático: uma mostra as configurações de entrada do EA, outra mostra a janela pop-up na tela que aparece alguns minutos antes do evento, e a imagem final mostra a notificação push correspondente recebida no meu terminal móvel.

Configuração de alertas do EA "Manchetes de notícias"
Teste da notificação push
Sempre que o MetaTrader 5 é instalado em um dispositivo móvel compatível, ele recebe um identificador exclusivo chamado MetaQuotes ID (MQID). Esse identificador é decisivo para viabilizar a comunicação entre a plataforma MQL5 e o terminal MetaTrader 5 no computador desktop. Para permitir que o terminal móvel receba notificações push, é necessário adicionar seu MQID ao terminal no computador e ativar as notificações push.
Isso pode ser feito abrindo a janela de diálogo Opções (Options) a partir do menu Ferramentas (Tools) ou usando o atalho Ctrl + O. Nessas configurações, localize a seção de notificações; no aplicativo móvel, encontre seu MQID e insira-o na lista de identificadores que você deseja usar para os alertas. Veja a imagem abaixo como referência. Essa configuração é muito importante, pois sem ela você não poderá receber nenhuma notificação em seu dispositivo móvel.
Além disso, verifique se as notificações do MetaTrader 5 estão permitidas em seu dispositivo móvel e considere configurar um sinal sonoro de notificação exclusivo que chame sua atenção. Esse tipo de alerta é especialmente valioso para traders, pois as pessoas geralmente mantêm seus dispositivos móveis por perto, ajudando a evitar que percam um sinal importante do EA "Manchetes de notícias".

Configuração de notificações push
No meu terminal móvel MetaTrader 5, as notificações push foram recebidas conforme o esperado. Abaixo há um recorte de captura de tela que mostra esses alertas, correspondentes aos exemplos exibidos acima no gráfico.
Notificações push recebidas no aplicativo móvel MetaTrader 5 para Android
Conclusão
É importante incluir funções de alerta em nossos indicadores e EAs para aumentar seu valor prático para os traders. Neste projeto, integramos com sucesso um sistema de notificações, aproximando significativamente o EA "Manchetes de notícias" de um verdadeiro companheiro de trading. Os EAs oferecem ampla flexibilidade funcional: eles podem não apenas executar operações, mas também funcionar como indicadores ou scripts para fornecer dados analíticos, visualizações ou ações automáticas.
Neste projeto específico, o EA se concentra na análise e na exibição dos próximos eventos econômicos, e não na execução de operações. Na prática, nenhum trader consegue ficar sentado olhando para o gráfico o dia inteiro à espera de notícias e atualizações do calendário. Isso torna a integração de alertas uma solução ideal para avisar os usuários com antecedência sobre eventos importantes. A adição de notificações push amplia ainda mais os recursos da ferramenta, permitindo que os traders recebam atualizações em tempo hábil nos dispositivos móveis. Isso proporciona mobilidade e flexibilidade reais, especialmente quando o EA está hospedado online e, ainda assim, consegue interagir com um terminal móvel remoto.
Inicialmente, eu havia planejado que esta seria a última atualização do EA "Manchetes de notícias". No entanto, chegar a esta etapa revelou novas possibilidades e aprimoramentos que poderiam transformá-lo em uma solução ainda mais completa. Por exemplo, a integração de uma lógica de trading diretamente vinculada aos eventos de notícias, o desenvolvimento de um painel de trading para estratégias baseadas em notícias e outros recursos avançados continuam sendo possibilidades empolgantes para evoluções futuras. Muitas vezes, depois de cada publicação, surgem novas ideias e, se eu tiver essa oportunidade, ficarei feliz em continuar desenvolvendo este projeto.
Espero que você tenha tirado informações valiosas desta discussão. Abaixo, anexei o código-fonte completo com todos os detalhes que estudamos juntos, bem como os arquivos Python do artigo anterior. Você pode usá-lo, adicionar novos recursos ou aprimorar o EA como preferir. Suas ideias e seu feedback serão muito bem-vindos na seção de comentários abaixo!
Principais lições
| Lição | Descrição |
|---|---|
| Configuração centralizada | Agrupamos todos os parâmetros configuráveis pelo usuário: opções de ativação, valores-limite e chaves de API na parte superior do código, para que as configurações sejam fáceis de encontrar, documentar e alterar sem precisar entrar na lógica. |
| Arquitetura orientada por temporizador: | Usamos temporizadores em milissegundos (OnTimer) para executar tarefas periódicas, como coleta de dados, verificação de alertas e atualização do canvas, equilibrando a velocidade de resposta com a carga da CPU. |
| Bufferização dupla do canvas | Antes de chamar a função Update, renderizamos todas as operações de renderização como uma imagem bitmap fora da tela (canvas), o que evita cintilação e ajuda a manter a animação fluida no gráfico. |
| Notificações não bloqueantes | Chamamos as funções Alert() e SendNotification() logo no início do ciclo; como elas não são bloqueantes, não pausam a renderização nem o processamento de dados. |
| Objetos de evento com rastreamento de estado | Definimos a flag "alertado" diretamente em cada objeto event para rastrear quais eventos já acionaram notificações, eliminando alertas duplicados sem estruturas externas auxiliares. |
| Separação modular de responsabilidades | Dividimos nosso EA em seções claras: configuração, exibição de dados, lógica de alertas e renderização, para simplificar a manutenção e futuras expansões. |
| Lógica de limitação de frequência | Implementamos verificações simples baseadas em tempo (por exemplo, limiares de "alguns minutos antes") para evitar alertas excessivos ou prematuros e controlar a frequência das chamadas à API externa. |
| Integração com WebRequest | Usamos o WebRequest do MQL5 para chamar serviços externos (APIs de notícias, servidores de IA), tratando cabeçalhos, tempos limite e análise de respostas dentro do próprio EA. |
| Métodos de análise de JSON | Extraímos apenas os campos necessários das strings JSON retornadas (por exemplo, títulos ou texto analítico), usando operações StringFind e substring, mantendo a lógica de parsing robusta, porém simples. |
| Limpeza e gerenciamento de recursos | Sempre liberamos os objetos criados (Canvas, temporizadores) e liberamos a memória dinâmica em OnDeinit para evitar vazamentos de memória e manter a estabilidade da plataforma. |
Conteúdo do anexo
| Nome do arquivo | Versão | Descrição |
|---|---|---|
| News Headline EA.mq5 | 1.07 | Calendário econômico, notícias da Alpha Vantage, indicadores analíticos no gráfico (RSI, Stoch, MACD, CCI), barra de comentários com auxílio de IA, além de alertas de eventos e notificações push adicionais. |
| download_model.py | 1.00 | Script simples em Python que usa o cliente Hugging Face Hub para baixar e armazenar em cache um modelo GGUF quantizado e exibe o caminho para seu arquivo local. |
| serve_insights.py | 1.00 | Aplicação FastAPI que carrega o modelo GGUF via llama-cpp, fornecendo o endpoint POST /insights, que gera e retorna insights de IA. |
Traduzido do Inglês pela MetaQuotes Ltd.
Artigo original: https://www.mql5.com/en/articles/18750
Aviso: Todos os direitos sobre esses materiais pertencem à MetaQuotes Ltd. É proibida a reimpressão total ou parcial.
Esse artigo foi escrito por um usuário do site e reflete seu ponto de vista pessoal. A MetaQuotes Ltd. não se responsabiliza pela precisão das informações apresentadas nem pelas possíveis consequências decorrentes do uso das soluções, estratégias ou recomendações descritas.
Redes neurais em trading: Desvendando os componentes estruturais da série (SCNN)
Rede neural quântica em MQL5 (Parte II): Treinamos a rede neural com retropropagação do erro usando matrizes de Markov da ALGLIB
Explorando Técnicas Avançadas de Aprendizado de Máquina na Estratégia de Rompimento da Caixa de Darvas
Do iniciante ao especialista: criação de um EA animado para notícias em MQL5 (IV) - Análise de mercado com modelos hospedados localmente usando IA
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso