Crie seu Expert Advisor com MQL5: Sinais de Negociação com Padrões Engulfing e Stochastic

Mike 2011.03.10 19:54 52 0 0
Anexo

O MQL5 Wizard permite criar EAs (Expert Advisors) prontos baseados nas classes da biblioteca padrão que acompanham o terminal do cliente. Com isso, você pode verificar suas ideias de negociação de forma rápida, basta criar sua própria classe de sinais de negociação. A estrutura dessa classe e um exemplo podem ser encontrados no artigo MQL5 Wizard: Como Criar um Módulo de Sinais de Negociação.

A ideia básica é a seguinte: a classe de sinais de negociação é derivada de CExpertSignal. Você precisará sobrescrever os métodos virtuais LongCondition() e ShortCondition() com seus próprios métodos.

Um livro interessante é "Estratégias dos Melhores Traders" (em russo), que considera várias estratégias de negociação. Aqui, vamos focar em padrões de velas de reversão, confirmados pelos osciladores Stochastic, CCI, MFI e RSI.

O melhor caminho é criar uma classe separada, derivada de CExpertSignal para verificar a formação de padrões de velas. Para confirmação dos sinais de negociação gerados por esses padrões, basta escrever a classe derivada de CCandlePattern e adicionar as funcionalidades necessárias (como confirmação por osciladores).

Neste artigo, vamos considerar os sinais baseados no padrão de velas de reversão "Bullish Engulfing/Bearish Engulfing", confirmados pelo indicador Stochastic. O módulo de sinais de negociação é baseado na classe CCandlePattern, que é um exemplo simples de como criar sinais de negociação com padrões de velas.


1. Padrões de Velas de Reversão: "Bullish Engulfing" e "Bearish Engulfing"

1.1. Bullish Engulfing

O padrão de reversão "Bullish Engulfing" se forma em uma tendência de baixa quando uma pequena vela preta é seguida por uma grande vela branca que eclipsa completamente a vela do dia anterior. As sombras (caudas) da vela pequena são curtas, permitindo que o corpo da vela grande cubra toda a vela do dia anterior.

Fig. 1. Padrão de vela Bullish Engulfing

Fig. 1. Padrão de vela "Bullish Engulfing"

O reconhecimento do padrão "Bullish Engulfing" é implementado no método CheckPatternBullishEngulfing() da classe CCandlePattern:

//+------------------------------------------------------------------+
//| Verifica a formação do padrão "Bullish Engulfing"     |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBullishEngulfing()
  {
//--- Bullish Engulfing
   if((Open(2)>Close(2))             &&  // vela anterior é bearish
      (Close(1)-Open(1)>AvgBody(1))  &&  // corpo da vela bullish é maior que a média 
      (Close(1)>Open(2))             &&  // preço de fechamento da vela bullish é maior que a abertura da bearish
      (MidOpenClose(2)<CloseAvg(2))  &&  // tendência de baixa
      (Open(1)<Close(2)))                // preço de abertura da vela bullish é menor que o fechamento da bearish
      return(true);
//---
   return(false);
  }

O método CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) da classe CCandlePattern é utilizado para verificar a formação do padrão "Bullish Engulfing".


1.2. Bearish Engulfing

O padrão de reversão "Bearish Engulfing" se forma em uma tendência de alta quando uma pequena vela branca é seguida por uma grande vela preta que cobre completamente a vela do dia anterior. As sombras (caudas) da vela pequena são curtas, permitindo que o corpo da vela grande cubra toda a vela do dia anterior.

Fig. 2. Padrão de vela Bearish Engulfing

Fig. 2. Padrão de vela "Bearish Engulfing"

O reconhecimento do padrão "Bearish Engulfing" é implementado no método CheckPatternBearishEngulfing() da classe CCandlePattern:

//+------------------------------------------------------------------+
//| Verifica a formação do padrão "Bearish Engulfing"     |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBearishEngulfing()
  {
//--- Bearish Engulfing
   if((Open(2)<Close(2))            &&  // vela anterior é bullish
      (Open(1)-Close(1)>AvgBody(1)) &&  // corpo da vela é maior que a média
      (Close(1)<Open(2))            &&  // preço de fechamento da vela bearish é menor que a abertura da bullish
      (MidOpenClose(2)>CloseAvg(2)) &&  // tendência de alta
      (Open(1)>Close(2)))               // Preço de abertura da vela bearish é maior que o fechamento da bullish
      return(true);
//---
   return(false);
  }

O método CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) da classe CCandlePattern é utilizado para verificar a formação do padrão "Bearish Engulfing".


2. Sinais de Negociação Confirmados pelo Indicador Stochastic

Os sinais de negociação para abrir posição longa ou curta devem ser confirmados pelo oscilador Stochastic. A linha de sinal %D deve ser maior/menor que os níveis críticos correspondentes (30 ou 70).

O fechamento da posição aberta depende dos valores do indicador %D. Isso pode ocorrer em duas situações:

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

Fig. 3. Padrão Bullish Engulfing, confirmado pelo indicador Stochastic

Fig. 3. Padrão "Bullish Engulfing", confirmado pelo indicador Stochastic


Verificação das condições de negociação para entrada e saída é implementada em dois métodos:

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

2.1. Abrir posição longa/Fechar posição curta

  1. A formação do padrão "Bullish Engulfing" deve ser confirmada pelo indicador 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 indicador Stochastic cruzou 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 CBE_BE_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 negociação a cada tick
//--- idx=1 - neste caso o EA verifica as condições de negociação apenas em barras de notícias
  int idx   =StartIndex();
//--- verificando condições para abrir posição longa
//--- formação do padrão Bullish Engulfing e linha de sinal<30
  if (CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) && (StochSignal(1)<30))
     result=80;
//--- verificando condições para fechar posição curta
//--- cruzamento da linha de sinal dos níveis sobrecomprado/vendido (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. Abrir posição curta/Fechar posição longa

  1. A formação do padrão "Bearish Engulfing" deve ser confirmada pelo indicador 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 indicador Stochastic cruzou 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 CBE_BE_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 negociação a cada tick
//--- idx=1 - neste caso o EA verifica as condições de negociação apenas em barras de notícias
  int idx   =StartIndex();
//--- verificando condições para abrir posição curta
//--- formação do padrão Bearish Engulfing e linha de sinal>70
  if (CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) && (StochSignal(1)>70))
     result=80;
//--- verificando condições para fechar posição longa
//--- cruzamento da linha de sinal dos níveis sobrecomprado/vendido (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 o Expert Advisor com o MQL5 Wizard

A classe CBE_BE_Stoch não está incluída nas classes da Biblioteca Padrão, para usá-la, é necessário baixar o arquivo acbe_be_stoch.mqh (ver 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 com MQL5 Wizard

Fig. 4. Criando Expert Advisor com 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 negociação a serem usados.

Fig. 6. Propriedades de sinal do Expert Advisor

Fig. 6. Propriedades de sinal do Expert Advisor

No nosso caso, usamos apenas um módulo de sinais de negociação.

Adicionando o módulo de Sinais baseados em Bullish Engulfing/Bearish Engulfing confirmados pelo Stochastic:

Fig. 7. Propriedades de sinal do Expert Advisor

Fig. 7. Propriedades de sinal do Expert Advisor

Módulo de sinais de negociação adicionado:

Fig. 8. Propriedades de sinal do Expert Advisor

Fig. 8. Propriedades de sinal do Expert Advisor

Você pode selecionar quaisquer propriedades de trailing, mas iremos 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 gestão de dinheiro, iremos usar "Negociação com volume fixo":

Fig. 10. Propriedades de gestão de dinheiro do Expert Advisor

Fig. 10. Propriedades de gestão de dinheiro do Expert Advisor

Ao pressionar o botão "Finalizar", receberemos o código do Expert Advisor gerado, localizado em Expert_ABE_BE_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 limite do sinal para abrir [0...100]
input int            Signal_ThresholdClose  =10     // Valor do limite do 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 alterados para:

//--- entradas para sinal principal
input int            Signal_ThresholdOpen   =40;     // Valor do limite do sinal para abrir [0...100]
input int            Signal_ThresholdClose  =20     // Valor do limite do 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 limitação para abertura e fechamento de posições.

No código dos métodos LongCondition() e ShortCondition() da classe de sinais de negociação, especificamos os valores fixos do limite:

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

O Expert Advisor gerado pelo MQL5 Wizard abre e fecha posições usando os "votos" dos módulos de sinais de negociação. O voto do módulo principal (como 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 negociação, então precisamos levar em conta esse fato ao definir os valores dos limites. Por causa disso, o ThresholdOpen e o ThresholdClose devem ser definidos como 40=(0+80)/2 e 20=(0+40)/2.

Os valores dos parâmetros de entrada Signal_StopLevel e Signal_TakeLevel estã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 em dados históricos (EURUSD H1, período de teste: 2010.01.01-2011.03.04, PeriodK=47, PeriodD=9, PeriodSlow=13, MA_period=5).

Na criação do Expert Advisor, utilizamos o volume fixo (Negociação com Lote Fixo, 0.1), e o algoritmo de Trailing Stop não foi utilizado (Trailing não utilizado).


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

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


O melhor conjunto de parâmetros de entrada pode ser encontrado usando o Testador de Estratégia do terminal cliente MetaTrader 5.

O código do Expert Advisor, criado pelo MQL5 Wizard, está anexado em expert_abe_be_stoch.mq5.


Lista
Comentário 0