Programar em MQL5 exige mais do que dominar a lógica de entrada e saída; exige que o código “entenda” onde está rodando. O ENUM_TERMINAL_INFO_INTEGER é a ferramenta de diagnóstico que permite ao desenvolvedor interrogar o MetaTrader 5 sobre suas próprias configurações e estado operacional.
Na prática, a dificuldade não está em chamar a função, mas em saber qual propriedade monitorar para evitar que um Expert Advisor (EA) execute ordens em um ambiente inadequado ou trave por falta de recursos do sistema.
A Realidade Operacional do Diagnóstico
O objetivo operacional aqui é a redundância. Um desenvolvedor mediano assume que o terminal está configurado corretamente. Um profissional usa o ENUM_TERMINAL_INFO_INTEGER para validar se o “Algo Trading” está ativo antes de tentar disparar uma ordem.
Imagine o cenário: você aluga uma VPS, instala seu robô e ele simplesmente não opera. Sem a verificação de propriedades como TERMINAL_TRADE_ALLOWED, você passaria horas revisando a estratégia, quando o problema era apenas um botão desligado na interface do usuário.
A ferramenta atua como um sensor de ambiente. Ela permite que o código tome decisões baseadas em fatos técnicos, como a quantidade de memória disponível ou a versão do build do terminal, evitando crashes em versões obsoletas.
Contudo, há limitações. O ENUM_TERMINAL_INFO_INTEGER é estritamente para leitura. Você consegue saber que o trading está desativado, mas não consegue forçar a ativação via código por questões de segurança do MetaQuotes.
Muitos cometem o erro de tentar usar essa enumeração para monitorar dados de mercado ou da conta. Para isso, existem outras funções. Tentar extrair a volatilidade de um ativo usando informações do terminal é um erro básico de arquitetura que gera código ineficiente.
Para quem busca otimizar a infraestrutura de execução, entender esses parâmetros é o que separa um script amador de um sistema de trading robusto e resiliente a falhas de ambiente. Você pode aprofundar esses conceitos no painel de especificações do fabricante.
⚙️ Onde o ENUM_TERMINAL_INFO_INTEGER performa vs onde ele engasga
Muitos desenvolvedores MQL5 passam horas depurando um Expert Advisor que “funciona no backtest” mas falha misteriosamente em conta real. O culpado costuma ser o ambiente de execução: spread alargado, limitações de *hedging/netting*, precisão do *tick* ou até a versão do build do terminal. Ignorar essas variáveis é como pilotar um avião sem olhar o painel de instrumentos. A enumeração `ENUM_TERMINAL_INFO_INTEGER` existe justamente para transformar essas caixas-pretas em dados legíveis pelo seu código, permitindo que o robô se adapte ou se recuse a operar em condições adversas. Se você já viu um EA abrir posições com slippage absurdo porque não checou `TERMINAL_TRADE_ALLOWED` ou `TERMINAL_CONNECTED` no momento exato, sabe o preço da negligência. A documentação oficial lista as propriedades, mas raramente explica a orquestração prática entre elas — e é aí que mora o perigo. Para quem busca a referência técnica completa e atualizada, a documentação oficial da MetaQuotes continua sendo a fonte primária indiscutível.
Seu EA Conhece o Terreno Onde Pisa?
Pare de adivinhar o estado do terminal. Domine as propriedades inteiras que separam amadores de profissionais em automação.
O “Pulo do Gato”: Lendo o Ambiente Antes de Atirar
A maioria dos programadores usa `TerminalInfoInteger()` de forma reativa. Verifica se está conectado *depois* de tentar enviar a ordem. Erro tático. O uso profissional é preditivo. Você constrói uma “camada de sanidade” no `OnTick()` ou no `OnTimer()` que valida o ecossistema *antes* de qualquer lógica de sinal ser processada.
Pense nas propriedades `TERMINAL_CPU_CORES`, `TERMINAL_MEMORY_PHYSICAL` e `TERMINAL_MEMORY_AVAILABLE`. Elas não servem apenas para curiosidade. Um EA pesado de Machine Learning ou processamento de múltiplos timeframes pode travar um VPS modesto. Ler `TERMINAL_MEMORY_AVAILABLE` permite implementar *throttling* dinâmico: se a RAM livre cai abaixo de um limiar (ex: 500MB), o EA reduz a frequência de `OnTimer` ou desliga módulos não essenciais (como logging verboso ou cálculos de correlação complexos). Isso evita o crash silencioso do terminal — aquele que não deixa log, apenas some do VPS.
Outro ponto crítico: `TERMINAL_DPI`. Parece irrelevante até você distribuir um painel gráfico (`CCanvas` ou `CHart`) para clientes. Um painel perfeitamente alinhado em 96 DPI (padrão) quebra completamente em monitores 4K com scaling de 150% ou 200% (`TERMINAL_DPI` retornando 144 ou 192). Sem ler essa propriedade no `OnInit`, seus botões ficam inalcançáveis, textos sobrepostos. O usuário culpa o código; a culpa é da falta de query ao ambiente.
Conectividade Real vs. “Conectado na Interface”
Existe uma armadilha clássica: `TERMINAL_CONNECTED` retorna `true`, mas `TERMINAL_TRADE_ALLOWED` retorna `false`. Isso acontece em contas *Investor* (somente leitura), contas em *disable trade* pelo servidor da corretora, ou quando a autenticação de dois fatores (2FA) expirou no terminal móvel mas o desktop mantém a sessão “zumbi”.
Um bloco de validação robusto se parece com isto:
bool SanityCheck() { if(!TerminalInfoInteger(TERMINAL_CONNECTED)) { Print("Sem conexão com servidor de trade."); return false; } if(!TerminalInfoInteger(TERMINAL_TRADE_ALLOWED)) { Print("Trade desabilitado no terminal (config ou conta investor)."); return false; } if(!TerminalInfoInteger(TERMINAL_DLLS_ALLOWED) && PrecisaDLL) { Print("DLLs não permitidas. EA não pode funcionar."); return false; } // Verificação de ping via TERMINAL_PING_LAST (disponível em builds recentes) long ping = TerminalInfoInteger(TERMINAL_PING_LAST); if(ping > 500) { // ms PrintFormat("Latência alta: %d ms. Risco de requote/slippage.", ping); // Não retorna false necessariamente, mas pode logar alerta } return true; }Note o uso de `TERMINAL_PING_LAST`. Muitos ignoram. Um ping de 300ms+ em scalping de M1/M5 é sentença de morte. O EA deve saber disso *antes* de calcular o tamanho do lote.
Modo de Conta: Hedging vs. Netting — O Assassino Silencioso de Lógica
`TERMINAL_TRADE_MODE` (ou melhor, `ACCOUNT_TRADE_MODE` via `AccountInfoInteger`, mas o terminal reflete isso) dita a arquitetura do seu gerenciamento de posição. Em *Netting* (comum em bolsas, Futuros, Ações BR), você tem **uma** posição por símbolo. Em *Hedging* (Forex padrão), você tem **múltiplas** posições.
Se seu código faz `PositionSelect(_Symbol)` assumindo que retorna a posição única, ele falha em Hedging se houver duas posições (Buy e Sell) — ele pegará a primeira da lista, aleatoriamente. Em Netting, `PositionSelect` funciona, mas `OrdersTotal()` conta ordens pendentes, não posições abertas. A confusão entre `PositionsTotal()` e `OrdersTotal()` é a maior fonte de bugs de “contagem de posição” que vejo em revisões de código freelance.
| Propriedade Chave | Contexto Crítico | Ação Defensiva |
|---|---|---|
| TERMINAL_TRADE_ALLOWED | ContImplementação Prática e Execução ProgressivaEsqueça tutoriais genéricos. A maioria dos desenvolvedores trata isso como boilerplate. Colocam no Cronograma de Integração de Diagnóstico Fase 1 Validação dura no OnInit: Build mínimo, permissão de trade, ponteira de rede ativa. Falha? Para tudo. Sem INIT_FAILED o EA não sobe. Fase 2 Monitoramento cíclico no OnTick ou OnTimer: Checagem de TERMINAL_CONNECTED, espaço em disco (TERMINAL_DISK_SPACE) e RAM livre. Thresholds definidos por você, não pelo padrão. Fase 3 Auto-recuperação e telemetria: Log estruturado de mudanças de estado. Alerta via Telegram/Email se TERMINAL_CPU_CORES reportar throttling ou se TERMINAL_COMMUNITY_ACCOUNT mudar (sinal de conta migrada).O segredo não é chamar a função. É interpretar o retorno no contexto da sua estratégia. Um Scalper em HFT precisa de
Alerta de Arquitetura Não cacheie estados terminais em variáveis globais estáticasO terminal é um processo vivo. Performance: Checklist de Blindagem Operacional
Iniciantes copiam Resumo do Aprendizado Sintese Operacional O que aprendemos na prática sobre o Como utilizar ENUM_TERMINAL_INFO_INTEGER? 1. Ponto Forte Principal Acesso direto e de custo zero ao estado de saúde do runtime MQL5. Permite EAs resilientes que se adaptam ao ambiente, não apenas ao preço. 2. Cuidados e Cuidados Não substitui validação de rede real (ping/latência). Retorna estado do *terminal*, não do *servidor de trade*. Confiar cegamente em CONNECTED causa slippage invisível e requotes em massa. 3. Veredito de Aplicação Obrigatório para qualquer EA em produção real. Quem opera sem checar TRADE_ALLOWED, DISK_SPACE e MEMORY_AVAILABLE ciclicamente está jogando roleta russa com capital alheio.Pronto para aplicar esses passos e garantir as melhores condições? |

