English Русский 中文 Deutsch 日本語
preview
Do iniciante ao especialista: criação de um EA animado para notícias em MQL5 (VI): estratégia de ordens pendentes para trading baseado em notícias

Do iniciante ao especialista: criação de um EA animado para notícias em MQL5 (VI): estratégia de ordens pendentes para trading baseado em notícias

MetaTrader 5Negociação |
21 0
Clemence Benjamin
Clemence Benjamin

Conteúdo:



Introdução

A integração de alertas na versão anterior do nosso EA representou um avanço significativo, transformando-o em uma ferramenta valiosa para traders que operam notícias manualmente. No entanto, ainda existe uma limitação essencial: o EA ainda precisa automatizar a execução das operações. Hoje, nosso objetivo é eliminar essa lacuna integrando a classe CTrade para viabilizar o trading automático com base em eventos de notícias.

As versões anteriores do nosso projeto já contavam com uma série de vantagens, e cada nova função tinha como objetivo resolver uma tarefa específica e aumentar o valor prático do EA. Veja uma breve descrição de algumas dessas vantagens:

  • Acesso conveniente ao calendário de notícias: os usuários podem visualizar os próximos eventos econômicos diretamente no gráfico, sem interromper seu fluxo de trabalho de trading ou análise.
  • Manchetes econômicas em tempo real: integramos o Alpha Vantage como nossa fonte de notícias, fornecendo manchetes atualizadas para manter os traders informados.
  • Análise de indicadores incorporados: usando a API MQL5, conseguimos extrair dados de indicadores técnicos e exibir dados analíticos personalizados em faixas dedicadas do gráfico.
  • Análise por inteligência artificial: conectamos modelos locais de inteligência artificial para obter insights de mercado, adicionando recursos analíticos avançados, embora isso tenha provocado alguma redução na velocidade de rolagem das faixas do gráfico.

Com essa base sólida já estabelecida, agora estamos prontos para enfrentar a próxima tarefa: transformar automaticamente sinais de notícias em execução efetiva de operações no próprio EA.



Visão geral da estratégia de integração de ordens pendentes

Cada EA, em última análise, segue uma lógica que define quando e como ele opera. Até agora, nosso EA "Manchetes de notícias" estava concentrado em uma experiência visual marcante e em um sistema de alertas sobre eventos econômicos. Criamos faixas de eventos, tickers de notícias e até análises baseadas em inteligência artificial, que rolam no gráfico. No entanto, todos esses recursos, apesar de úteis, ainda deixam nas mãos do trader a responsabilidade pela execução manual das operações. A próxima evolução lógica consiste em transformar esse EA em um mecanismo de trading autônomo, que não apenas informa, mas também age de forma decisiva quando surgem oportunidades.

Estamos nos preparando para integrar a lógica de trading com ordens pendentes, a fim de considerar a volatilidade que notícias econômicas importantes costumam provocar. Essa etapa de planejamento é decisiva, pois, sem um plano confiável, a execução pode facilmente resultar em desordem ou erros.

Necessidade de lógica de trading em EAs

Um EA que funciona exclusivamente para fins informativos, por mais impressionante que seja do ponto de vista visual, continua sendo passivo. Para automatizar o trading, o EA precisa de regras claras para o seguinte:

  1. Timing: quando as operações devem ser executadas.
  2. Direção: abrir posições longas ou curtas, ou permanecer neutro.
  3. Tipo de ordem: se devem ser colocadas ordens a mercado, ordens limite ou ordens stop.
  4. Controle de risco: como definir os níveis de stop-loss e take-profit.
  5. Lógica de gerenciamento de ordens: como remover ou modificar ordens quando as circunstâncias mudam.

No nosso caso, escolhemos deliberadamente regras baseadas em horário para a execução das operações. Isso é especialmente adequado ao trading baseado em notícias, pois o horário de divulgação das notícias é conhecido com antecedência. Diferentemente das configurações que dependem exclusivamente de padrões gráficos ou sinais de indicadores, essa abordagem usa o calendário de notícias programado como gatilho principal para a atividade de trading.

Observações de mercado que fundamentam a estratégia

Ao longo de meses de observações e testes, identificamos um padrão no comportamento do mercado: os mercados frequentemente registram aumento de volatilidade alguns minutos antes de notícias econômicas importantes. A liquidez pode diminuir ligeiramente, pois traders e instituições reduzem a participação enquanto aguardam novos dados. Em seguida, à medida que as notícias são divulgadas, os preços muitas vezes sobem ou caem bruscamente, impulsionados tanto por operadores humanos quanto por sistemas algorítmicos que reagem aos novos dados.

Esse movimento brusco após a divulgação das notícias pode ser:

  1. Um rompimento de alta, se a notícia trouxer uma surpresa positiva.
  2. Um movimento de baixa, se a notícia impactar negativamente o mercado.

Esse aumento repentino da volatilidade cria um terreno favorável para estratégias com ordens pendentes voltadas a capturar o rompimento do mercado em qualquer direção.

Esquema de ordens pendentes

Nossa abordagem para o trading baseado em notícias será baseada em duas ordens stop pendentes:

  1. Uma ordem stop de compra, posicionada acima do preço de mercado recente, para capturar rompimentos de alta.
  2. Uma ordem stop de venda, posicionada abaixo do preço de mercado, para capturar rompimentos de baixa.

Pretendemos colocar essas ordens um determinado número de minutos antes da divulgação programada da notícia, de acordo com nossos dados de entrada InpOrderMinutesBefore. Isso dá ao EA tempo para preparar as ordens, minimizando a exposição a ruído de mercado enganoso.

A lógica é elegante:

Se a notícia for suficientemente impactante para provocar um movimento decisivo do preço, uma dessas ordens pendentes deverá ser ativada, permitindo aproveitar o impulso nessa direção. Assim que uma ordem é executada, a ordem oposta é removida para evitar uma entrada no sentido oposto.

Sem a etapa de remoção, ambas as ordens poderiam ser acionadas em rápida sequência, fenômeno conhecido como 'efeito serrote' ou 'whipsaw'. Isso pode fazer com que ambas as operações sejam fechadas com prejuízo, contrariando o objetivo da estratégia.

Gestão de risco no trading baseado em notícias

O trading baseado em notícias envolve riscos específicos. Diferentemente dos setups tradicionais, que se desenvolvem gradualmente, notícias econômicas podem fazer um par de moedas saltar dezenas de pips em milissegundos. Os spreads se ampliam, há slippage e gaps de preço.

No nosso EA planejado, a gestão de risco não será secundária: ela é um princípio central de desenvolvimento.

Vamos implementar vários níveis de proteção na nossa estratégia:

1. Distâncias fixas entre stop-loss e take-profit

Fornecemos InpStopLossPips e InpTakeProfitPips como dados de entrada. Isso permite controlar com precisão até que ponto o preço pode se mover contra nós antes de limitarmos as perdas, e até onde pretendemos capturar o lucro. Por exemplo, uma ordem stop com stop-loss de 10 pips e take-profit de 20 pips cria uma relação retorno-risco controlada de 2:1.

2. Compensação de spread e tamanho do tick

Antes de posicionar as ordens, calculamos o spread atual e o incluímos no deslocamento da ordem pendente. Isso evita que nossas ordens sejam acionadas "por acaso" pelo spread durante simples oscilações de oferta e demanda, preservando a integridade dos nossos níveis de entrada pretendidos.

3. Cálculos dinâmicos de pips

Pares como USDJPY têm tamanhos de pip diferentes (0,01) em comparação com EURUSD (0,0001). Nosso EA lê o tamanho do tick e o número de dígitos do instrumento, garantindo que nossos níveis de SL, TP e ordens pendentes sejam calculados corretamente para cada instrumento.

4. Remoção de ordens não acionadas

Assim que uma operação é acionada, o EA remove imediatamente a ordem oposta. Isso evita exposição dupla durante picos caóticos de volatilidade.

Todas essas medidas buscam garantir que nosso EA opere com disciplina, como um trader experiente, sem pânico nem ações impulsivas. Em condições instáveis, como as dos dados de emprego no setor não agrícola dos EUA (NFP) (primeira sexta-feira de cada mês), essas medidas de proteção são decisivas.

Entendendo o papel de CTrade

No centro do nosso plano está a classe CTrade, um wrapper de alto nível para funções de trading de nível mais baixo do MQL5. Sem CTrade, seríamos obrigados a criar manualmente cada estrutura MqlTradeRequest e MqlTradeResult, tratar códigos de retorno e gerenciar dezenas de cenários de erro. CTrade é responsável por:

  • Preparação das ordens com a estrutura adequada.
  • Verificação das permissões de negociação do símbolo e dos requisitos de margem.
  • Gerenciamento de slippage por meio das configurações de desvio.
  • Acompanhamento dos números de ticket para posterior modificação ou remoção.
  • Registro em log e tratamento de erros.

Na prática, em vez de escrever páginas de lógica para montar requisições, simplesmente chamamos:

trade.BuyStop(volume, price, symbol, stoploss, takeprofit);
trade.SellStop(volume, price, symbol, stoploss, takeprofit);
trade.OrderDelete(ticket);

Isso é mais rápido, mais limpo e reduz significativamente o risco de erros.

Nosso plano de integração

Com tudo isso em conjunto, nossa integração de ordens pendentes seguirá este fluxo conceitual:

1. Verifique o calendário econômico para identificar o próximo evento importante.

2. Calcule a diferença de tempo entre o momento atual e o evento.

3. Posicione ordens pendentes um determinado número de minutos antes da divulgação da notícia:

  • Calcule o preço-base com base na abertura M1 mais próxima.
  • Some ou subtraia os deslocamentos em pips, ajustando pelo spread.
  • Calcule os preços de stop-loss e take-profit.

4. Use os métodos de CTrade para enviar ordens Buy Stop e Sell Stop.

5. Monitore as posições abertas:

  • Assim que uma ordem for acionada, remova a ordem oposta.

6. Gerencie o risco:

  • Aplique distâncias fixas de SL/TP.
  • Certifique-se de que as ordens pendentes sejam canceladas quando não forem mais necessárias.

Esse design garante que estaremos prontos para agir em frações de segundo, sem perder o controle da exposição e do risco.

Em resumo, descrevi em detalhes todo o desenvolvimento, destacando cada etapa envolvida na integração da lógica de trading baseada em notícias ao nosso EA. Para complementar essa explicação, também incluí um diagrama que mostra visualmente as etapas de desenvolvimento e as principais decisões que precisam ser tomadas ao longo do caminho. Isso oferece uma visão abrangente para quem deseja entender tanto os aspectos técnicos quanto os aspectos práticos do desenvolvimento dessa estratégia em MQL5.

Development flow diagram

Development flow diagram

Os conceitos descritos acima servem de base para a próxima etapa: a implementação prática em MQL5. Na etapa seguinte, vamos transformar esse plano em código, incorporar a lógica de CTrade, integrá-la ao nosso ciclo do timer e testar cuidadosamente como o EA se comporta durante eventos de notícias em tempo real.

Aqui, nosso EA "Manchetes de notícias" deixa de ser uma ferramenta puramente informativa e se transforma em um poderoso sistema de trading autônomo, capaz de reagir em milissegundos e aproveitar oportunidades que nenhum trader conseguiria explorar tão rapidamente.


Implementação

Nesta etapa, o foco está na integração prática, com um detalhamento do código e explicações para garantir uma compreensão clara. Aqui introduzimos a classe CTrade, que incorporamos incluindo seu arquivo de cabeçalho no início do código do nosso EA, como mostrado no trecho destacado abaixo. Reserve um tempo para examinar cada fragmento de código e as explicações correspondentes, a fim de obter uma compreensão mais profunda de como a integração funciona e de como os diferentes componentes se conectam dentro do EA.

1. Configuração e parametrização de trading

Logo após nossos objetos canvas padrão para renderização gráfica e as variáveis de AI-insights, declaramos um único objeto CTrade trade, junto com vários parâmetros globais: ordersPlaced, nextEventTime e dois identificadores de tickets (ticketBuyStop, ticketSellStop). Esse bloco fica próximo aos nossos dados de entrada, que indicam volume, deslocamento em pips, stop-loss/take-profit em pips e as configurações de antecedência em minutos. Ao reuni-los na seção "DADOS DE ENTRADA PARA EXECUÇÃO DE ORDENS" e criar uma única instância de CTrade, usamos os métodos de alto nível da biblioteca de trading do MQL5, sem deixar de manter todos os parâmetros configuráveis pela janela de parâmetros de entrada do EA.

#include <Trade/Trade.mqh>
//…
CTrade trade;
bool   ordersPlaced    = false;
datetime nextEventTime = 0;
ulong  ticketBuyStop   = 0;
ulong  ticketSellStop  = 0;
//--- ORDER EXECUTION INPUTS ---
input int    InpOrderMinutesBefore  = 3;    
input double InpOrderVolume         = 0.10; 
input double InpStopOffsetPips      = 5.0;  
input double InpStopLossPips        = 20.0; 
input double InpTakeProfitPips      = 40.0; 

2. Definição do próximo evento de notícias

Em ReloadEvents(), depois de buscar e ordenar os eventos de hoje com importância alta/média/baixa, calculamos nextEventTime encontrando o timestamp mais cedo apenas entre os níveis de relevância que o usuário habilitou para trading. Definir ordersPlaced = false e zerar ambas as variáveis de ticket a cada atualização da lista de eventos garante que cada novo ciclo de divulgação de notícias comece do zero, sem flags residuais nem ordens pendentes órfãs.

void ReloadEvents()
{
  // … calendar fetching and sorting …

  // pick next event only from enabled levels
  datetime th = INT_MAX;
  if(InpTradeHigh && ArraySize(highArr)>0) th = MathMin(th, highArr[0].time);
  if(InpTradeMed  && ArraySize(medArr)>0)  th = MathMin(th, medArr[0].time);
  if(InpTradeLow  && ArraySize(lowArr)>0)  th = MathMin(th, lowArr[0].time);
  nextEventTime = (th==INT_MAX ? 0 : th);

  // reset order flags
  ordersPlaced   = false;
  ticketBuyStop  = ticketSellStop = 0;
}

3. Definição do momento da janela da ordem pendente

Dentro da função OnTimer(), comparamos o horário atual do servidor (agora) com nextEventTime - InpOrderMinutesBefore*60. Assim que o horário atual entra nessa janela, e apenas uma vez por evento graças ao guard ordersPlaced, começamos a posicionar duas ordens stop pendentes (de compra e de venda). Essa separação entre "quando operar" e "como operar" preserva nossa lógica de timing e evita entradas repetidas no mercado.

void OnTimer()
{
  datetime now       = TimeTradeServer();
  datetime placeTime = nextEventTime - InpOrderMinutesBefore*60;

  if(!ordersPlaced && nextEventTime>now && now>=placeTime)
  {
    // … compute prices and place orders …
    ordersPlaced = true;
  }

  // … rest of drawing, alerts, AI, etc. …
}

4. Cálculo de preços com precisão em pips e posicionamento das ordens

Para calcular níveis de preço compatíveis com o tamanho do tick de cada instrumento, pegamos SYMBOL_POINT e obtemos um "pip" como dez pontos, mesmo em pares com JPY. Em seguida, encontramos a vela M1 exata aberta no timestamp especificado usando iBarShift + iOpen. Os deslocamentos de entrada, stop-loss e take-profit são multiplicados pelo pip e somados ou subtraídos do valor de abertura da vela. Antes do envio das ordens, cada preço não normalizado passa por NormalizeDouble(..., SYMBOL_DIGITS) para atender aos requisitos de precisão da corretora. Por fim, chamamos trade.SetExpertMagicNumber() e trade.BuyStop(...) / trade.SellStop(...). Na prática, a classe CTrade trata a chamada da função OrderSend(), a verificação dos resultados e do reporte de erros, mantendo o código do nosso EA enxuto.

// inside the placement block in OnTimer()
double point = SymbolInfoDouble(_Symbol, SYMBOL_POINT);
double pip   = point * 10.0;

// find the bar open at target time
int idx = iBarShift(_Symbol, PERIOD_M1, placeTime, false);
if(idx >= 0)
{
  double baseOpen = iOpen(_Symbol, PERIOD_M1, idx);
  double ask      = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
  double bid      = SymbolInfoDouble(_Symbol, SYMBOL_BID);
  double spreadPips = (ask - bid) / pip;

  double offsetP = (spreadPips + InpStopOffsetPips) * pip;
  double slP     = InpStopLossPips   * pip;
  double tpP     = InpTakeProfitPips * pip;

  double rawBuy  = baseOpen + offsetP;
  double rawSell = baseOpen - offsetP;
  double rawBsl  = rawBuy  - slP;
  double rawBtp  = rawBuy  + tpP;
  double rawSsl  = rawSell + slP;
  double rawStp  = rawSell - tpP;

  int d = (int)SymbolInfoInteger(_Symbol, SYMBOL_DIGITS);
  double buyPrice  = NormalizeDouble(rawBuy,  d);
  double sellPrice = NormalizeDouble(rawSell, d);
  double buySL     = NormalizeDouble(rawBsl,  d);
  double buyTP     = NormalizeDouble(rawBtp,  d);
  double sellSL    = NormalizeDouble(rawSsl,  d);
  double sellTP    = NormalizeDouble(rawStp,  d);

  trade.SetExpertMagicNumber(123456);
  trade.SetDeviationInPoints(10);

  ticketBuyStop  = trade.BuyStop (InpOrderVolume, buyPrice,  _Symbol, buySL,  buyTP) ? trade.ResultOrder() : 0;
  ticketSellStop = trade.SellStop(InpOrderVolume, sellPrice, _Symbol, sellSL, sellTP) ? trade.ResultOrder() : 0;
}

5. Remoção de ordens não utilizadas

Logo após posicionar as ordens pendentes, o EA continua consultando PositionSelect(_Symbol). Quando uma das nossas ordens stop se transforma em uma posição aberta, identificamos o lado executado por meio de PositionGetInteger(POSITION_TYPE) e então chamamos trade.OrderDelete() no ticket oposto. Separar essa ação em duas instruções separadas (um para remover a ordem, outro para zerar o identificador do ticket) torna a lógica muito clara: CTrade volta a usar o protocolo de baixo nível, garantindo a confiabilidade da remoção das ordens.

// later in OnTimer()
if(ordersPlaced && PositionSelect(_Symbol))
{
  long ptype = PositionGetInteger(POSITION_TYPE);
  if(ptype==POSITION_TYPE_BUY && ticketSellStop>0)
  {
    trade.OrderDelete(ticketSellStop);
    ticketSellStop = 0;
  }
  if(ptype==POSITION_TYPE_SELL && ticketBuyStop>0)
  {
    trade.OrderDelete(ticketBuyStop);
    ticketBuyStop = 0;
  }
}

Vamos reunir tudo

Com essas seções reunidas, dados de entrada e variáveis globais, seleção de eventos, timing, cálculo de preço com precisão em pips, posicionamento de ordens pendentes com base em CTrade e remoção automática, transformamos um EA voltado principalmente à visualização em um autopiloto totalmente orientado por notícias. O cabeçalho Trade.mqh fornece todo o suporte necessário (formatação de ordens, envio/modificação/remoção, armazenamento de tickets e resultados), permitindo que nosso EA se concentre no "quê" (configurações das operações e timing dos eventos), e não no "como" (montagem das estruturas brutas MqlTradeRequest). Para sua conveniência, no final deste artigo está disponível o código-fonte completo e integrado do EA, com todas as partes reunidas e prontas para compilação e carregamento no MetaTrader 5, pronto para compilação e carregamento no MetaTrader 5.


Testes

Resultado preliminar dos testes:

2025.07.15 13:45:02.348  News Headline_EA (USDJPY.0,M1) CTrade::OrderSend: sell stop 0.10 USDJPY.0 at 147.922 sl: 148.128 tp: 147.522 [invalid price]
2025.07.15 13:49:02.373  News Headline_EA (USDJPY.0,M1) CTrade::OrderSend: buy stop 0.10 USDJPY.0 at 147.951 sl: 147.740 tp: 148.351 [invalid price]
2025.07.15 13:49:02.374  News Headline_EA (USDJPY.0,M1) CTrade::OrderSend: sell stop 0.10 USDJPY.0 at 147.929 sl: 148.140 tp: 147.529 [invalid price]

Na fase inicial dos testes, o EA gerou vários erros "invalid price" (preço inválido) ao tentar posicionar ordens pendentes Buy Stop e Sell Stop, como mostram registros de log do tipo CTrade::OrderSend: sell stop 0.10 USDJPY.0 at 147.922 sl: 148.128 tp: 147.522 [invalid price]. Esses erros foram causados por duas falhas principais na implementação inicial: primeiro, o EA não tratava adequadamente os tamanhos de pip e de tick específicos de cada instrumento; segundo, tentava calcular os preços com base nas cotações Bid e Ask em tempo real, que oscilam rapidamente e podem violar restrições da corretora, como a distância mínima do stop level. Para resolver esse problema, revisamos a lógica, definindo como referência o preço de abertura da última vela M1 concluída alguns minutos antes do evento de notícias. Isso forneceu uma referência mais estável e compatível para calcular os preços de entrada esperados.

Além disso, calculamos dinamicamente o tamanho do instrumento em pips por meio de SymbolInfoDouble(SYMBOL_POINT) e calculamos os tamanhos de pip com base no escalonamento do tamanho do tick, garantindo consistência para instrumentos como USDJPY, que normalmente usam 3 dígitos após a vírgula (0,001), em comparação com instrumentos com 5 casas decimais, como EURUSD (0,00010). Todos os preços calculados também foram normalizados com NormalizeDouble(preço, dígitos), como representação dos argumentos de preço e dígitos, para atender à precisão do instrumento. Esses dois aprimoramentos, preço-base estável e formatação correta do preço, garantiram que todas as ordens pendentes passassem a ficar dentro dos intervalos permitidos, eliminaram completamente os erros de preço inválido e tornaram o EA seguro e adaptável a qualquer par de moedas.

Testes finais

Durante os testes, concentrei-me em um evento importante que estava por vir: o discurso do presidente do Banco da Inglaterra, Bailey, que apareceu no calendário do EA como um pacote de "notícias vermelhas". Durante a captura das imagens de teste, o EA exibia corretamente a contagem regressiva "faltam 5 minutos" para esse evento. Sabendo que nossa lógica está configurada para posicionar ordens pendentes 3 minutos antes da divulgação programada, esperei intencionalmente mais 2 minutos para verificar se o EA iniciaria a configuração das operações conforme esperado.

Janela de alerta sobre o evento iminente em 5 minutos

Na configuração padrão, as ordens são posicionadas exatamente 3 minutos antes do início do evento. No entanto, testar na prática esse tipo de EA para trading baseado em notícias envolve dificuldades específicas, especialmente porque o testador de estratégias do MetaTrader 5 não é totalmente adequado para simular eventos do calendário econômico em tempo real. O testador de estratégias funciona reproduzindo ticks, mas não tem acesso aos dados do calendário em tempo real e não oferece suporte a requisições HTTP assíncronas da mesma forma que no modo em tempo real. Isso significa que não podemos "avançar rapidamente" até as divulgações de notícias no testador nem verificar todo o funcionamento do EA, desde a obtenção das manchetes de notícias até o posicionamento das ordens, em condições reais de execução.

Teste do EA para posicionamento de ordens pendentes

Para superar essa limitação, um dos métodos práticos de teste é ajustar o parâmetro de entrada que define quantos minutos antes do evento de notícias as ordens pendentes serão posicionadas. Por exemplo, suponha que haja um evento real de notícias programado para daqui a 50 minutos e que você não queira esperar quase uma hora. Em vez disso, você pode aumentar temporariamente a antecedência de posicionamento das ordens pendentes de 3 minutos, o padrão, para, digamos, 45 minutos. Assim, é possível verificar rapidamente se o EA aciona sua lógica de posicionamento de ordens, sem um longo período de espera. Se ele posicionar as ordens com sucesso usando essa antecedência ajustada, isso dá confiança de que a lógica de automação do EA também funcionará corretamente mais próximo do evento em cenários reais.

Durante meus testes, experimentei stop-loss e take-profit de 20 pips, mas achei esse valor um pouco alto para minha preferência e para o tamanho da conta de trading. Para muitos traders pessoa física, um stop de 10 pips pode ser uma escolha mais conservadora e prática, dependendo do saldo da conta e da tolerância ao risco. Em última análise, o EA é flexível o suficiente para permitir que você ajuste os níveis de stop-loss e take-profit de acordo com sua estratégia individual de gestão de risco.



Conclusão

Partimos de um sistema simples de exibição de notícias e eventos e chegamos a uma solução avançada para trading baseado em notícias e visualização de eventos, sustentada por uma estratégia robusta de ordens pendentes. Ao longo dessa jornada, comprovamos na prática a notável flexibilidade do MQL5, que se integra facilmente a sistemas externos, desde mecanismos de inteligência artificial e APIs de notícias até as poderosas ferramentas analíticas nativas da plataforma. Essa jornada foi realmente impressionante, revelando as possibilidades praticamente infinitas que o MQL5 oferece para o trading algorítmico.

Nosso EA se transformou em uma solução quase perfeita de trading baseado em notícias, combinando visualização de gráficos em tempo real, lógica de trading automatizada e gestão de risco disciplinada. Graças a presets configuráveis, os traders podem ajustar os parâmetros com precisão para encontrar a configuração ideal, além de implantar o EA em um servidor virtual privado (VPS), permitindo que ele funcione 24 horas por dia como um assistente confiável para trading baseado em notícias.

Nesta versão, realizamos os testes sem configurar a chave da News API e sem conectar ao servidor de IA. Essa escolha deliberada nos permitiu concentrar todo o foco no aprimoramento da lógica de trading, em garantir estabilidade e na prevenção de sobrecarga de desempenho durante os testes. Mesmo sem a integração ativa, observamos um fluxo suave e confiável de tratamento dos eventos de notícias e posicionamento das ordens.

Para quem tiver interesse em expandir ainda mais os recursos do EA, anexei os arquivos necessários para configurar o modelo local de IA. Para se aprofundar nessa configuração, consulte novamente o artigo em que descrevemos detalhadamente todas as etapas.

Embora o EA já ofereça ampla funcionalidade, ainda há bastante espaço para melhorias adicionais. Se o tempo e as possibilidades permitirem, planejamos publicar versões futuras com recursos ainda mais avançados.

Espero sinceramente receber seus feedbacks, comentários e resultados dos testes. Juntos, poderemos aprimorar ainda mais essa ferramenta e continuar explorando as possibilidades do trading algorítmico baseado em notícias.


Principais aprendizados

LiçãoDescrição
Tratamento de eventos com OnTimerO uso da função OnTimer() permite que seu EA execute ações segundo um cronograma fixo, como verificar os horários de divulgação de notícias, atualizar elementos gráficos ou gerenciar trades, sem depender de novos ticks.
Uso de CTrade para gerenciamento de ordensA classe CTrade simplifica o posicionamento, a modificação e o fechamento de ordens sem a necessidade de escrever código de requisição de trading de baixo nível, oferecendo uma lógica de trading mais estável e manutenível.
Gestão de arrays dinâmicosO uso de arrays em MQL5, como redimensionamento e ordenação, é essencial para gerenciar listas de eventos, dados de preço ou outros conjuntos de dados dinâmicos.
Processamento e análise sintática de stringsA análise de respostas JSON ou textuais, o trim de strings e o processamento de substrings são necessários ao integrar APIs Web ou criar mensagens personalizadas no seu EA.
Princípios de gestão de riscoO cálculo correto do tamanho dos lotes e das distâncias de stop-loss e take-profit é fundamental para preservar a integridade da conta e reduzir a exposição a saltos imprevisíveis de preço durante eventos de notícias.
Integração com WebRequestO MQL5 permite enviar requisições HTTP/HTTPS para servidores externos, incluindo funções como obtenção de manchetes de notícias ou previsões geradas por inteligência artificial, o que adiciona dados externos valiosos às estratégias de trading.
Desenho gráfico em canvasCCanvas e classes semelhantes permitem criar efeitos visuais personalizados nos gráficos, desde texto em rolagem até gráficos, possibilitando a criação de overlays avançados de interface diretamente nos gráficos do MetaTrader 5.
Precisão específica de cada símboloCada símbolo pode ter tamanhos diferentes em pontos e pips, além de diferente número de casas decimais. Sempre ajuste cálculos como deslocamento de preço e SL/TP de acordo com a precisão do símbolo para evitar erros de envio de ordens.
Magic numbersMagic numbers identificam unicamente as ordens de um EA específico, permitindo gerenciar posições com segurança e evitar conflitos com outros EAs ou com operações manuais.
Depuração e registro em logO uso de mecanismos como Print(), Alert() e registro em log ajuda a acompanhar erros e observar o comportamento do EA durante o desenvolvimento e o trading ao vivo.


Conteúdo do anexo

Nome do arquivoVersãoDescrição
News Headline EA.mq51.10O EA para MetaTrader 5 combina eventos do calendário econômico, manchetes de notícias da Alpha Vantage, dados de indicadores técnicos, análises de mercado baseadas em IA, alertas, notificações push e execução automática de operações baseadas em notícias com cálculo dinâmico de pips.
download_model.py
Script em Python que baixa e salva o modelo de machine learning necessário para obter insights de mercado com IA. Isso garante que o componente de IA do EA tenha o arquivo de modelo disponível localmente para previsão.
serve_insights.pyServiço Web em Python que é executado localmente, recebe requisições HTTP do tipo POST do EA e responde a elas com insights de mercado gerados por IA. Atua como backend de IA para fornecer dados em tempo real para as faixas do EA.

Voltar ao conteúdo

Traduzido do Inglês pela MetaQuotes Ltd.
Artigo original: https://www.mql5.com/en/articles/18754

Arquivos anexados |
download_model.py (0.28 KB)
serve_insights.py (1.77 KB)
Otimização por Comunidade de Cientistas - Community of Scientist Optimization (CoSO): Prática Otimização por Comunidade de Cientistas - Community of Scientist Optimization (CoSO): Prática
Continuação do tema de otimização por comunidade científica. O CoSO não deve ser tratado como uma solução pronta, mas como uma plataforma de pesquisa promissora. Com o refinamento adequado, o CoSO pode encontrar seu nicho em tarefas em que a adaptabilidade e a robustez a mudanças sejam importantes, e quando o tempo de processamento não for crítico.
Explorando Técnicas Avançadas de Aprendizado de Máquina na Estratégia de Rompimento da Caixa de Darvas Explorando Técnicas Avançadas de Aprendizado de Máquina na Estratégia de Rompimento da Caixa de Darvas
A estratégia de rompimento da Caixa de Darvas, criada por Nicolas Darvas, é uma abordagem de negociação técnica que identifica potenciais sinais de compra quando o preço de uma ação sobe acima de um intervalo definido de "caixa", sugerindo forte momentum de alta. Neste artigo, aplicaremos esse conceito de estratégia como exemplo para explorar três técnicas avançadas de aprendizado de máquina. Estas incluem usar um modelo de aprendizado de máquina para gerar sinais em vez de filtrar negociações, empregar sinais contínuos em vez de discretos, e utilizar modelos treinados em diferentes períodos gráficos para confirmar negociações.
Está chegando o novo MetaTrader 5 e MQL5 Está chegando o novo MetaTrader 5 e MQL5
Esta é apenas uma breve resenha do MetaTrader 5. Eu não posso descrever todos os novos recursos do sistema por um período tão curto de tempo - os testes começaram em 09.09.2009. Esta é uma data simbólica, e tenho certeza que será um número de sorte. Alguns dias passaram-se desde que eu obtive a versão beta do terminal MetaTrader 5 e MQL5. Eu ainda não consegui testar todos os seus recursos, mas já estou impressionado.
Redes neurais em trading: Desvendando os componentes estruturais da série (SCNN) Redes neurais em trading: Desvendando os componentes estruturais da série (SCNN)
Vamos conhecer o framework inovador SCNN, que leva a análise de séries temporais a um novo nível ao separar claramente os dados em componentes de longo prazo, sazonais, de curto prazo e residuais. Essa abordagem aumenta significativamente a precisão da previsão, permitindo que o modelo se adapte a uma dinâmica de mercado complexa e em constante mudança.