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 de tendência baseada em três médias móveis, chamada "Sinais com Três EMA". Para determinar a tendência, utilizamos três médias móveis exponencialmente suavizadas: FastEMA, MediumEMA e SlowEMA.
Sinais de Negociação:
- Sinal de compra: FastEMA > MediumEMA > SlowEMA (tendência de alta).
- Sinal de venda: FastEMA < MediumEMA < SlowEMA (tendência de baixa).
Essa estratégia está implementada na classe CSignal3EMA (o arquivo signal3ema.mqh deve ser colocado em terminal_data_folder\MQL5\Include\Expert\Signal\Signal3EMA.mqh).

Figura 1. Sinais de negociação, baseados em três médias móveis
Sinais de Negociação
A estratégia de negociação está implementada na classe CSignal3EMA e possui alguns métodos protegidos para simplificar o acesso aos valores das três médias móveis (Rápida, Média, Lenta):
double FastEMA(int ind) // retorna o valor da Fast EMA da barra double MediumEMA(int ind) // retorna o valor da Medium EMA da barra double SlowEMA(int ind) // retorna o valor da Slow EMA da barra
1. Abrir Posição Longa
A tendência de alta é determinada pela seguinte condição: FastEMA > MediumEMA > SlowEMA:
- FastEMA(1) > MediumEMA(1): Fast EMA é maior que a Medium EMA (última barra completada);
- MediumEMA(2) > SlowEMA(1): Medium EMA é maior que a Slow EMA (última barra completada);
//+------------------------------------------------------------------+ //| Verifica condições para abrir posição longa (compra) | //+------------------------------------------------------------------+ bool CSignal3EMA::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration) { double medium=MediumEMA(1); //--- price=0.0; sl =m_symbol.Ask()-m_stop_loss*m_adjusted_point; tp =m_symbol.Ask()+m_take_profit*m_adjusted_point; //--- verificando a tendência de alta (na última barra completada): FastEMA(1)>MediumEMA(1)>SlowEMA(1) return(FastEMA(1)>medium && medium>SlowEMA(1)); }
2. Fechar Posição Longa
A tendência de baixa é determinada pela seguinte condição: FastEMA < MediumEMA < SlowEMA:
- FastEMA(1) < MediumEMA(1): Fast EMA é menor que a Medium EMA (última barra completada);
- MediumEMA(2) < SlowEMA(1): Medium EMA é menor que a Slow EMA (última barra completada);
//+------------------------------------------------------------------+ //| Verifica condições para fechar posição longa | //+------------------------------------------------------------------+ bool CSignal3EMA::CheckCloseLong(double& price) { double medium=MediumEMA(1); //--- price=0.0; //--- verificando a tendência de baixa (na última barra completada): FastEMA(1)return(FastEMA(1)<medium && medium<SlowEMA(1)); }
3. Abrir Posição Curta
//+------------------------------------------------------------------+ //| Verifica condições para abrir posição curta (venda) | //+------------------------------------------------------------------+ bool CSignal3EMA::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration) { double medium=MediumEMA(1); //--- price=0.0; sl =m_symbol.Bid()+m_stop_loss*m_adjusted_point; tp =m_symbol.Bid()-m_take_profit*m_adjusted_point; //--- verificando a tendência de baixa (na última barra completada): FastEMA(1)return(FastEMA(1)<medium && medium<SlowEMA(1)); }
4. Fechar Posição Curta
//+------------------------------------------------------------------+ //| Verifica condições para fechar posição curta | //+------------------------------------------------------------------+ bool CSignal3EMA::CheckCloseShort(double& price) { double medium=MediumEMA(1); //--- price=0.0; //--- verificando a tendência de alta (na última barra completada): FastEMA(1)>MediumEMA(1)>SlowEMA(1) return(FastEMA(1)>medium && medium>SlowEMA(1)); }
Você pode melhorar o fechamento da posição curta: não é necessário esperar pela tendência de alta, você pode fechar posições curtas quando estiver em uma fase lateral, que pode ser determinada pelas seguintes condições: FastEMA > MediumEMA < SlowEMA.
Criando o Expert Advisor com MQL5 Wizard
Para criar um robô de trading baseado na estratégia, você precisa escolher as propriedades do sinal como "Sinais com Três EMA" na opção "Criando Sistemas de Trading Prontos" do MQL5 Wizard:

Figura 2. Escolha "Sinais com Três EMA" no MQL5 Wizard
Em seguida, você deve especificar o algoritmo de trailing stop necessário e o sistema de gerenciamento de dinheiro e risco. O código do Expert Advisor será criado automaticamente, você pode compilá-lo e testá-lo no Strategy Tester do terminal cliente MetaTrader 5.
Resultados dos Testes
Vamos considerar o backtesting do Expert Advisor em dados históricos (EURUSD H1, período de teste: 01.01.2010-05.01.2011, FastPeriod=5, MediumPeriod=12, SlowPeriod=24, StopLoss=400, TakeProfit=900).
Na criação do Expert Advisor, utilizamos um volume fixo (Trading com Lote Fixo, 0.1). O algoritmo de Trailing Stop não é utilizado (Trailing não utilizado).

Figura 3. Resultados do backtesting histórico do Expert Advisor, baseado em três EMA
Anexos: O arquivo Signal3EMA.mqh com a classe CSignal3EMA deve ser colocado em terminal_data_folder\MQL5\Include\Expert\Signal.
O arquivo threeema.mq5 contém o código do Expert Advisor, criado usando o MQL5 Wizard.
Comentário 0