Programar um robô que calcula lucro corretamente em Forex é simples. O problema real começa quando você tenta escalar esse mesmo código para índices, commodities ou ações, onde a lógica de “pontos” muda completamente.
O erro mais comum de quem ignora o ENUM_SYMBOL_CALC_MODE é assumir que o valor do tick é universal. Na prática, isso resulta em Expert Advisors (EAs) que calculam o tamanho do lote errado, levando a perdas catastróficas por puro erro de arredondamento ou conversão de moeda.
A Luta Contra a Inconsistência dos Ativos
O objetivo operacional aqui é garantir que o cálculo de lucro e margem seja agnóstico ao ativo. Você não quer escrever dez funções diferentes para dez ativos; você quer que o sistema identifique o modo de cálculo e ajuste a matemática automaticamente.
No dia a dia, a dificuldade reside na variação entre corretoras. Algumas tratam o cálculo de ativos sintéticos de forma distinta de ativos reais, e é nesse “limbo” que o código costuma falhar.
Se você não define corretamente o modo de cálculo, o robô pode interpretar que um movimento de 10 pontos em um índice equivale a 10 pontos no EURUSD. O resultado? Uma alavancagem involuntária e perigosa.
Para quem busca precisão cirúrgica, entender a documentação no guia de referências técnicas é o único caminho para evitar que o EA “alucine” os valores de profit.
A limitação prática é que o ENUM_SYMBOL_CALC_MODE depende de como o servidor da corretora entrega os dados. Se o broker fornece informações de tick inconsistentes, nem a melhor implementação de código salvará a operação.
⚙️ Onde o Cálculo de Símbolo Performa vs. Onde ele Engasga
Você passa horas ajustando um Expert Advisor. A lógica de entrada é cirúrgica, o gerenciamento de risco parece blindado. Daí roda o backtest no MetaTrader 5 e o resultado final não fecha. A margem consumida no log não bate com a calculadora manual. O lucro por pip está errado. O culpado costuma ser invisível: o modo de cálculo do ativo definido no servidor da corretora. Se o seu código assume SYMBOL_CALC_MODE_FOREX e o ativo é SYMBOL_CALC_MODE_CFD ou SYMBOL_CALC_MODE_FUTURES, cada ordem abre com tamanho errado, stop loss descalibrado e risco real desconhecido. Isso não é detalhe de implementação. É a diferença entre uma estratégia viável e uma conta zerada. Entender o ENUM_SYMBOL_CALC_MODE deixa de ser “documentação chata” e vira pré-requisito de sobrevivência. Qualquer robô que opere multiativos precisa consultar essa propriedade em tempo de execução antes de calcular volume, margem ou resultado projetado. Ignorar isso é apostar no escuro. A documentação oficial da MQL5 detalha cada enumeração, mas a aplicação prática é onde a maioria falha.
Pare de Adivinhar Margem: Domine o Cálculo Nativo do Ativo
Descubra como alinhar seu risco real ao modo de cálculo do servidor e eliminar surpresas no backtest e no live.
O momento em que o backtest mente para você
Rodei um EA em PETR4 (ação brasileira) assumindo modo Forex. O resultado: lucro líquido absurdo, drawdown irrisório. Levei para conta real. Primeira semana: margem insuficiente constante, stops estourados por ruído de lote mínimo, swap comendo capital. O ativo era SYMBOL_CALC_MODE_EXCH_STOCKS. O cálculo de margem usa alavancagem fixa da bolsa, não a da corretora. O valor do ponto (tick value) não é por lote padrão, é por contrato. Meu sizing estava 100x maior que o permitido. Perdi 3% da conta em dois dias para aprender o que a documentação avisava na primeira linha: “O modo de cálculo define fórmulas de margem, lucro, swap e valor do ponto”. Não tem atalho. Você lê SymbolInfoInteger(symbol, SYMBOL_CALC_MODE) no OnInit e ramifica a lógica. Ponto final.
Modos de cálculo: o que muda na prática
A enumeração tem 13 valores (build 4000+). Mas 90% do varejo esbarra em cinco. A tabela abaixo resume o impacto direto no seu código de gestão:
| Modo (Enum) | Ativos Típicos | Margem | Lucro / Prejuízo | Armadilha Comum |
|---|---|---|---|---|
| FOREX | EURUSD, GBPJPY | Lote * Tamanho / Alavancagem | (Close – Open) * Lote * Tamanho | Assumir que CFD segue essa regra |
| CFD / CFDINDEX | US500, XAUUSD, BTCUSD | Lote * Preço * %Margem / Alavancagem | (Close – Open) * Lote * TamanhoContrato | Tamanho do contrato varia (1, 10, 100) |


