O MQL5 Wizard permite criar o código de Sistemas de Trading automaticamente. Confira Criando Sistemas de Trading Prontos no MQL5 Wizard para mais detalhes.
Neste artigo, vamos explorar uma estratégia baseada no crossover de preços com o indicador de Média Móvel. Essa estratégia é chamada de "Sinais baseados no crossover de preços com MA" quando criamos um EA automaticamente no MQL5 Wizard.
Sinais de Trading:
- Compra: crossover ascendente do preço com a Média Móvel.
- Venda: crossover descendente do preço com a Média Móvel.
- A verificação do aumento/diminuição da MA é utilizada para filtrar sinais falsos.
Essa estratégia é implementada na classe CSignalMA da biblioteca padrão MQL5 (localizada em MQL5\Include\Expert\Signal\SignalMA.mqh).

Figura 1. Sinais de Trading baseados no crossover de preços com Média Móvel
Sinais de Trading
A estratégia de trading é implementada na classe CSignalMA, que possui alguns métodos protegidos para simplificar o acesso a indicadores e valores de preço:
double MA(int ind) // retorna o valor da média móvel da barra double Open(int ind) // retorna o preço de abertura da barra double Close(int ind) // retorna o preço de fechamento da barra double StateMA(int ind) // retorna valor positivo se a média aumenta e negativo se diminui double StateOpen(int ind) // retorna a diferença entre o preço de abertura e a média móvel double StateClose(int ind) // retorna a diferença entre o preço de fechamento e a média móvel
1. Abrir posição longa
Condições para abrir uma posição longa (crossover de preço com MA e verificação do aumento da MA):
- Open(1)<MA(1): preço de abertura é menor que a média móvel;
- Close(1)>MA(1): preço de fechamento é maior que a média móvel;
- MA(1)>MA(2): verificar aumento da média móvel (para filtrar sinais falsos).
//+------------------------------------------------------------------+ //| Verifica as condições para abrir posição longa (compra) | //+------------------------------------------------------------------+ bool CSignalMA::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration) { price=0.0; sl =0.0; tp =0.0; //--- o preço cruzou a MA para cima e a MA aumenta return(StateOpen(1)<0 && StateClose(1)>0 && StateMA(1)>0); }
2. Fechar posição longa
Condições para fechar posição longa (crossover de preço com MA e verificação da diminuição da MA):
- Open(1)>MA(1): preço de abertura é maior que a média móvel;
- Close(1)<MA(1): preço de fechamento é menor que a média móvel;
- MA(1)<MA(2): verificar diminuição da média móvel (para filtrar sinais falsos).
//+------------------------------------------------------------------+ //| Verifica as condições para fechar posição longa | //+------------------------------------------------------------------+ bool CSignalMA::CheckCloseLong(double& price) { price=0.0; //--- o preço cruzou a média móvel para baixo e a média móvel diminui return(StateOpen(1)>0 && StateClose(1)<0 && StateMA(1)<0); }
3. Abrir posição curta
As condições para abrir uma posição curta são as mesmas das condições de fechamento da posição longa.
//+------------------------------------------------------------------+ //| Verifica as condições para abrir posição curta (venda) | //+------------------------------------------------------------------+ bool CSignalMA::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration) { price=0.0; sl =0.0; tp =0.0; //--- o preço cruzou a média móvel para cima e a média móvel diminui return(StateOpen(1)>0 && StateClose(1)<0 && StateMA(1)<0); }
4. Fechar posição curta
As condições para fechar uma posição curta são as mesmas das condições de abertura da posição longa.
//+------------------------------------------------------------------+ //| Verifica as condições para fechar posição curta | //+------------------------------------------------------------------+ bool CSignalMA::CheckCloseShort(double& price) { price=0.0; //--- o preço cruzou a média móvel para cima e a média móvel aumenta return(StateOpen(1)<0 && StateClose(1)>0 && StateMA(1)>0); } //+------------------------------------------------------------------+
Criando um Expert Advisor com o MQL5 Wizard
Para criar um robô de trading baseado na estratégia, você precisa escolher as propriedades do sinal como "Sinais baseados no crossover de preços com MA" na opção "Criando Sistemas de Trading Prontos" do MQL5 Wizard:

Figura 2. Escolha "Sinais baseados no crossover de preços com MA" no MQL5 Wizard
Em seguida, você deve especificar o algoritmo de trailing stop necessário e o sistema de gestão de dinheiro e risco. O código do Expert Advisor será criado automaticamente, e você pode compilá-lo e testá-lo no Testador de Estratégia do terminal MetaTrader 5.
Resultados dos Testes
Vamos considerar o backtest do Expert Advisor em dados históricos (EURUSD H1, período personalizado: 01.01.2010-05.01.2011, MA_period=12, MA_Shift=0).
Na criação do Expert Advisor, utilizamos um volume fixo (Trading Fixed Lot, 0.1), e o algoritmo de Trailing Stop não foi utilizado (Trailing não utilizado).

Figura 3. Resultados de backtesting históricos do Expert Advisor, baseado no crossover de preços com MA
Anexos: O SignalMA.mqh com a classe CSignalMA (incluída na biblioteca padrão MQL5) está localizado na pasta MQL5\Include\Expert\Signal. O arquivo crossoverma.mq5 contém o código do Expert Advisor, criado usando o MQL5 Wizard.
Publicações relacionadas
- MACD Sample: Um Guia Prático para o Expert Advisor no MetaTrader 5
- Canal de Desvio Padrão: A Ferramenta Ideal para Traders no MetaTrader 4
- GTerminal V5: Automatizando Ordens Gráficas e Indicadores no MetaTrader 4
- Combo Trader: O EA Atualizado para MetaTrader 4
- Gráficos Renko: Uma Ferramenta Poderosa para o MetaTrader 4