Programar um robô de trading não é apenas escrever a lógica de compra e venda. O verdadeiro gargalo está em como o código interpreta o tempo, e é aqui que a maioria dos desenvolvedores iniciantes trava ao lidar com o MetaTrader.
O ENUM_TIMEFRAMES não é apenas uma lista de opções; é a ponte que permite que seu Expert Advisor (EA) “enxergue” diferentes janelas de tempo simultaneamente. Sem dominar isso, você fica preso a um único gráfico, ignorando a tendência macro enquanto opera o micro.
A luta real no código
O cenário comum é frustrante: você quer que o robô confirme a tendência no H4, mas execute a entrada no M15. Na teoria, parece simples. Na prática, se você não manipular corretamente as constantes de tempo, o terminal retorna valores vazios ou, pior, trava por excesso de requisições de dados.
O ENUM_TIMEFRAMES atua como o filtro de entrada para funções críticas como iClose ou CopyRates. Ele diz ao terminal exatamente qual “gaveta” de dados abrir. O erro clássico é tentar forçar valores inteiros onde a linguagem espera a enumeração, gerando bugs difíceis de rastrear.
Mas cuidado. A ferramenta falha miseravelmente se você esquecer que o MetaTrader precisa baixar o histórico do timeframe solicitado. Se o seu código chama o PERIOD_D1 em um terminal recém-instalado, ele pode retornar zero enquanto os dados são baixados, quebrando sua lógica de cálculo.
Para quem busca otimizar a execução e evitar esses erros de sincronização, vale a pena analisar a documentação técnica de implementação para entender a hierarquia dos períodos.
A rotina diária de quem usa essa enumeração envolve criar inputs flexíveis. Em vez de fixar o timeframe no código, você permite que o usuário escolha. Isso transforma um robô rígido em uma ferramenta versátil, capaz de operar desde scalping agressivo até swing trade.
⚙️ ENUM_TIMEFRAMES: Performance vs. Engasgo
Você passa semanas otimizando um Expert Advisor no testador de estratégias. O backtest mostra uma curva de equidade impecável, o fator de lucro beira o absurdo e o drawdown é controlado. Chega o dia de colocar no VPS, dinheiro real na conta, e o robô simplesmente não dispara as entradas. Ou pior: dispara no momento errado, comprando topo e vendendo fundo porque a lógica de tempo falhou silenciosamente. O culpado quase nunca é a estratégia em si, mas a forma como o código lida com ENUM_TIMEFRAMES. A maioria dos desenvolvedores trata esse enum como um detalhe sintático, um mero substituto das antigas constantes inteiras PERIOD_H1 ou PERIOD_M15. Não é. Ele é a ponte entre a lógica do seu algoritmo e o relógio do servidor da corretora.
Ignorar a tipagem forte desse enum gera bugs que não aparecem no compilador. Um cast implícito de int para ENUM_TIMEFRAMES aceita valores inválidos — como 7 ou 9 — que não existem no terminal, mas o código compila e roda. O resultado? Funções como iTime ou CopyRates retornam zeros ou dados do timeframe atual do gráfico, corrompendo toda a análise multi-timeframe sem lançar um único erro no log. Se você já depilou um EA madrugada adentro sem entender por que o sinal “perfeito” no H4 não batia com o gráfico visual, a resposta está na manipulação correta desse tipo de dado. A documentação oficial da MetaQuotes lista os membros válidos, mas falha em mostrar as armadilhas práticas de conversão e sincronização que separam um script amador de um sistema robusto aqui.
Elimine Falhas Silenciosas na Lógica Temporal do Seu Robô
Domine a tipagem forte do ENUM_TIMEFRAMES e garanta que seu EA leia o tempo exatamente como o servidor da corretora dita.
A armadilha da compatibilidade com código legado
A transição do MQL4 para o MQL5 trouxe a tipagem forte para os timeframes. No passado, Period() retornava um int e você passava esse inteiro direto para iMA(NULL, 60, ...). Funcionava porque 60 segundos era M1, 3600 era H1. O ENUM_TIMEFRAMES quebrou essa aritmética ingênua. PERIOD_H1 agora vale 16385, não 3600. Tentar fazer contas matemáticas com o enum — como somar minutos para calcular um timeframe personalizado — é o erro número um que vejo em repositórios GitHub e fóruns como o MQL5.community.
Um desenvolvedor no Reddit (r/algotrading) resumiu bem há alguns meses: “Gastei três dias achando que meu indicador customizado tinha bug na lógica de cruzamento de médias. Era só o timeframe errado sendo passado pro handle do iMA porque eu fiz (ENUM_TIMEFRAMES)(PeriodMinutes * 60) achando que o enum era segundos”. O compilador aceitou. O terminal rodou. O indicador calculou no timeframe atual do gráfico (fallback silencioso) em vez do H4 solicitado. A tipagem forte existe justamente para impedir que você passe “terça-feira” onde se espera “maçã”. Trate o enum como um identificador opaco, não como número.
Tabela completa de membros ENUM_TIMEFRAMES e seus valores reais
Abaixo está o mapeamento direto extraído do arquivo Chart.mqh da biblioteca padrão. Note que os valores não são sequenciais nem baseados puramente em segundos. Eles são flags internas do terminal. Tentar adivinhar o valor numérico para usar em ChartSetInteger ou serialização JSON é receita para dor de cabeça futura.
| Identificador (Enum) | Valor Hex/IntImplementação Prática e Execução ProgressivaPare de chutar números inteiros no código. O uso de ENUM_TIMEFRAMES não é uma sugestão estética; é a única forma de garantir que seu Expert Advisor (EA) não colapse quando você mudar de ativo ou de corretora. A maioria dos amadores usa valores fixos, o que é um convite ao erro catastrófico. A implementação começa na declaração. Use o tipo enumerado explicitamente para que o MetaEditor te entregue o auto-complete. Isso economiza tempo e evita que você tente chamar um timeframe que não existe no servidor da sua corretora. É simples, mas a negligência aqui gera bugs invisíveis que só aparecem em conta real.
Para quem busca produtividade, o caminho é a automatização da análise. Não escreva a mesma função cinco vezes para cinco períodos diferentes. Crie um array de ENUM_TIMEFRAMES. Percorra esse array com um loop ‘for’. Assim, você valida a tendência no M15, H1 e D1 com três linhas de código em vez de trinta. Menos código significa menos pontos de falha. Cronograma de Domínio do ENUM_TIMEFRAMES Fase 1 Substituição de valores inteiros por constantes ENUM_TIMEFRAMES em funções básicas. Fase 2 Criação de inputs parametrizáveis para que o usuário escolha o timeframe via dropdown. Fase 3 Implementação de scanners multi-timeframe usando arrays e loops de validação. A adaptação para iniciantes exige cautela com o histórico. Lembre-se: pedir dados de um timeframe que não está aberto no gráfico pode retornar valores vazios ou forçar o MetaTrader a baixar gigabytes de dados em tempo real. Isso trava a execução do seu robô. Verifique sempre se a série temporal está sincronizada antes de processar a lógica. Alerta de Configuração O Perigo do Cast ImplícitoEvite converter ENUM_TIMEFRAMES para ‘int’ sem necessidade. Você perde a tipagem forte e abre brechas para erros de indexação em arrays de preços. Para acelerar resultados, foque na modularização. Crie uma função dedicada apenas para validar se o timeframe selecionado é compatível com a estratégia. Se você opera Scalping, o código deve rejeitar automaticamente qualquer ENUM_TIMEFRAMES acima de H1. Isso evita que o usuário final configure o robô de forma burra e queime a conta. Checklist de Validação de Código
Resumo do Aprendizado Sintese Operacional O que aprendemos na prática sobre o Como utilizar ENUM_TIMEFRAMES? 1. Ponto Forte Principal Eliminação de erros de digitação e padronização total do código MQL. 2. Cuidados e Limitações Risco de travamento por download de histórico em timeframes não abertos. 3. Veredito de Aplicação Indispensável para desenvolvedores de robôs e indicadores profissionais. Pronto para aplicar esses passos e garantir as melhores condições? |
|---|



