Sinais de Negociação com Três Médias Móveis no MQL5 Wizard

Mike 2011.01.10 19:41 23 0 0
Anexo

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

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
Os valores do indicador da barra 0 (incompleta) podem mudar, portanto, é necessário verificar as condições de negociação usando os dados das barras completadas (formadas).

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));
  }
Você pode melhorar o fechamento da posição longa: não é necessário esperar pela tendência de baixa, você pode fechar posições longas quando estiver em uma fase lateral, que pode ser determinada pelas seguintes condições: FastEMA < MediumEMA > SlowEMA.


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

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

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.


Lista
Comentário 0