MQL5 Wizard é uma ferramenta incrível que permite criar o código de Sistemas de Trading automaticamente. Para mais detalhes, confira Criando Sistemas de Trading Prontos no MQL5 Wizard.
Neste artigo, vamos explorar uma estratégia baseada no cruzamento de duas Médias Móveis Exponenciais suavizadas (EMA rápida e EMA lenta). Essa estratégia é chamada de "Sinais baseados no cruzamento de duas EMA" quando você cria o EA automaticamente no MQL5 Wizard.
Sinais de Negociação:
- Compra: a EMA rápida cruza para cima da EMA lenta
- Venda: a EMA rápida cruza para baixo da EMA lenta
Essa estratégia está implementada na classe CSignalCrossEMA.

Figura 1. Sinais de negociação, baseados no cruzamento de duas médias móveis exponenciais
Sinais de Negociação
A estratégia de negociação está implementada na classe CSignalCrossEMA, que possui alguns métodos protegidos para simplificar o acesso aos valores dos indicadores:
double FastEMA(int ind) // retorna o valor da média móvel rápida da barra double SlowEMA(int ind) // retorna o valor da média móvel lenta da barra double StateEMA(int ind) // retorna a diferença entre as médias móveis rápida e lenta da barra
1. Abrindo posição longa
Condições para abrir uma posição longa:
- StateEMA(1) > 0 e StateEMA(2) < 0: a EMA rápida cruzou para cima da EMA lenta na última barra completada.
//+------------------------------------------------------------------+ //| Verifica condições para abrir posição longa (compra) | //+------------------------------------------------------------------+ bool CSignalCrossEMA::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration) { if(!(StateEMA(2)<0 && StateEMA(1)>0)) return(false); //--- price=0.0; sl =0.0; tp =0.0; //--- return(true); }
2. Fechando posição longa
Condições para fechar uma posição longa:
- StateEMA(1) < 0 e StateEMA(2) > 0: a EMA rápida cruzou para baixo da EMA lenta na última barra completada.
//+------------------------------------------------------------------+ //| Verifica condições para fechar posição longa | //+------------------------------------------------------------------+ bool CSignalCrossEMA::CheckCloseLong(double& price) { if(!(StateEMA(2)>0 && StateEMA(1)<0)) return(false); //--- price=0.0; //--- return(true); }
3. Abrindo posição curta
As condições para abrir uma posição curta são as mesmas que as condições de fechamento da posição longa.
//+------------------------------------------------------------------+ //| Verifica condições para abrir posição curta (venda) | //+------------------------------------------------------------------+ bool CSignalCrossEMA::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration) { if(!(StateEMA(2)>0 && StateEMA(1)<0)) return(false); //--- price=0.0; sl =0.0; tp =0.0; //--- return(true); }
4. Fechando posição curta
As condições para fechar uma posição curta são as mesmas que as condições de abertura da posição longa.
//+------------------------------------------------------------------+ //| Verifica condições para fechar posição curta | //+------------------------------------------------------------------+ bool CSignalCrossEMA::CheckCloseShort(double& price) { if(!(StateEMA(2)<0 && StateEMA(1)>0)) return(false); //--- price=0.0; //--- return(true); }
Criando um Robô de Trading usando MQL5 Wizard
Para criar um robô de trading baseado na estratégia, você precisa escolher as propriedades do sinal como "Sinais baseados no cruzamento de duas EMA" na opção "Criando Sistemas de Trading Prontos" do MQL5 Wizard:

Figura 2. Escolha "Sinais, baseados no cruzamento de duas EMA" no MQL5 Wizard
Em seguida, você deve especificar o algoritmo de trailing stop e o sistema de gestão de dinheiro e risco necessários. O código do Robô de Trading será criado automaticamente, podendo ser compilado e testado no Teste de Estratégia do terminal MetaTrader 5.
Além disso, as classes da biblioteca padrão contêm os Sinais baseados no cruzamento de duas MA, implementados na classe CSignalCrossMA. A ideia de trading é similar, mas oferece muitas funcionalidades adicionais (especificar tipos, deslocamentos e métodos de média, além do uso de níveis de Take Profit e Stop Loss).

Figura 3. "Sinais, baseados no cruzamento de duas MA" no MQL5 Wizard
Resultados dos Testes
Vamos considerar os testes retrospectivos do Robô de Trading com dados históricos (EURUSD H1, período de teste: 01.01.2010 - 05.01.2011, FastPeriod=12, SlowPeriod=24).
Na criação do Robô de Trading, utilizamos um volume fixo (Trading com Lote Fixo, 0.1), e o algoritmo Trailing Stop não foi utilizado (Trailing não utilizado).

Figura 4. Resultados do backtest histórico do Robô de Trading, baseado no cruzamento de duas EMA
Anexos: O arquivo SignalCrossEMA.mqh com a classe CSignalCrossEMA deve ser colocado na pasta terminal_data_folder\MQL5\Include\Expert\Signal.
O arquivo crossover_2ema.mq5 contém o código do Robô de Trading, criado usando o MQL5 Wizard.
Publicações relacionadas
- MACD Sample: Um Guia Prático para o Expert Advisor no MetaTrader 5
- Como Criar Sinais de Negociação com MQL5 Wizard Usando Estrelas da Manhã e da Noite + Estocástico
- MQL5 Wizard: Sinais de Negociação com Padrões Candlestick e RSI no MetaTrader 5
- MQL5 Wizard: Sinais de Negociação com 3 Corvos Negros/3 Soldados Brancos e MFI
- MQL5 Wizard: Sinais de Negócios com 3 Corvos Negros/3 Soldados Brancos + Estocástico para MetaTrader 5