Cursos Para Traders Estratégias Trader Guia Técnico: Como Usar ENUM_SYMBOL_INFO_INTEGER na Prática

Guia Técnico: Como Usar ENUM_SYMBOL_INFO_INTEGER na Prática

Na prática, quem mexe com a API de negociação de MetaTrader percebe que ENUM_SYMBOL_INFO_INTEGER não é só mais um enum. Ele decide o que pode ser lido de forma segura sobre um símbolo – spread, volume mínimo, taxa de swap – e, ao mesmo tempo, bloqueia quem tenta acessar campos que só existem em versões mais novas do terminal. O ponto de dor costuma ser a falta de exemplos claros: o desenvolvedor sabe que precisa chamar SymbolInfoInteger(), mas não tem certeza de quais valores são válidos nem de como tratar retornos inesperados.

Quando usar ENUM_SYMBOL_INFO_INTEGER na vida real

  • Construindo um scanner de oportunidades. Você quer filtrar pares que tenham digits igual a 5 e trade allowed ativo. O enum fornece os IDs exatos (por exemplo, SYMBOL_DIGITS e SYMBOL_TRADE_ALLOWED).
  • Validando parâmetros antes de abrir ordens. Se o SYMBOL_TRADE_EXEMODE indicar “no market”, aborta o trade para evitar rejeição.
  • Gerando relatórios de risco. Extrair SYMBOL_TRADE_TICK_VALUE e SYMBOL_TRADE_TICK_SIZE ajuda a calcular o valor de cada ponto.

Passo a passo com código comentado

EtapaTrechoObservação
1
int digits = 0; if(!SymbolInfoInteger(_Symbol, SYMBOL_DIGITS, digits)) Print("Falha ao ler dígitos");
Retorno false indica que o símbolo não está disponível ou que o enum não existe na build atual.
2
long tradeAllowed = 0; if(SymbolInfoInteger(_Symbol, SYMBOL_TRADE_ALLOWED, tradeAllowed) && tradeAllowed) Print("Negociação permitida");
Mesmo que o enum exista, o valor pode ser 0 (não permitido). Verifique ambos.
3
ulong swapLong = 0; if(!SymbolInfoInteger(_Symbol, SYMBOL_SWAP_LONG, swapLong)) Print("Swap longo indisponível – possivelmente versão antiga");
Um caso contra‑intuitivo: a ausência de SYMBOL_SWAP_LONG não significa que o swap é zero; pode ser que o terminal não suporte o campo ainda.

Limitações e armadilhas comuns

O enum só aceita int ou ulong como tipo de retorno. Tentar ler um campo que realmente armazena um double (como SYMBOL_TRADE_TICK_VALUE) provocará truncamento e resultados absurdos. Além disso, alguns IDs são “deprecated” em versões recentes; usar SYMBOL_SPREAD_FLOAT em um terminal que ainda só aceita inteiros gera ERR_INVALID_PARAMETER.

Como driblar falhas inesperadas

  • Cheque GetLastError() logo após cada chamada. Erros 4100‑4105 apontam para enum não suportado.
  • Implemente fallback: se SYMBOL_SWAP_LONG falhar, recorra a SymbolInfoDouble() com SYMBOL_SWAP_LONG (alguns builds ainda aceitam).
  • Use documentação oficial da MQL5 como referência de versão; ela lista quais enums foram introduzidos em cada release.

Próximo passo prático

Monte um pequeno script que percorra todos os símbolos do seu servidor, colete SYMBOL_TRADE_ALLOWED, SYMBOL_DIGITS e SYMBOL_TRADE_TICK_VALUE, e armazene em um CSV. Essa rotina simples revela imediatamente quais pares são descartáveis por falta de liquidez ou por restrições de negociação – informação que, em muitos casos, economiza horas de backtesting.

Depois de instalar a biblioteca que contém ENUM_SYMBOL_INFO_INTEGER, o primeiro passo é mapear os símbolos que serão monitorados. Cada símbolo tem um identificador inteiro que pode ser recuperado via SymbolInfoInteger(). Abaixo, a lista completa das propriedades disponíveis:

PropriedadeDescriçãoTipo
SYMBOL_TRADE_TICK_VALUEValor do tick em moeda basedouble
SYMBOL_TRADE_TICK_SIZETamanho mínimo de variação de preçodouble
SYMBOL_VOLUME_MINLote mínimo negociávelint
SYMBOL_VOLUME_MAXLote máximo negociávelint
SYMBOL_SPREADSpread atual em pontosint
SYMBOL_TRADE_MODEModo de negociação (0=Desativado, 1=Ativo)int

Configuração inicial – checklist rápido

  • 1. Definir lista de símbolos: crie um array string symbols[] = {"EURUSD","GBPJPY","USDJPY"};
  • 2. Carregar IDs: para cada símbolo, chame int id = SymbolInfoInteger(symbol, SYMBOL_TRADE_MODE); e armazene em um map ou dictionary.
  • 3. Validar disponibilidade: se id == 0, o símbolo está desativado – remova da lista.
  • 4. Configurar timer: use EventSetTimer(1); para atualizar valores a cada segundo.
  • 5. Testar em modo visual: rode o script no MetaEditor em modo “Strategy Tester” antes de colocar em produção.

Rotina recomendada – fluxo de trabalho diário

1️⃣ Início da sessão: execute a função InitSymbols() que preenche o dicionário de IDs e verifica limites de volume. 2️⃣ Loop de monitoramento: dentro de OnTimer(), recupere SYMBOL_SPREAD e SYMBOL_TRADE_TICK_VALUE para cada ativo. 3️⃣ Filtro de oportunidades: aplique regras simples, por exemplo, if(spread < 2 && tickValue > 0.1) signal = true;. 4️⃣ Execução de ordem: chame OrderSend() somente quando signal for true e o volume estiver dentro de SYMBOL_VOLUME_MIN e SYMBOL_VOLUME_MAX. 5️⃣ Fechamento: ao final do dia, salve um log CSV com FileWrite() contendo timestamp, símbolo, spread e resultado da ordem.

Erros comuns e como evitá‑los

  • Uso de IDs desatualizados: sempre recarregue o dicionário após eventos de reconexão ou mudança de sessão.
  • Ignorar o modo de negociação: SYMBOL_TRADE_MODE pode mudar para 0 durante manutenção; verifique antes de enviar ordens.
  • Overflow de volume: ao somar múltiplas posições, some os volumes e compare com SYMBOL_VOLUME_MAX para evitar rejeição.
  • Timer excessivo: intervalos menores que 500 ms podem sobrecarregar o servidor; mantenha 1 s ou mais.

Mini‑dashboard de progresso (texto)

IndicadorStatusMeta
Sinais gerados12≥ 20/dia
Ordens executadas8≥ 15/dia
Taxa de acerto66 %≥ 70 %
Tempo médio de resposta0.9 s≤ 1 s

Monitorar esses números diariamente permite ajustar parâmetros antes que pequenos desvios se tornem perdas significativas.

Habitos complementares para acelerar resultados

• Revisar o log ao final de cada sessão e anotar padrões de spread.

• Atualizar a lista de símbolos semanalmente, removendo ativos com volume insuficiente.

• Integrar alertas por e‑mail ou Telegram usando SendNotification() para sinais críticos.

Seguindo esse roadmap, a implementação de ENUM_SYMBOL_INFO_INTEGER evolui de um simples mapeamento para um motor de decisões robusto, pronto para escalar conforme a carteira cresce.

Perfil ideal e limitações práticas do ENUM_SYMBOL_INFO_INTEGER

Quem trabalha com desenvolvimento de indicadores personalizados no MetaTrader 5 e precisa de acesso direto a valores numéricos de símbolos deve considerar seriamente o ENUM_SYMBOL_INFO_INTEGER. Não é brinquedo para quem apenas consulta preços.

Quem realmente ganha com esse enum

  • Programadores de EAs avançados que manipulam margens, limites de lote e alavancagem via SymbolInfoInteger;
  • Analistas quantitativos que constroem bancos de dados de propriedades de ativos para back‑testing de estratégias multi‑mercado;
  • Consultores de risco que precisam validar parâmetros de negociação em tempo real antes de abrir posições.

Quem provavelmente vai desperdiçar tempo

  • Traders de varejo que só fazem scalping visual e nunca mexem em código;
  • Desenvolvedores iniciantes que ainda não dominam o conceito de enumerações em MQL5;
  • Quem espera que o enum retorne valores de indicadores técnicos (ele não faz isso).

Limitações contextuais que não podem ser ignoradas

O ENUM_SYMBOL_INFO_INTEGER só entrega informações já disponíveis no cache interno do servidor. Se o corretor restringe a exposição de certos atributos (ex.: SYMBOL_TRADE_MODE para contas de demonstração), o retorno será NULL ou -1. Além disso, o acesso tem latência mínima, mas não é instantâneo; usar em loops de alta frequência pode gerar “overhead” perceptível.

FAQ rápido

PerguntaResposta
Posso usar para obter o spread?Não. Use SymbolInfoDouble com SYMBOL_SPREAD.
O enum funciona em contas de demonstração?Parcialmente; alguns campos são bloqueados.
Qual a melhor prática de checagem?Teste sempre o retorno contra -1 antes de usar.

Checklist de aderência

  • Já conhece SymbolInfoInteger()?
  • Precisa de valores inteiros (não flutuantes) de propriedades de símbolos?
  • Seu corretor fornece acesso total aos atributos de símbolo?
  • Tem familiaridade com tratamento de erros em MQL5?

Parecer editorial

Em termos de custo‑benefício, o ENUM_SYMBOL_INFO_INTEGER se mostra indispensável para profissionais que constroem infraestruturas de negociação automatizada robustas. Não há “magia” escondida; ele simplesmente abre a porta para leitura de parâmetros críticos, sem nenhum recurso extra. Se você se encaixa no perfil acima, a expectativa realista é ganhar precisão de configuração e reduzir bugs de inicialização de EAs. Se seu nível ainda é básico, o investimento de tempo na curva de aprendizagem supera o ganho imediato.

Próximos passos: implemente um módulo de validação que capture -1 e registre fallback; depois, experimente combinar com ENUM_SYMBOL_INFO_DOUBLE para cobrir o espectro completo de atributos.

Acesse a página oficial

Deixe uma resposta

Related Post