Bloco 1 - Configurações Iniciais
Antes de qualquer linha de código que faça operações em ambiente simulado para avaliar a sua estratégia, é fundamental preparar o terreno: estabelecer propriedades, incluir recursos, definir classes, parâmetros e estruturas que darão sustentação ao Robô (Expert Advisor - EA). Neste primeiro módulo, constam em MQL5, de forma clara, as configurações iniciais com a seguinte composição:
Bloco 1. Configurações Iniciais
├── 1.1 Propriedades
├── 1.2 Inclusões
├── 1.3 Classes
├── 1.4 Definições
├── 1.5 Parâmetros de entrada
├── 1.6 Variáveis Globais
└── 1.7 Estruturas de Dados

1.1 Propriedades.
Nesta seção, definimos metadados e configurações globais do robô (EA), que aparecem na janela “Propriedades” do MetaTrader 5. Aqui, registramos informações como nome, link do autor, versão e direitos de uso. Além de organizar o projeto, as propriedades permitem identificar rapidamente o propósito e o contexto de cada robô, especialmente em ambientes colaborativos e de testes extensivos.
Em rol exemplificativo, para o nosso propósito, as propriedades gerais mais relevantes são:
#property copyright "Nome do Autor";
#property link "URL";
#property version "X.XX";
#property description "Texto sobre as características do seu robô";
Dessa forma, as propriedades constarão no arquivo inicial gerado no Meta Editor, conforme explicação contida no Vídeo 1B da Seção Estrutura.
Ao final do Bloco 1, consta a explicação de como colar todas as configurações iniciais no arquivo de edição do código do seu robô.
1.2 Inclusões.
O comando #include traz para dentro do seu EA bibliotecas externas, arquivos de cabeçalho (.mqh) e classes auxiliares. Ao centralizar funções e definições comuns em arquivos separados, você evita duplicação de código, facilita atualizações e mantém sua lógica limpa. Nesta etapa, você lista todas as dependências necessárias - indicadores personalizados, utilitários de log, módulos de comunicação - assegurando que tudo estará disponível no momento da compilação. São exemplos:
#include <Trade\Trade.mqh>: Fornece a classe CTrade, que simplifica o envio de ordens de mercado, ordens pendentes, modificação de posições e ordens, e fechamento de posições. Sem ele, você teria que usar as funções de trading de baixo nível (OrderSend, OrderModify, OrderClose, etc.), que são mais complexas e propensas a erros;
#include <Trade\DealInfo.mqh>: Permite acesso a informações detalhadas sobre as transações já executadas (CDealInfo). É complementar às classes COrderInfo e CPositionInfo, proporciona uma visão completa do histórico de negociações;
#include <Trade\OrderInfo.mqh>: Traz a classe COrderInfo, que oferece detalhes sobre ordens pendentes e o histórico de ordens (inclusive as que não resultaram em posições);
#include <Trade\PositionInfo.mqh>: Importa a classe CPositionInfo, fundamental para EA que precisa gerenciar múltiplas posições simultâneas ou analisar propriedades de posições abertas, como lucro, volume e tempo de abertura;
#include <Trade\AccountInfo.mqh>: Traz a classe CAccountInfo, usada para acessar informações da conta de trading: saldo, patrimônio, margem usada e disponível, lucro atual, alavancagem, entre outros;
#include <Trade\SymbolInfo.mqh>: Biblioteca padrão do MQL5 e contém uma classe para manipulação e acesso a informações de símbolos;
#include <Files\File.mqh>: Permite a leitura e gravação de dados em arquivos, como logs de negociação, dados para machine learn;
#include <tools\DateTime.mqh>: Contém a classe CDateTime e funções auxiliares para manipular datas e horários, formatar strings de tempo, etc. Útil para logging, filtros baseados em tempo, ou exibir informações de tempo para o usuário;
#include <Canvas\Canvas.mqh>: Permite desenho de gráficos personalizados, painéis interativos e interfaces visuais diretamente no gráfico do MetaTrader. Ideal para dashboards, controles manuais ou visualizações avançadas.
1.3 Classes.
As classes são estruturas fundamentais da programação orientada a objetos, e no contexto de desenvolvimento de EA no MQL5, elas permitem organizar o código de forma modular, reutilizável e escalável. Ao definir classes, você agrupa dados (atributos) e comportamentos (métodos) relacionados em uma única unidade lógica. Isso ajuda a encapsular funcionalidades específicas do robô, reduz a complexidade geral do código e facilita manutenções futuras.
CTrade trade: Encapsula as operações de negociação (compra, venda, modificação e fechamento de ordens e posições). Simplifica o uso das funções de trade ao substituir chamadas de baixo nível, OrderSend(), OrderClose(), por métodos mais intuitivos, como Buy(), Sell(), PositionClose();
CDealInfo: Fornece acesso estruturado às informações de negócios já executados, como preço, volume, tipo de transação e ticket. Permite analisar o histórico de execuções (incluindo parciais), o que é essencial para estatísticas e avaliação de desempenho;
COrderInfo: Representa e fornece acesso às informações de ordens pendentes ou históricas que ainda não geraram execução. Facilita o monitoramento e gerenciamento de ordens abertas ou canceladas, sem precisar usar funções como HistoryOrderGet();
CPositionInfo: Representa uma posição aberta atual no mercado e fornece métodos para acessar seus atributos, preço, volume, lucro. Torna o gerenciamento de posições mais simples e claro em comparação com chamadas diretas como PositionGet();
CDateTime: Classe utilitária para manipulação de datas e horários no MQL5. Oferece funções orientadas a objetos para comparação de datas, cálculo de intervalos, conversões e formatação de tempo - mais prático do que lidar diretamente com valores datetime;
CAccountInfo: Fornece acesso estruturado aos dados da conta de negociação, como saldo, margem, alavancagem, número da conta e tipo (demo/real). Evita múltiplas chamadas às funções globais AccountInfo(), organizando todos os dados da conta em uma única interface;
CSymbolInfo: Encapsula as propriedades de um símbolo (ativo), como tamanho do lote, spread, valor do tick, margem, etc. Substitui as funções SymbolInfoDouble(), SymbolInfoInteger() e SymbolInfoString() por uma abordagem orientada a objetos, mais clara e segura.
1.4 Definições.
As diretivas #define e constantes const são usadas para parametrizar valores fixos no código - como tamanhos de buffers, limites de deslizamento, nomes de rótulos gráficos e cores - de forma centralizada. Ao centralizar esses valores em um único bloco de definições, você ganha em organização, clareza e flexibilidade: qualquer ajuste futuro pode ser feito de forma rápida, sem a necessidade de procurar e alterar valores “hard coded” (valores fixos embutidos no meio do código).
1.5 Parâmetros de Entrada.
Os parâmetros de entrada (input) transformam seu EA em uma ferramenta configurável diretamente pelo usuário, sem a necessidade de recompilar. São variáveis que aparecem na aba Parâmetros de Entrada do Testador de Estratégia no MetaTrader 5 ao anexar o robô a um gráfico, permitindo ajustar períodos de indicadores, tamanhos de lote, limites de stop loss e take profit, entre outros. Definir cuidadosamente esses inputs, com descrições claras e faixas de valores adequadas, é importante para uma boa experiência de teste e otimização.
1.6 Variáveis Globais.
Variáveis globais armazenam estados e contadores que precisam ser acessados por diferentes partes do código ao longo de vários ticks. Exemplos típicos incluem o identificador de uma ordem aberta, o número de toques de preço em um suporte ou uma flag indicando que uma condição de entrada foi satisfeita. É importante nomeá-las de forma assertiva e inicializá-las adequadamente para evitar comportamentos inesperados durante a execução do EA.
1.7 Estruturas de Dados.
Quando há necessidade de agrupar informações relacionadas - como parâmetros de um indicador, resultados de cálculos ou configuração de ordens - utilizamos structs. Elas permitem criar “pacotes” de variáveis tipadas que representam, por exemplo, a configuração completa de um sinal de entrada (SignalConfig), com campos para período, nível de sobrecompra e tolerância de cruzamento. As estruturas tornam o código mais legível e seguro, pois reforçam a correlação lógica entre dados que devem caminhar juntos.
1.8 Integração do Bloco 1.
Os subitens que compõem o Bloco 1 atuam de forma integrada para estabelecer as bases do robô de negociação. As propriedades (1.1) garantem a identificação e a documentação do código, enquanto as inclusões (1.2) adicionam bibliotecas essenciais para manipular ordens, posições, contas e símbolos. Essas bibliotecas são acessadas por meio das classes instanciadas (1.3), que fornecem a estrutura operacional necessária para executar comandos de negociação e coletar informações em tempo real.
Na sequência, as definições (1.4) estabelecem constantes e funções auxiliares, criando padrões de comportamento que serão utilizados em todo o programa. Os parâmetros de entrada (1.5) permitem configurar variáveis ajustáveis, como tamanho de lote, níveis de stop loss e períodos de médias móveis, facilitando a adaptação do EA a diferentes estratégias e condições de mercado.
As variáveis globais (1.6) concentram informações dinâmicas, como identificadores de indicadores técnicos, buffers de dados e regras de risco, funcionando como elementos de memória que sustentam a lógica operacional. Por fim, as estruturas de dados (1.7) organizam informações de ticks e candles, fornecendo a base histórica e em tempo real necessária para análises de preço e tomada de decisão.
Assim, cada subitem cumpre um papel específico, mas somente a integração entre eles garante a coerência do bloco e a estabilidade do ambiente inicial do Expert Advisor. Esse alicerce bem estruturado é o que permite que, nos módulos seguintes, o código avance para a implementação das regras de entrada, saída e gerenciamento de operações.
Isto posto, copie o código a seguir, com as configurações iniciais, e cole-o no arquivo criado no Meta Editor, conforme orientação contida no vídeo IB da página Estrutura.

Para avançar ou retornar para revisar módulos do código, você pode utilizar os botões a seguir:
Indicadores
Produtos
Artigos
Determine
Estudo Semanal
Robô MQL5
