Como Criar um Expert Advisor no MetaTrader 5 com MQL5 Wizard e Sinais de Reversão

Mike 2011.03.24 02:45 14 0 0
Anexo

O MQL5 Wizard é uma ferramenta incrível que permite a criação de Expert Advisors prontos para usar, baseados nas classes da biblioteca padrão que vem com o terminal do cliente (você pode conferir mais detalhes em Criando Expert Advisors Prontos no MQL5 Wizard). Essa ferramenta é perfeita para verificar suas ideias de trading rapidamente, basta criar sua própria classe de sinais de trading.

A ideia geral é a seguinte: a classe de sinais de trading é derivada de CExpertSignal. Depois, é necessário sobrepor os métodos virtuais LongCondition() e ShortCondition() com seus próprios métodos.

Um livro interessante é "Estratégias dos Melhores Traders" (em russo), que aborda várias estratégias de trading. Aqui, vamos nos concentrar em padrões de candlestick de reversão, confirmados pelos osciladores Stochastic, CCI, MFI e RSI.

O ideal é criar uma classe separada, derivada de CExpertSignal, para verificar a formação de padrões de candlestick. Para confirmar os sinais de trading gerados por esses padrões, basta escrever uma classe derivada de CCandlePattern e adicionar os recursos necessários (como a confirmação por osciladores).

Neste artigo, vamos abordar os sinais baseados nos padrões de candlestick de "Bullish/Bearish Meeting Lines" (Linhas de Encontro Bullish/Bearish), confirmados pelo indicador Stochastic. O módulo de sinais de trading se baseia na classe CCandlePattern, que é um exemplo simples de uso para a criação de sinais de trading com padrões de candlestick.

1. Padrões de Candlestick "Meeting Lines"

1.1. Bullish Meeting Lines

O padrão consiste em duas velas (bearish e bullish) com preços de fechamento iguais (ou muito próximos). O corpo das duas velas deve ser maior que a média do comprimento do corpo.

O padrão "Bullish Meeting Lines" indica a reversão de uma tendência de baixa.

Fig. 1. Padrão

Figura 1. Padrão "Bullish Meeting Lines"

O reconhecimento do padrão "Bullish Meeting Lines" está implementado no método CheckPatternBullishMeetingLines() da classe CCandlePattern:

//+--------------------------------------------------------------------+
//| Verifica a formação do padrão de candlestick "Bullish Meeting Lines" |
//+--------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBullishMeetingLines()
  {
//--- Bullish Meeting Lines
   if((Open(2)-Close(2)>AvgBody(1))              && // longa preta
     ((Close(1)-Open(1))>AvgBody(1))             && // longa branca
      (MathAbs(Close(1)-Close(2))<0.1*AvgBody(1)))   // fechamento doji
      return(true);
//---
   return(false);
  }

A função CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_MEETING_LINES) da classe CCandlePattern é usada para verificar a formação do padrão "Bullish Meeting Lines".

1.2. Bearish Meeting Lines

O padrão consiste em duas velas (bullish e bearish) com preços de fechamento iguais (ou muito próximos). O corpo das duas velas deve ser maior que a média do comprimento do corpo.

O padrão "Bearish Meeting Lines" indica a reversão de uma tendência de alta.

Figura 2. Padrão

Figura 2. Padrão "Bearish Meeting Lines"

O reconhecimento do padrão "Bearish Meeting Lines" está implementado no método CheckPatternBearishMeetingLines() da classe CCandlePattern:

//+--------------------------------------------------------------------+
//| Verifica a formação do padrão de candlestick "Bearish Meeting Lines" |
//+--------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBearishMeetingLines()
  {
//--- Bearish Meeting Lines
   if((Close(2)-Open(2)>AvgBody(1))             && // longa branca
     ((Open(1)-Close(1))>AvgBody(1))             && // longa preta
      (MathAbs(Close(1)-Close(2))<0.1*AvgBody(1)))  // fechamento doji
      return(true);
//---
   return(false);
  }

A função CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_MEETING_LINES) da classe CCandlePattern é usada para verificar a formação do padrão "Bearish Meeting Lines".

2. Sinais de Trading Confirmados pelo Indicador Stochastic

Os sinais de trading para abrir posições longas ou curtas devem ser confirmados pelo oscilador Stochastic. A linha %D deve estar acima ou abaixo do nível crítico correspondente (30 ou 70).

O fechamento da posição aberta depende dos valores do indicador %D. Isso pode acontecer em 2 casos:

  • se a linha %D atingir o nível crítico oposto (80 para posição longa e 20 para posição curta)
  • se o sinal reverso não for confirmado (quando a linha %D atinge os seguintes níveis: 20 para posição longa e 80 para posição curta)

Fig. 3. Padrão

Fig. 3. Padrão "Bearish Meeting Lines", confirmado pelo indicador Stochastic

  • int CML_Stoch::LongCondition() - verifica condições para abrir posição longa (retorna 80) e fechar posição curta (retorna 40);
  • int CML_Stoch::ShortCondition() - verifica condições para abrir posição curta (retorna 80) e fechar posição longa (retorna 40).

2.1. Abrindo posição longa/Fechando posição curta

  1. A formação do padrão "Bullish Meeting Lines" deve ser confirmada pelo oscilador Stochastic: StochSignal(1)<30 (o valor da linha de sinal do indicador Stochastic da última barra completada deve ser menor que 30).

  2. A posição curta deve ser fechada se a linha de sinal do Stochastic cruzar para cima os níveis 20 ou 80.

//+------------------------------------------------------------------+
//| Verifica condições para entrada e saída do mercado                  |
//| 1) Entrada no mercado (abrir posição longa, resultado=80)         |
//| 2) Saída do mercado (fechar posição curta, resultado=40)          |
//+------------------------------------------------------------------+
int CML_Stoch::LongCondition()
  {
   int result=0;
//--- idx pode ser usado para determinar o modo de trabalho do EA
//--- idx=0 - neste caso, o EA verifica as condições de trading a cada tick
//--- idx=1 - neste caso, o EA verifica as condições de trading apenas em novas barras
  int idx   =StartIndex();
//--- verificação das condições para abrir posição longa
//--- formação do padrão Bullish Meeting Lines e linha de sinal<30
  if (CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_MEETING_LINES) && (StochSignal(1)<30))
     result=80;
//--- verificação das condições para fechar posição curta
//--- cruzamento da linha de sinal dos níveis de sobrecompra/sobrevenda (para baixo 20, para cima 80)
   if((((StochSignal(1)>20) && (StochSignal(2)<20)) ||
       ((StochSignal(1)>80) && (StochSignal(2)<80))))
     result=40;
//--- retornar resultado
   return(result);
  }

2.2. Abrindo posição curta/Fechando posição longa

  1. A formação do padrão "Bearish Meeting Lines" deve ser confirmada pelo oscilador Stochastic: StochSignal(1)>70 (o valor da linha de sinal do indicador Stochastic da última barra completada deve ser maior que 70).

  2. A posição longa deve ser fechada se a linha de sinal do Stochastic cruzar para baixo os níveis 80 ou 20.

//+------------------------------------------------------------------+
//| Verifica condições para entrada e saída do mercado                  |
//| 1) Entrada no mercado (abrir posição curta, resultado=80)         |
//| 2) Saída do mercado (fechar posição longa, resultado=40)          |
//+------------------------------------------------------------------+
int CML_Stoch::ShortCondition()
  {
   int result=0;
//--- idx pode ser usado para determinar o modo de trabalho do EA
//--- idx=0 - neste caso, o EA verifica as condições de trading a cada tick
//--- idx=1 - neste caso, o EA verifica as condições de trading apenas em novas barras
  int idx   =StartIndex();
//--- verificação das condições para abrir posição curta
//--- formação do padrão Bearish Meeting Lines e linha de sinal>70
  if (CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_MEETING_LINES) && (StochSignal(1)>70))
     result=80;
//--- verificação das condições para fechar posição longa
//--- cruzamento da linha de sinal dos níveis de sobrecompra/sobrevenda (para baixo 80, para cima 20)
   if((((StochSignal(1)<80) && (StochSignal(2)>80)) ||
       ((StochSignal(1)<20) && (StochSignal(2)>20))))
     result=40;
//--- retornar resultado
   return(result);
  }

2.3. Criando um Expert Advisor usando o MQL5 Wizard

A classe CML_Stoch não está incluída nas classes da Biblioteca Padrão. Para usá-la, é necessário baixar o arquivo acml_stoch.mqh (veja os anexos) e salvá-lo na pasta client_terminal_data\MQL5\Include\Expert\Signal\MySignals. O mesmo deve ser feito com o arquivo candlepatterns.mqh. Você pode utilizá-lo no MQL5 Wizard após reiniciar o MetaEditor.

Para criar um Expert Advisor, inicie o MQL5 Wizard:

Fig. 4. Criando Expert Advisor usando MQL5 Wizard

Fig. 4. Criando Expert Advisor usando MQL5 Wizard

Vamos especificar o nome do Expert Advisor:

Fig. 5. Propriedades gerais do Expert Advisor

Fig. 5. Propriedades gerais do Expert Advisor

Após isso, precisamos selecionar os módulos de sinais de trading utilizados.

Fig. 6. Propriedades dos sinais do Expert Advisor

Fig. 6. Propriedades dos sinais do Expert Advisor

Neste caso, usamos apenas um módulo de sinais de trading.

Adicionando o módulo "Sinais baseados em Bullish/Bearish Meeting Lines confirmados pelo Stochastic" de sinais de trading:

Fig. 7. Propriedades dos sinais do Expert Advisor

Fig. 7. Propriedades dos sinais do Expert Advisor

Módulo de sinais de trading adicionado:

Fig. 8. Propriedades dos sinais do Expert Advisor

Fig. 8. Propriedades dos sinais do Expert Advisor

Você pode selecionar quaisquer propriedades de trailing, mas vamos usar "Trailing Stop não utilizado":

Fig. 9. Propriedades de trailing do Expert Advisor

Fig. 9. Propriedades de trailing do Expert Advisor

Quanto às propriedades de gerenciamento de dinheiro, vamos usar "Trading com volume de operação fixo":

Fig. 10. Propriedades de gerenciamento de dinheiro do Expert Advisor

Fig. 10. Propriedades de gerenciamento de dinheiro do Expert Advisor

Ao pressionar o botão "Finalizar", obteremos o código do Expert Advisor gerado, localizado em Expert_AML_Stoch.mq5, que será salvo na pasta terminal_data_folder\MQL5\Experts\.

Os parâmetros de entrada padrão do Expert Advisor gerado:

//--- entradas para sinal principal
input int            Signal_ThresholdOpen   =10;     // Valor do limiar de sinal para abrir [0...100]
input int            Signal_ThresholdClose  =10     // Valor do limiar de sinal para fechar [0...100]
input double         Signal_PriceLevel      =0.0    // Nível de preço para executar um negócio
input double         Signal_StopLevel       =50.0   // Nível de Stop Loss (em pontos)
input double         Signal_TakeLevel       =50.0    // Nível de Take Profit (em pontos)

Devem ser substituídos para:

//--- entradas para sinal principal
input int            Signal_ThresholdOpen   =40;     // Valor do limiar de sinal para abrir [0...100]
input int            Signal_ThresholdClose  =20     // Valor do limiar de sinal para fechar [0...100]
input double         Signal_PriceLevel      =0.0    // Nível de preço para executar um negócio
input double         Signal_StopLevel       =0.0    // Nível de Stop Loss (em pontos)
input double         Signal_TakeLevel       =0.0    // Nível de Take Profit (em pontos)

Os parâmetros de entrada Signal_ThresholdOpen/Signal_ThresholdClose permitem especificar os níveis de limiar para abrir e fechar posições.

No código dos métodos LongCondition() e ShortCondition() da classe de sinais de trading, especificamos os valores fixos do limiar:

  • Abrir posição: 80;
  • Fechar posição: 40.

O Expert Advisor, gerado pelo MQL5 Wizard, abre e fecha posições utilizando os "votos" dos módulos de sinais de trading. O voto do módulo principal (como um contêiner, que consiste em todos os módulos adicionados) também é utilizado, mas seus métodos LongCondition() e ShortCondition() sempre retornam 0.

Os resultados dos votos do módulo principal também são utilizados na média dos "votos". No nosso caso, temos: módulo principal + 1 módulo de sinais de trading, então devemos levar isso em consideração ao definir os valores de limiar. Por causa disso, o ThresholdOpen e o ThresholdClose devem ser configurados como 40=(0+80)/2 e 20=(0+40)/2.

Os valores dos parâmetros de entrada Signal_StopLevel e Signal_TakeLevel são definidos como 0, o que significa que o fechamento das posições será feito apenas quando as condições de fechamento forem verdadeiras.


2.4. Resultados de Backtesting Histórico

Vamos considerar o backtesting do Expert Advisor com dados históricos (EURUSD H1, período de teste: 01/01/2005 - 16/03/2010, PeriodK=6, PeriodD=3, PeriodSlow=36, MA_period=3).

Na criação do Expert Advisor, utilizamos o volume fixo (Trading Fixed Lot, 0.1). O algoritmo Trailing Stop não é utilizado (Trailing not used).

Fig. 11. Resultados do teste do Expert Advisor, baseado em Bullish/Bearish Meeting Lines + Stochastic

Fig. 11. Resultados do teste do Expert Advisor, baseado em Bullish/Bearish Meeting Lines + Stochastic


O melhor conjunto de parâmetros de entrada pode ser encontrado usando o Strategy Tester do terminal cliente MetaTrader 5.

O código do Expert Advisor, criado pelo MQL5 Wizard, está anexado no arquivo expert_aml_stoch.mq5.


Lista
Comentário 0