Ao programar um Expert Advisor ou um indicador no MetaTrader 5, a primeira dor de cabeça costuma ser a repetição de valores fixos – spreads, períodos, limites de risco – espalhados por todo o código. Cada mudança exige busca‑e‑substituição, aumenta o risco de erro e dificulta a manutenção. Definir constantes globais resolve isso: um único ponto de ajuste, clareza semântica e menos chance de “bug fantasma”.
Quando usar constantes globais
- Parâmetros de estratégia: tamanho de lote, nível de stop‑loss, taxa de comissão.
- Limites de plataforma: número máximo de ordens, intervalo de tempo suportado.
- Valores de referência: símbolos de moedas, cores de desenho.
Como declarar
Em MQL5, a palavra‑chave enum ou input const costuma ser a escolha. O escopo global exige colocar a declaração fora de qualquer função, geralmente no topo do arquivo .mq5.
// Exemplo prático enum { MAX_ORDERS = 10, SLIPPAGE = 3 }; input const double RISK_PERCENT = 1.5; // 1,5 % do saldo input const string BASE_SYMBOL = "EURUSD"; Essas linhas criam valores imutáveis que podem ser lidos por qualquer função, sem risco de serem sobrescritos.
Organização para escalabilidade
Separar constantes por categorias evita poluição visual. Crie arquivos auxiliares .mqh e inclua‑os com #include. Assim, ao migrar a estratégia para outro par ou timeframe, basta trocar o arquivo de configuração.
#include Essa prática reduz o acoplamento e facilita testes A/B, já que mudar um único arquivo gera um novo comportamento sem recompilar todo o código.
Limitações e armadilhas
- Imutabilidade: constantes não podem ser recalculadas em tempo de execução. Se precisar de ajuste dinâmico, prefira
inputsemconstou variáveis globais. - Escopo global excessivo: declarar tudo como constante pode esconder dependências reais, dificultando depuração.
- Conflitos de nomes: MQL5 não tem namespaces; nomes idênticos em arquivos diferentes sobrescrevem silenciosamente.
FAQ rápido
- Posso usar constantes dentro de funções? Sim, mas elas ainda são lidas do escopo global.
- Constantes podem ser usadas em
#define? Não diretamente;#defineocorre na pré‑compilação, enquantoconsté resolvido em tempo de execução. - O que fazer se precisar mudar um valor em tempo real? Substitua a constante por uma
inputnão‑const ou por uma variável global atualizada via interface de usuário.
Adotar constantes globais é, na prática, um pequeno investimento que paga dividendos em estabilidade e rapidez de iteração. Se quiser ver um exemplo completo de um EA que usa essa abordagem, dê uma olhada na documentação oficial da MQL5. O próximo passo? Crie um header com as suas constantes e teste a diferença na primeira recompilação.
Primeiros passos após abrir o MetaEditor
1. Crie um novo arquivo .mq5 ou abra o Include padrão que será compartilhado por todos os scripts.
2. Defina o diretório Include como MQL5\Include. Arquivos ali são automaticamente reconhecidos como globais.
3. Salve o arquivo com um nome auto‑explicativo, por exemplo Globals.mqh. Essa convenção facilita a manutenção.
Organização das constantes
Utilize o padrão #property strict para garantir a compilação sem warnings. Em seguida, agrupe as constantes por domínio de negócio:
- Parâmetros de risco:
const double RISK_PERCENT = 0.02; - Identificadores de símbolos:
const string EURUSD = "EURUSD"; - Configurações de tempo:
const ENUM_TIMEFRAMES TF_MAIN = PERIOD_H1;
Evite misturar tipos diferentes na mesma linha; a clareza supera a economia de linhas.
Implementação prática – exemplo completo
| Bloco | Código |
|---|---|
| Include global | #property strict // Globals.mqh const double RISK_PERCENT = 0.02; const string SYMBOL_MAIN = "EURUSD"; const ENUM_TIMEFRAMES TF_MAIN = PERIOD_H1; const int SLIPPAGE = 3; |
| Uso no EA | #include |
Observe que #include injeta todas as definições sem precisar repetir código.
Checklist operacional para evitar erros comuns
- Nome único – nunca reutilize nomes já existentes no núcleo da linguagem.
- Escopo correto –
constfora de funções garante globalidade; dentro de funções cria escopo local. - Tipo consistente – verifique se
doublenão foi declarado comointpor engano. - Compilação limpa – use
#property stricte#pragma onceno cabeçalho para prevenir múltiplas inclusões. - Teste unitário – crie um script mínimo que apenas imprima as constantes; assim valida a carga do include.
Rotina recomendada – workflow semanal
Segunda‑feira: revisão de parâmetros de risco (RISK_PERCENT).
Quarta‑feira: atualização de símbolos (SYMBOL_MAIN) conforme calendário econômico.
Sexta‑feira: auditoria de #include para remover constantes obsoletas.
⚠️ Dica rápida: ao mudar um valor constante, recompilar apenas o include já atualiza todos os EAs que o utilizam, economizando horas de refatoração.
Como evitar abandono do projeto
Documente cada constante com um comentário de linha única, por exemplo // risco máximo por trade (2%). Quando o código está auto‑explicativo, a motivação para revisitar e melhorar permanece alta.
Para quem está começando, copie o arquivo Globals.mqh para um repositório Git pessoal. Cada commit registra a evolução das configurações, facilitando rollback caso um ajuste cause perdas.
Pronto para baixar o template? Clique aqui e importe o Globals.mqh no seu diretório Include.
Perfil ideal e limites de uso
Se você desenvolve robôs para MetaTrader 5 e já cansou de digitar valores mágicos espalhados pelo código, este guia de constantes globais tem mais a ver com sua rotina do que com teoria.
Quem realmente ganha
- Programadores intermediários que já dominam a sintaxe MQL5, mas ainda não estruturam projetos maiores.
- Times que mantêm várias versões de Expert Advisors e precisam de um ponto único de atualização.
- Freelancers que entregam módulos reutilizáveis e querem reduzir retrabalho.
Quem pode ficar no vácuo
- Iniciantes absolutos que ainda não entendem variáveis locais – o ganho de usar constantes será imediato, mas o custo mental pode ser alto.
- Operadores que trabalham exclusivamente com indicadores de curta duração, onde hard‑code de parâmetros não gera manutenção.
- Quem já migra para linguagens de alto nível (C# via .NET) – a abordagem MQL5 pode ser limitada.
Limitações práticas
Constantes globais são imutáveis: não servem para parâmetros que mudam entre sessões ou dependem de dados de mercado em tempo real. Se precisar de ajustes dinâmicos, combine-as com arquivos de configuração externos ou variáveis estáticas.
O escopo global pode poluir o namespace, especialmente em projetos com dezenas de arquivos. Use prefixes claros (e.g., CFG_) ou agrupe dentro de enum para evitar colisões.
FAQ contextual
| Pergunta | Resposta |
|---|---|
| Posso declarar constantes dentro de uma classe? | Sim, mas elas permanecem estáticas e não podem ser redefinidas por herança. |
| Constantes suportam tipos complexos? | Somente tipos nativos e structs simples – nada de objetos ou ponteiros. |
Qual a diferença entre enum e const? | enum gera valores sequenciais automaticamente, útil para IDs; const aceita qualquer literal. |
Checklist rápido
- Defina um prefixo padrão (
CFG_,MAX_). - Centralize todas as constantes em um único arquivo
.mq5. - Inclua o arquivo nos módulos com
#include. - Teste recompilação após cada alteração – o compilador falha imediatamente se houver conflito.
Parecer editorial equilibrado
O conteúdo entrega exatamente o que promete: um norte prático para quem quer “escrever menos, manter mais”. Não há promessa de performance milagrosa, mas a clareza de código costuma traduzir‑se em menos bugs e manutenção mais barata. Para quem já lida com centenas de parâmetros, a relação custo‑benefício é alta. Para o nerd que troca parâmetros a dedo em um script de 50 linhas, o ganho pode ser marginal.
Mini cenários reais
Um trader automatizado que usa STOP_LOSS_PIPS e TAKE_PROFIT_PIPS como constantes reduz a chance de esquecer de atualizar um dos dois ao mudar a estratégia. Quando a volatilidade aumenta, basta mudar o valor em um único ponto e recompilar.
Um gestor de portfólio que mantém 12 EAs diferentes consegue alinhar o MAX_TRADE_COUNT sem abrir cada arquivo: #define MAX_TRADE_COUNT 5 no arquivo master garante consistência.
Próximos passos
Depois de implementar, monitore o número de recompilações mensais. Se cair, a abordagem está funcionando. Caso contrário, revê a granularidade das constantes – talvez seja hora de dividir em módulos temáticos.

