Programar em MQL5 é, em grande parte, lidar com a incerteza de dados que mudam em milissegundos. Quem tenta automatizar a gestão de risco descobre rápido que a diferença entre o saldo teórico e a margem real pode custar a conta inteira.
O ENUM_TERMINAL_INFO_DOUBLE não é uma ferramenta de execução, mas a lente técnica que permite ao robô “enxergar” a saúde financeira do terminal. Sem ele, seu código opera no escuro, sem saber se há margem disponível para a próxima ordem.
A luta real contra a margem e o saldo
O objetivo operacional aqui é simples: evitar o margin call. Na prática, o desenvolvedor usa essa enumeração para alimentar a função TerminalInfoDouble(), extraindo valores como o nível de margem ou a equidade atual.
A dificuldade surge quando o trader confunde informações do terminal com informações da conta. Embora pareçam a mesma coisa, o terminal processa a informação que recebeu do servidor, e existe um pequeno delay inerente a essa comunicação.
Em cenários de alta volatilidade, confiar cegamente em um valor de TERMINAL_MARGIN_LEVEL pode ser perigoso. O valor que o terminal reporta agora pode já ter sido alterado no servidor da corretora no momento em que a ordem de compra chega ao mercado.
Para quem busca precisão, integrar esses dados com filtros de volatilidade é o caminho. Você pode aprofundar a implementação técnica acessando o material de suporte especializado para evitar erros de arredondamento em contas com moedas diferentes.
Outro ponto cético: não use essa função dentro de loops infinitos sem um controle de tempo. Solicitar dados do terminal a cada microsegundo não aumenta a precisão; apenas consome CPU desnecessariamente e pode travar a interface do MetaTrader.
⚙️ Onde o ENUM_TERMINAL_INFO_DOUBLE performa vs. Onde ele engasga
Muitos desenvolvedores MQL5 travam na hora de monitorar a saúde do terminal em tempo real. Você escreve um Expert Advisor que precisa reagir à latência ou ao uso de CPU, mas a documentação oficial lista dezenas de identificadores. A armadilha clássica é tentar ler `TERMINAL_PING` ou `TERMINAL_CPU` usando `TerminalInfoInteger` quando, na verdade, a arquitetura do MetaTrader 5 exige precisão de ponto flutuante para métricas de performance bruta. Já vi EAs parando de copiar sinais porque o programador assumiu que o ping era inteiro e truncou milissegundos decisivos. O `ENUM_TERMINAL_INFO_DOUBLE` existe exatamente para evitar esse tipo de vazamento de precisão. Ele expõe propriedades que não cabem em inteiros sem perda de dado. Entender esse enum separa scripts amadores de infraestrutura profissional.
Monitore Latência e Recursos com Precisão Cirúrgica
Pare de chutar métricas do terminal. Acesse a documentação oficial e veja a lista completa de propriedades double suportadas.
Por que Double e não Integer? A armadilha da precisão
A maioria dos programadores ignora a distinção até o backtest divergir do forward. Métricas como `TERMINAL_PING` retornam milissegundos com casas decimais. Um ping de 12.4 ms arredondado para 12 ms parece inofensivo. Em alta frequência, esse erro acumulado quebra a lógica de timeout.
O `ENUM_TERMINAL_INFO_DOUBLE` agrupa identificadores que exigem vírgula flutuante. Não é preferência. É contrato da API. Tentar ler `TERMINAL_CPU` via `TerminalInfoInteger` retorna zero ou erro 4006 (valor inválido). O terminal simplesmente não expõe essa métrica no domínio inteiro.
Outro ponto crítico: `TERMINAL_DISK_SPACE` livre em GB. Discos modernos têm terabytes. Representar espaço livre em double permite precisão de megabytes sem overflow de 32 bits. O enum garante que você peça o tipo certo na primeira chamada.
Implementação direta: lendo o pulso da máquina
O padrão correto é verificador de saúde no `OnTimer`. Não consulte a cada tick. Sobrecarrega a thread principal. Um timer de 1 segundo é o sweet spot para monitoramento.
Crie um wrapper tipado. Evita `switch` gigante no meio da lógica de negócio. Exemplo mínimo:
double GetTerminalMetric(ENUM_TERMINAL_INFO_DOUBLE prop) { double val = TerminalInfoDouble(prop); if(_LastError != 0) Print("Erro ", _LastError, " lendo ", EnumToString(prop)); return val; }Use `TERMINAL_PING` para decidir se envia ordem ou aguarda. Use `TERMINAL_CPU` para throttling de cálculos pesados (Otimização de carteira, ML local). Use `TERMINAL_DISK_SPACE` antes de gravar logs massivos ou datasets de treino.
Dica de ouro: `TERMINAL_OPENCL_SUPPORT` retorna 1.0 ou 0.0 como double. Parece booleano, mas o enum classifica como double. Trate como flag, não como métrica contínua.
Erros silenciosos que não aparecem no Journal
O erro mais perigoso não gera log. É ler `TERMINAL_MAXBARS` achando que é double. Não é. É `ENUM_TERMINAL_INFO_INTEGER`. O compilador não avisa porque `TerminalInfoDouble` aceita int implícito, mas retorna lixo de memória interpretando bits errados.
Outro fantasma: `TERMINAL_TRADE_ALLOWED` retorna double 1.0/0.0 em builds antigos. Build 3600+ moveu para Integer. Código que não checa `_LastError` após a chamada continua rodando com valor default 0.0 (proibido). Seu EA para de operar do nada em conta real.
Tabela de compatibilidade mental: se a métrica é “contagem” ou “flag”, é Integer. Se é “tempo”, “porcentagem”, “tamanho físico”, “temperatura”, é Double.
| Identificador (Double) | Unidade / Escala | Caso de Uso Crítico |
|---|---|---|
| TERMINAL_PING | Milissegundos (ms) | Validação de latência antes de OrderSend |
| TERMINAL_CPU | Porcentagem (0.0 – 100.0) | Implementação Prática e Execução Progressiva Pare de tentar adivinhar o estado do seu terminal. A implementação do ENUM_TERMINAL_INFO_DOUBLE não é foguete, mas a maioria dos programadores MQL5 trata a função TerminalInfoDouble() como se fosse mágica, ignorando a precisão dos dados retornados. O primeiro passo é bruto: chame a função, atribua a uma variável double e imprima no log. Sem firulas. Se você quer saber a hora do servidor ou a margem disponível, a sintaxe é seca. Você passa o identificador da enumeração e recebe o valor. Simples. Porém, o erro fatal ocorre quando o desenvolvedor esquece que estamos lidando com números de ponto flutuante em um ambiente de alta frequência.
Cronograma de Domínio Técnico Fase 1 Extração bruta de dados via TerminalInfoDouble e validação de logs. Fase 2 Criação de filtros lógicos para automação de ordens baseados em dados do terminal. Fase 3 Otimização de chamadas para reduzir overhead de processamento no OnTick. Workflow Operacional e Gestão de ErrosA rotina recomendada exige a separação entre a coleta do dado e a ação. Não aninhe a função TerminalInfoDouble() diretamente dentro de um IF complexo. Isso torna o debug um inferno. Declare a variável, armazene o valor e depois execute a lógica. É a diferença entre um código profissional e um amador. Para iniciantes, o choque vem na adaptação dos tipos. Tentar forçar um retorno double em um inteiro sem o cast correto gera avisos que poluem a compilação. Limpe seu código. Use a tipagem rigorosa. A produtividade prática surge quando você cria wrappers personalizados para as informações que mais utiliza, como o tempo de conexão ou a alavancagem real. Alerta de Precisão O Perigo do ArredondamentoValores de servidor podem variar em microssegundos. Sempre normalize os dados antes de disparar gatilhos de execução. Aceleração de Resultados e EstabilidadeQuer eficiência? Pare de chamar a função a cada tick se o dado que você busca não muda a cada milissegundo. A alavancagem da conta não oscila 10 vezes por segundo. Use um timer ou um contador de barras para atualizar a informação. Menos chamadas significam menos latência. O sinal de progresso real é quando seu Expert Advisor para de travar por erros de “zero divide” ou valores nulos inesperados. Isso acontece quando você implementa a validação de retorno imediata. Se o terminal retornar 0.0 em um campo onde isso é impossível, seu código deve saber abortar a operação antes de queimar a conta. Checklist de Implementação Segura
Resumo do Aprendizado Sintese Operacional O que aprendemos na prática sobre o Como utilizar ENUM_TERMINAL_INFO_DOUBLE? 1. Ponto Forte Principal Acesso preciso a dados críticos do servidor e conta em tempo real. 2. Cuidados e Cuidados Evitar comparações diretas (==) e excesso de chamadas no loop OnTick. 3. Veredito de Aplicação Essencial para qualquer EA que exija gestão de risco rigorosa. Pronto para aplicar esses passos e garantir as melhores condições? |
