Artigos com exemplos de como programar na linguagem MQL5

icon

Inúmeros artigos com exemplos sobre como criar indicadores e robôs de negociação para a plataforma MetaTrader na linguagem MQL5 esperam por você. Cada artigo é acompanhado de códigos-fonte, que você pode abrir no MetaEditor e executar por conta própria.

Esses artigos serão úteis tanto para quem está se iniciando na negociação automatizada, bem como traders capacitados com experiência em programação e negociação. Aqui você encontrará não apenas exemplos, mas também novas ideias.

Novo artigo
recentes | melhores
Biblioteca para desenvolvimento fácil e rápido de programas para a MetaTrader (parte XII): Implementação da classe de objeto "Conta" e da coleção de objetos da conta
Biblioteca para desenvolvimento fácil e rápido de programas para a MetaTrader (parte XII): Implementação da classe de objeto "Conta" e da coleção de objetos da conta

Biblioteca para desenvolvimento fácil e rápido de programas para a MetaTrader (parte XII): Implementação da classe de objeto "Conta" e da coleção de objetos da conta

No artigo anterior, nós definimos os eventos de encerramento de posição para a MQL4 na biblioteca e nos livramos das propriedades de ordem não utilizadas. Aqui, nós vamos considerar a criação do objeto Conta, desenvolver a coleção de objetos da conta e preparar a funcionalidade para monitorar os eventos da conta.
Abordagem orientada a objetos para construção de painéis de múltiplos períodos de tempo e múltiplas moedas
Abordagem orientada a objetos para construção de painéis de múltiplos períodos de tempo e múltiplas moedas

Abordagem orientada a objetos para construção de painéis de múltiplos períodos de tempo e múltiplas moedas

Este artigo descreve como a programação orientada a objetos pode ser usada para criar painéis de múltiplos períodos de tempo múltiplas moedas para o MetaTrader 5. O principal objetivo é construir um painel universal, que pode ser utilizado para exibição de diversos tipos diferentes de dados, tal como preços, variação de preços, valores de indicador ou condições personalizadas de compra/venda, sem a necessidade de modificar o código do painel em si.
Uma solução livre de DLL para comunicação entre os terminais MetaTrader utilizando pipes nomeados
Uma solução livre de DLL para comunicação entre os terminais MetaTrader utilizando pipes nomeados

Uma solução livre de DLL para comunicação entre os terminais MetaTrader utilizando pipes nomeados

O artigo descreve como implementar a Comunicação Interprocesso entre os terminais do cliente MetaTrader 5 usando pipes nomeados. Para o uso de pipes nomeados, a classe CNamedPipes é desenvolvida. Para o teste de seu uso e medir a conexão por ele, o indicador de tick, o servidor e os scripts do cliente são apresentados. O uso de pipes nomeados é suficiente para cotas em tempo real.
Métodos de Análise Técnica e Previsão do Mercado
Métodos de Análise Técnica e Previsão do Mercado

Métodos de Análise Técnica e Previsão do Mercado

O artigo demonstra as possibilidades e potencialidades de um método matemático bem conhecido juntamente com o pensamento visual e perspectivas de mercado "fora da caixa". Por um lado, serve para atrair a atenção de um grande público, pois incentiva as mentes criativas a reconsiderarem o paradigma da negociação como tal. Por outro, pode dar origem a desenvolvimentos de alternativas e implementações de códigos a respeito de uma ampla gama de ferramentas de análise e previsão.
Biblioteca para criação simples e rápida de programas para MetaTrader (Parte XXVIII): ordens pendentes de negociação - fechamento, exclusão, modificações
Biblioteca para criação simples e rápida de programas para MetaTrader (Parte XXVIII): ordens pendentes de negociação - fechamento, exclusão, modificações

Biblioteca para criação simples e rápida de programas para MetaTrader (Parte XXVIII): ordens pendentes de negociação - fechamento, exclusão, modificações

Este é o terceiro artigo sobre o conceito de ordens pendentes. Nele, concluiremos o teste de ordens pendentes de negociação, criaremos métodos para fechar posições, excluir ordens pendentes e modificar os parâmetros de posições e de ordens pendentes.
Lógica Difusa nas estratégias de negociação
Lógica Difusa nas estratégias de negociação

Lógica Difusa nas estratégias de negociação

O artigo considera um exemplo de aplicação da lógica difusa para construir um sistema de negociação simples, usando a biblioteca Fuzzy. São propostas melhorias ao sistema através da combinação da lógica difusa, algoritmos genéticos e redes neurais.
Guia Prático MQL5 - Programando os Canais Móveis
Guia Prático MQL5 - Programando os Canais Móveis

Guia Prático MQL5 - Programando os Canais Móveis

Este artigo apresenta um método de programação de um sistema de canais equidistantes. Alguns detalhes da construção de tais canais estarão sendo considerados aqui. É fornecido a tipificação do canal, propondo um método de canais móveis do tipo universal. Para implementar o código, foi utilizado a Programação Orientada a Objetos (POO).
Controles gráficos personalizados. Parte 3. Formas
Controles gráficos personalizados. Parte 3. Formas

Controles gráficos personalizados. Parte 3. Formas

Este é o último dos três artigos dedicados a controles gráficos. Ele cobre a criação do principal componente da interface gráfica - a forma - e seu uso em combinação com outros controles. Além das classes de forma, as classes CFrame, CButton, CLabel foram adicionadas à biblioteca de controle.
Biblioteca para criação simples e rápida de programas para MetaTrader (Parte XXVI): trabalho com ordens de negociação pendentes - primeira implementação (abertura de posições)
Biblioteca para criação simples e rápida de programas para MetaTrader (Parte XXVI): trabalho com ordens de negociação pendentes - primeira implementação (abertura de posições)

Biblioteca para criação simples e rápida de programas para MetaTrader (Parte XXVI): trabalho com ordens de negociação pendentes - primeira implementação (abertura de posições)

No artigo, abordaremos o armazenamento de alguns dados no valor do número mágico de ordens e posições, e implementaremos ordens pendentes. Para examinar a ideia, criaremos a primeira ordem pendente de teste para abrir posições a mercado quando recebermos um erro do servidor requerendo aguardar e enviar uma segunda solicitação.
Usando armazenamento em nuvem para intercâmbio de dados entre os terminais
Usando armazenamento em nuvem para intercâmbio de dados entre os terminais

Usando armazenamento em nuvem para intercâmbio de dados entre os terminais

As tecnologias baseadas em nuvem estão se tornando mais populares. À nossa disposição temos serviços de armazenamento pagos ou gratuitos. Mas será que é possível usá-los na negociação? Este artigo apresenta uma tecnologia para intercâmbio de dados entre terminais usando serviços de armazenamento em nuvem.
Biblioteca para criação simples e rápida de programas para MetaTrader (Parte XXXI): ordens de negociação pendentes, abertura de posições por condições
Biblioteca para criação simples e rápida de programas para MetaTrader (Parte XXXI): ordens de negociação pendentes, abertura de posições por condições

Biblioteca para criação simples e rápida de programas para MetaTrader (Parte XXXI): ordens de negociação pendentes, abertura de posições por condições

A partir deste artigo, criaremos um recurso que permite negociar através de solicitações pendentes de acordo com uma determinada condição: se atingirmos/ou ultrapassarmos uma determinada hora, se ultrapassarmos um lucro predeterminado ou se for registrado um evento de fechamento de posição por stop-loss.
Expert Advisor Universal: O Modelo de Evento e o Protótipo da Estratégia de Negociação (Parte 2)
Expert Advisor Universal: O Modelo de Evento e o Protótipo da Estratégia de Negociação (Parte 2)

Expert Advisor Universal: O Modelo de Evento e o Protótipo da Estratégia de Negociação (Parte 2)

Este artigo continua a série de publicações do modelo universal de um Expert Advisor. Esta parte descreve em detalhes o modelo de eventos original, baseado no processamento de dados centralizado e considera a estrutura da classe base CStrategy.
Biblioteca para criação simples e rápida de programas para MetaTrader (Parte XXI): classes de negociação - objeto básico de negociação multiplataforma
Biblioteca para criação simples e rápida de programas para MetaTrader (Parte XXI): classes de negociação - objeto básico de negociação multiplataforma

Biblioteca para criação simples e rápida de programas para MetaTrader (Parte XXI): classes de negociação - objeto básico de negociação multiplataforma

Neste artigo, iniciaremos uma nova seção da biblioteca, nomeadamente as classes de negociação, e consideraremos a criação de um único objeto básico de negociação para as plataformas MetaTrader 5 e MetaTrader 4. Tal objeto de negociação implicará que, ao enviar uma consulta ao servidor, para ele terão sido enviados os parâmetros da solicitação de negociação já verificados e corretos.
Manipulação de Arquivos ZIP em Linguagem MQL5 Pura
Manipulação de Arquivos ZIP em Linguagem MQL5 Pura

Manipulação de Arquivos ZIP em Linguagem MQL5 Pura

A linguagem MQL5 se mantém em evolução e novos recursos para trabalhar com dados estão constantemente sendo adicionados. Devido as inovações recentes, se tornou possível manipular arquivos ZIP usando ferramentas MQL5 nativas, sem envolver bibliotecas DLL de terceiros. Este artigo foca em como isso é realizado e implementa a classe CZip, que é uma ferramenta universal para ler, criar e modificar arquivos ZIP, como um exemplo.
preview
Otimização Walk Forward Contínua (Parte 2): Mecanismo para a criação de um relatório de otimização para qualquer robô

Otimização Walk Forward Contínua (Parte 2): Mecanismo para a criação de um relatório de otimização para qualquer robô

O primeiro artigo da série Otimização Walk Forward descreveu a criação de uma DLL a ser usada em nosso otimizador automático. Essa continuação é inteiramente dedicada à linguagem MQL5.
Biblioteca para criação simples e rápida de programas para MetaTrader (Parte XVII): interatividade de objetos de biblioteca
Biblioteca para criação simples e rápida de programas para MetaTrader (Parte XVII): interatividade de objetos de biblioteca

Biblioteca para criação simples e rápida de programas para MetaTrader (Parte XVII): interatividade de objetos de biblioteca

Hoje, concluiremos a lógica da funcionalidade do objeto básico de todos os objetos de biblioteca, o que permitirá que qualquer objeto de biblioteca criado com base nela interaja com o usuário. Por exemplo, podemos definir o tamanho máximo aceitável de spread para abrir uma posição, bem como o nível de preço que intersetado causará que nosso programa receba um evento do objeto-símbolo sobre um sinal indicando o tamanho do spread e o preço que cruza o nível controlado.
Comunicando-se com o MetaTrader 5 utilizando pipes nomeados sem DLLs
Comunicando-se com o MetaTrader 5 utilizando pipes nomeados sem DLLs

Comunicando-se com o MetaTrader 5 utilizando pipes nomeados sem DLLs

Muitos desenvolvedores encontram o mesmo problema - como chegar ao sandbox do terminal sem utilizar DLLs arriscados. Um dos métodos mais fáceis e seguros é utilizar pipes nomeados padrão que funcionam como operações de arquivo normais. Eles permitem que você organize a comunicação cliente-servidor interprocessadores entre programas. Dê uma olhada em exemplos práticos em C++ e MQL5 que incluem servidor, cliente, a troca de dados entre eles e avaliação de desempenho.
Trabalhando com séries temporais na biblioteca DoEasy (Parte 39): indicadores com base na biblioteca - preparação de dados e eventos das séries temporais
Trabalhando com séries temporais na biblioteca DoEasy (Parte 39): indicadores com base na biblioteca - preparação de dados e eventos das séries temporais

Trabalhando com séries temporais na biblioteca DoEasy (Parte 39): indicadores com base na biblioteca - preparação de dados e eventos das séries temporais

No artigo, consideramos o uso da biblioteca DoEasy para criar indicadores multissímbolos e multiperíodos. Prepararemos as classes da biblioteca, para trabalhar como parte dos indicadores, e testaremos a criação correta de séries temporais para usá-los como fontes de dados em indicadores. Realizaremos a criação e o envio de eventos de séries temporais.
LifeHack para traders: "amassando" ForEach com os define (#define)
LifeHack para traders: "amassando" ForEach com os define (#define)

LifeHack para traders: "amassando" ForEach com os define (#define)

Passo intermediário para aqueles que ainda escrevem em MQL4, mas não conseguem migrar para MQL5. Continuamos a procurar oportunidades para escrever código em estilo MQL4. Desta vez, examinaremos a substituição de macros do pré-processador - #define.
Promova seus projetos de desenvolvimento utilizando bibliotecas EX5
Promova seus projetos de desenvolvimento utilizando bibliotecas EX5

Promova seus projetos de desenvolvimento utilizando bibliotecas EX5

Ocultando os detalhes de implementação de classes/funções em um arquivo .ex5 vai permitir que você compartilhe seus algoritmos experientes com outros desenvolvedores, defina projetos comuns e promova-os na Internet. E enquanto a equipe MetaQuotes não mede esforços para viabilizar a possibilidade de herança direta de classes de biblioteca ex5, vamos implementá-la agora.
A ordem de destruição e criação do objeto em MQL5
A ordem de destruição e criação do objeto em MQL5

A ordem de destruição e criação do objeto em MQL5

Cada objeto, quer seja um objeto personalizado, um array dinâmico ou um array de objetos, é criado e excluído no programa MQL5 desta forma em particular. Geralmente, alguns objetos são parte de outros objetos, e a ordem de exclusão do objeto na desinicialização se torna especialmente importante. Este artigo fornece alguns exemplos que cobrem os mecanismos de trabalho com objetos.
O básico de codificação de um Expert Advisor de cobertura
O básico de codificação de um Expert Advisor de cobertura

O básico de codificação de um Expert Advisor de cobertura

Um exemplo de um Expert Advisor de cobertura é apresentado neste artigo. O autor escolherá o seu próprio par de cobertura favorito que é EURJPY e GBPJPY. Ele sempre se move da mesma maneira, sendo assim, mais fácil definir o tipo de ordem de cobertura.
Biblioteca para desenvolvimento fácil e rápido de programas para a MetaTrader (parte II). Coleção do histórico de ordens e negócios
Biblioteca para desenvolvimento fácil e rápido de programas para a MetaTrader (parte II). Coleção do histórico de ordens e negócios

Biblioteca para desenvolvimento fácil e rápido de programas para a MetaTrader (parte II). Coleção do histórico de ordens e negócios

Na primeira parte, nós começamos a criar uma grande biblioteca multi-plataforma, simplificando o desenvolvimento de programas para as plataformas MetaTrader 5 e MetaTrader 4. Nós criamos o objeto abstrato COrder, que é um objeto base para o armazenamento de dados do histórico de ordens e negócios, bem como as ordens à mercado e posições. Agora nós vamos desenvolver todos os objetos necessários para o armazenamento de dados do histórico da conta em coleções.
Oscilador universal com interface gráfica do usuário
Oscilador universal com interface gráfica do usuário

Oscilador universal com interface gráfica do usuário

No artigo, descreve-se a criação de um indicador universal baseado em todos os osciladores do terminal com uma interface gráfica do usuário própria. Isto permite rápida e facilmente alterar os parâmetros de cada oscilador individual diretamente a partir da janela do gráfico (em vez de abrir a janela de opções), comparar seu desempenho e selecionar a melhor opção para uma tarefa específica.
ZUP - ZigZag universal com padrões Pesavento. Parte 1
ZUP - ZigZag universal com padrões Pesavento. Parte 1

ZUP - ZigZag universal com padrões Pesavento. Parte 1

O artigo descreve brevemente ideias subjacentes ao indicador ZigZag universal com padrões Pesavento (ZUP). O artigo também descreve indicadores ZigZag incorporados no ZUP.
preview
Técnicas úteis e exóticas para a negociação automatizada

Técnicas úteis e exóticas para a negociação automatizada

Neste artigo, eu demonstrarei algumas técnicas muito interessantes e úteis para a negociação automatizada. Algumas delas podem ser familiares para você. Eu tentarei cobrir os métodos mais interessantes e explicarei por que vale a pena usá-los. Além disso, eu mostrarei o que essas técnicas podem fazer na prática. Nós criaremos Expert Advisors e testaremos todas as técnicas descritas usando as cotações históricas.
Guia prático do MQL5: Consultor Especialista multi-moeda - Abordagem simples, organizada e rápida"
Guia prático do MQL5: Consultor Especialista multi-moeda - Abordagem simples, organizada e rápida"

Guia prático do MQL5: Consultor Especialista multi-moeda - Abordagem simples, organizada e rápida"

Este artigo descreverá uma implementação de uma abordagem simples, adequada para um Consultor Especialista multi-moeda. Isso significa que você será capaz de montar o Consultor Especialista para testes/negócios sob condições idênticas, mas com parâmetros diferentes para cada símbolo. Como um exemplo, criaremos um padrão para dois símbolos, mas de forma a ser capaz de somar símbolos adicionais, se necessário, fazendo pequenas alterações ao código.
Estendendo a biblioteca padrão do MQL5 e reutilizando o código
Estendendo a biblioteca padrão do MQL5 e reutilizando o código

Estendendo a biblioteca padrão do MQL5 e reutilizando o código

A biblioteca padrão do MQL5 torna mais fácil a sua vida como desenvolvedor. No entanto, ela não implementa todas as necessidades de todos os desenvolvedores no mundo, então, se você achar que precisa de mais algum material de customização, você pode dar um passo a mais e estender. Este artigo o orienta através da integração do indicador técnico Zig-Zag MetaQuotes' na biblioteca padrão. Ficamos inspirados pela filosofia de design MetaQuotes' para alcançar o nosso objetivo.
Biblioteca para desenvolvimento fácil e rápido de programas para a MetaTrader (parte VI): eventos da conta netting
Biblioteca para desenvolvimento fácil e rápido de programas para a MetaTrader (parte VI): eventos da conta netting

Biblioteca para desenvolvimento fácil e rápido de programas para a MetaTrader (parte VI): eventos da conta netting

Nos artigos anteriores, nós começamos a criar uma grande biblioteca multi-plataforma, simplificando o desenvolvimento de programas para as plataformas MetaTrader 5 e MetaTrader 4. Na quinta parte da série de artigos, nós criamos as classes de eventos de negociação e a coleção de eventos, a partir dos quais os eventos são enviados para o objeto base da biblioteca Engine e para o gráfico do programa de controle. Nesta parte, nós vamos deixar a biblioteca trabalhar em contas netting.
Interfaces Gráficas I: Animação na Interface Gráfica (Capítulo 3)
Interfaces Gráficas I: Animação na Interface Gráfica (Capítulo 3)

Interfaces Gráficas I: Animação na Interface Gráfica (Capítulo 3)

No artigo anterior, nós começamos a desenvolver uma classe de formulário para os controles. Neste artigo, nós vamos continuar a desenvolver esta classe e preenchê-la com os métodos para mover um formulário sobre a área do gráfico. Em seguida, integraremos este componente da interface para o núcleo da biblioteca. Além disso, nós vamos garantir que os controles do formulário mudem de cor quando o cursor do mouse estiver pairando sobre eles.
Interfaces gráficas XI: Integração da Biblioteca Gráfica Padrão (build 16)
Interfaces gráficas XI: Integração da Biblioteca Gráfica Padrão (build 16)

Interfaces gráficas XI: Integração da Biblioteca Gráfica Padrão (build 16)

Uma nova versão da biblioteca gráfica para a criação de gráficos científicos (a classe CGraphic) foi apresentada recentemente. Esta atualização da biblioteca desenvolvida para criar interfaces gráficas irá introduzir uma versão com um novo controle para a criação de gráficos. Agora está ainda mais fácil de visualizar os dados de diferentes tipos.
Como se tornar um bom programador (Parte 1): cinco hábitos que devem ser abandonados para programar melhor em MQL5
Como se tornar um bom programador (Parte 1): cinco hábitos que devem ser abandonados para programar melhor em MQL5

Como se tornar um bom programador (Parte 1): cinco hábitos que devem ser abandonados para programar melhor em MQL5

Tanto iniciantes quanto programadores avançados têm alguns hábitos ruins que os impedem de melhorar. Neste artigo, vamos discuti-los e ver o que podemos fazer com eles. O artigo é destinado a todos que desejam se tornar um programador MQL5 de sucesso.
Uma pausa entre operações
Uma pausa entre operações

Uma pausa entre operações

O artigo trata do problema relativo a como organizar pausas entre operações de comércio quando vários sistemas especializados trabalham em um terminal do cliente MT4. Ele é destinado a usuários que possuam habilidades básicas no trabalho com o terminal e em programação em MQL4.
Características do Desenvolvimento de Indicadores Personalizados
Características do Desenvolvimento de Indicadores Personalizados

Características do Desenvolvimento de Indicadores Personalizados

O Desenvolvimento de Indicadores Personalizados no sistema de negociação MetaTrader tem uma série de características.
Alert e Comment para Indicadores Externos. Análise de Multimoedas Através de Varredura Externa
Alert e Comment para Indicadores Externos. Análise de Multimoedas Através de Varredura Externa

Alert e Comment para Indicadores Externos. Análise de Multimoedas Através de Varredura Externa

Alerta para análise de multimoedas e múltiplos timeframes para indicadores externos. O artigo trata de um método para obter informações sobre o evento em relação aos acontecimentos com indicadores externos, sem a necessidade de anexar indicadores a um gráfico ou aos próprios gráficos abertos. Vamos chamá-lo de varredura externa.
Construindo um Expert Advisor de arrastar e soltar semiautomático interativo com base no risco predefinido e proporção R/R
Construindo um Expert Advisor de arrastar e soltar semiautomático interativo com base no risco predefinido e proporção R/R

Construindo um Expert Advisor de arrastar e soltar semiautomático interativo com base no risco predefinido e proporção R/R

Alguns operadores executam todas suas negociações automaticamente, e alguns misturam negociações automáticas e manuais, com base na saída de diversos indicadores. Sendo um membro do último grupo, precisei de uma ferramenta interativa para avaliar risco dinamicamente e obter níveis de preço diretamente do gráfico. Este artigo apresentará uma maneira de implementar um Expert Advisor interativo semiautomático, com risco de equidade predefinido e proporção R/R. O risco do Expert Advisor, R/R e parâmetros de tamanho de lote podem ser alterados durante o tempo de execução no painel do EA.
Estimativas estatísticas
Estimativas estatísticas

Estimativas estatísticas

Estimativa de parâmetros estatísticos de uma sequência é muito importante, desde que muitos dos modelos e métodos matemáticos são baseados em diferentes suposições. Por exemplo, normalidade da lei de distribuição ou valor de dispersão, ou outros parâmetros. Assim, quando analisando e realizando previsões de séries de tempo, nós precisamos uma ferramenta simples e conveniente que permite rápida e clara estimativa dos principais parâmetros estatísticos. O arquivo descreve brevemente os parâmetros estatísticos mais simples de uma sequência aleatória e vários métodos de análise visual. Ele oferece a implementação desses métodos em MQL5 e os métodos de visualização dos resultados dos cálculos usando o aplicativo Gnuplot.
preview
Otimização Walk Forward Contínua (Parte 3): Método de Adaptação de um Robô ao Otimizador Automático

Otimização Walk Forward Contínua (Parte 3): Método de Adaptação de um Robô ao Otimizador Automático

A terceira parte serve como uma ponte entre as duas partes anteriores: Ele descreve o mecanismo de interação com a DLL considerada no primeiro artigo e os objetos para download de relatórios, descritos no segundo artigo. Nós analisaremos o processo de criação de um wrapper para uma classe que é importada da DLL e que forma um arquivo XML com o histórico de negociação. Nós também consideraremos um método para interagir com este wrapper.
Linguagem MQL como um meio de marcação da interface gráfica de programas MQL. Parte 1
Linguagem MQL como um meio de marcação da interface gráfica de programas MQL. Parte 1

Linguagem MQL como um meio de marcação da interface gráfica de programas MQL. Parte 1

O artigo propõe uma nova ideia para descrever a interface de programas MQL com ajuda das construções da linguagem MQL. As classes especiais transformam o esquema visual MQL em elementos da GUI, permitem gerenciá-los de maneira unificada, configurar propriedades e processar eventos. Além disso, apresenta exemplos de uso de layouts para caixas de diálogo e elementos da biblioteca padrão.
Linguagem MQL4 para Iniciantes. Perguntas difíceis em frases simples
Linguagem MQL4 para Iniciantes. Perguntas difíceis em frases simples

Linguagem MQL4 para Iniciantes. Perguntas difíceis em frases simples

Este é o segundo artigo da série "Linguagem MQL4 para Iniciantes". Agora vamos examinar mais construções complexas e avançadas da linguagem, aprender novas opções e ver, como elas podem ser aplicadas na prática diária. Você vai se familiarizar com um novo tipo de ciclo ''enquanto'', um novo tipo de condição ''troca'', operadores ''pausa'' e ''continuação". Além disso, você vai aprender a escrever suas próprias funções e trabalhar com matrizes multidimensionais. E de bônus, preparei uma explicação sobre um pré-processador.