O PROBLEMA
A maioria dos filtros de notícias consulta o calendário econômico do MQL5 (CalendarValueHistory). Esse calendário não existe no Testador de Estratégias, portanto, esses filtros, sem dar aviso, não realizam nenhuma ação nos backtests: o EA opera diretamente durante a divulgação do NFP, do CPI ou das decisões sobre taxas de juros, e o backtest deixa de corresponder ao comportamento em tempo real. Em um dos meus testes, uma ordem pendente no XAUUSD foi executada 5 minutos antes da divulgação do CPI dos EUA e o stop loss foi acionado com um slippage de 45 USD — uma única operação resultou em uma perda 6,5 vezes maior do que o risco planejado.
Um segundo problema, menos conhecido: o terminal converte os horários históricos do calendário com o deslocamento ATUAL do servidor. Ao exportar no verão em uma corretora com fuso horário GMT+2 / GMT+3, todos os eventos de inverno aparecem com uma hora de atraso (NFP às 16h30 em vez de 15h30, horário do servidor). Um filtro criado com base nesses horários bloqueia a hora errada durante metade do ano.
A SOLUÇÃO — TRÊS ARQUIVOS
NewsCalendarExport.mq5 (script) — exporta os eventos para Terminal\Common\Files\NewsCalendar.csv e recalcula cada evento com o deslocamento do servidor da respectiva data. No final, ele exibe uma verificação automática: o horário mais frequente dos eventos do USD deve ser idêntico tanto no inverno quanto no verão.
NewsFilter.mqh (classe CNewsFilter) — um filtro tanto para negociação ao vivo quanto para backtests. Em tempo real, ele lê o calendário econômico (consultado no máximo uma vez por minuto); no Strategy Tester, ele lê o arquivo CSV. Apenas as moedas do símbolo são utilizadas (EURUSD: EUR + USD, XAUUSD: USD, CFDs de índices cotados em USD: USD).
NewsFilter_Example.mq5 — um EA mínimo que exibe uma mensagem quando uma janela de notícias começa e termina, além de destacar as janelas bloqueadas no gráfico, para que você possa ver o filtro em funcionamento no modo visual do testador.
COMO USAR
Copie o NewsFilter.mqh para MQL5\Include, o NewsCalendarExport.mq5 para MQL5\Scripts e o NewsFilter_Example.mq5 para MQL5\Experts. Compile o script e o exemplo (o arquivo .mqh é compilado junto com eles).
Execute o NewsCalendarExport uma vez, em qualquer gráfico de um terminal conectado. Na aba “Experts”, você deverá ver: “OK: mesmo horário no inverno e no verão”.
No seu EA, adicione o seguinte código:
C++
#include <NewsFilter.mqh>
CNewsFilter news;
int OnInit()
{
news.Init(_Symbol, 30, 30); // bloqueia 30 minutos antes e depois de cada evento
return(INIT_SUCCEEDED);
}
void OnTick()
{
if(news.IsBlocked())
return; // nenhuma nova entrada durante as notícias
// ... sua lógica de entrada ...
}
Faça o backtest como de costume. O diário mostra quantos eventos foram carregados para o símbolo.
ENTRADAS DO SCRIPT
Exportar eventos a partir de: data de início da exportação.
Exporte também eventos agendados para N dias à frente: inclui eventos futuros.
Moedas: lista separada por vírgulas (padrão: USD, EUR, GBP, JPY, CAD, AUD, NZD, CHF).
Importância: apenas alto impacto, ou impacto médio + alto.
Regra de horário de verão do servidor da corretora: regra dos EUA (padrão, servidor = Nova York + 7h, a maioria das corretoras em GMT+2/+3), regra da UE ou sem horário de verão.
Nome do arquivo: armazenado em Terminal\Common\Files.
CNewsFilter::Init(símbolo, minutosAntes, minutosDepois, mediumToo = false, arquivoCSV = "NewsCalendar.csv")
NOTAS E LIMITAÇÕES
Testado na FTMO (GMT+2 / GMT+3, regra de horário de verão dos EUA) e na IC Markets UE. Exemplo de saída: 5.645 eventos exportados, 1.897 deles deslocados em uma hora; antes da correção, o horário mais frequente para o USD era 16h30 no inverno e 15h30 no verão; após a correção, 15h30 em ambas as estações.
Se a verificação automática ainda mostrar horários diferentes para o inverno e o verão, tente outra “Regra de horário de verão do servidor da corretora”.
O histórico do calendário MQL5 é limitado e depende do terminal; no meu terminal, ele começa em 2020, portanto, backtests mais antigos não conterão eventos.
Apenas as moedas do símbolo são utilizadas; portanto, para índices e commodities, a moeda de cotação determina quais eventos se aplicam.
Agentes remotos e na nuvem não conseguem acessar a pasta Common\Files — otimize com agentes locais.
Algumas moedas têm muito poucos eventos de alto impacto no calendário MQL5 (o AUD, por exemplo). Use “Impacto médio + alto” para elas.
O filtro apenas informa ao seu EA quando NÃO abrir novas operações. O gerenciamento das posições já abertas fica a cargo do seu EA.
Execute o script novamente de tempos em tempos para incluir novos eventos.
PRECISA DE AJUDA PARA INTEGRAR ISSO?
Se você não é programador e deseja integrar este filtro de notícias ao seu EA existente, ou se precisa de regras personalizadas de gestão de risco adaptadas às avaliações da sua empresa de trading, entre em contato diretamente comigo pelo meu perfil de freelancer no MQL5. Terei prazer em programá-lo para você!