Cursos Para Traders Estratégias Trader Guia Definitivo: ENUM_TERMINAL_INFO_INTEGER – Uso e Diagnóstico

Guia Definitivo: ENUM_TERMINAL_INFO_INTEGER – Uso e Diagnóstico

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

Cenário Ideal de Aplicação Validações de pré-execução, checagem de permissões de trading automático e diagnósticos de hardware/versão da VPS.
Gargalo ou Limite Operacional Tentativas de alterar configurações do terminal ou monitorar preços e spreads de ativos em tempo real.
Para conferir os detalhes técnicos da aplicação, consulte o painel de especificações do fabricante.

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.

Ver Referência Oficial e Exemplos

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 ChaveContexto CríticoAção Defensiva
TERMINAL_TRADE_ALLOWEDCont

Implementação Prática e Execução Progressiva

Esqueça tutoriais genéricos. ENUM_TERMINAL_INFO_INTEGER não é uma feature para “aprender”. É uma ferramenta de diagnóstico cirúrgico. Você chama TerminalInfoInteger() porque o seu Expert Advisor precisa saber *agora* se pode rodar. Se o terminal está conectado. Se há memória. Se o build suporta a função que você escreveu ontem. Não existe “configuração inicial”. Existe consulta de estado. Ponto final.

A maioria dos desenvolvedores trata isso como boilerplate. Colocam no OnInit(), checam TERMINAL_CONNECTED e TERMINAL_TRADE_ALLOWED, dão return(INIT_SUCCEEDED) e rezam. Erro fatal. O ambiente muda. A corretora troca de servidor. O VPS reinicia. O disco enche. Se você não monitora TERMINAL_DISK_SPACE e TERMINAL_MEMORY_AVAILABLE em tempo real, seu robô vira lixo eletrônico silencioso.

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 TERMINAL_PING_LAST (se disponível via build) e latência baixa. Um Swing Trader em M15 ignora ping, mas morre se TERMINAL_TRADE_ALLOWED virar false no fim de semana e ele tentar fechar posição à força. Contextualize. Sempre.

Não confie em TERMINAL_CONNECTED sozinho. Teste latência real com GetTickCount() antes e depois de OrderSend() simulado. Conexão “up” não garante execução.

Alerta de Arquitetura

Não cacheie estados terminais em variáveis globais estáticas

O terminal é um processo vivo. TERMINAL_MEMORY_AVAILABLE muda a cada alocação do GC do MQL5. TERMINAL_DISK_SPACE muda quando o log roda. Leia a enumeração no momento da decisão. Cachear TERMINAL_BUILD no OnInit é aceitável. Cachear permissões de trade é suicídio operacional.

Performance: TerminalInfoInteger é leve. Chamada direta ao kernel do terminal. Não há overhead mensurável para chamar a cada tick se você só lê o necessário. Não itere a enumeração inteira. Isso é amadorismo. Defina um enum interno com as 4 ou 5 propriedades críticas para *sua* lógica e itere apenas sobre elas.

Checklist de Blindagem Operacional

  • [✓] Verificar TERMINAL_BUILD contra MIN_REQUIRED_BUILD hardcoded no input do EA.
  • [✓] Implementar watchdog de TERMINAL_CONNECTED + TERMINAL_TRADE_ALLOWED com hysteresis (ex: 3 falhas consecutivas para pausar).
  • [✓] Testar comportamento em TERMINAL_DISK_SPACE < 500MB: O EA deve parar de gravar logs verbosos e alertar, não crashar.

Iniciantes copiam Print(TerminalInfoInteger(...)). Profissionais constroem Health Checks. A diferença é que o segundo dorme tranquilo quando o VPS reinicia às 3 da manhã. O primeiro acorda com a conta zerada.

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?

Acessar Referência Técnica MQL5

Deixe uma resposta

Related Post