Como Criar Sinais de Trade com MQL5 Wizard: Bullish e Bearish Harami Confirmados pelo Stochastic

Mike 2011.03.16 23:33 17 0 0
Anexo

O MQL5 Wizard é uma ferramenta incrível que permite criar Consultores Especializados prontos, utilizando classes da biblioteca padrão que vem junto com o terminal do cliente (veja Criando Consultores Especializados no MQL5 Wizard para mais detalhes). Com ele, você pode testar rapidamente suas ideias de trade, basta criar sua própria classe de sinais de trade. A estrutura dessa classe e um exemplo podem ser encontrados no artigo MQL5 Wizard: Como Criar um Módulo de Sinais de Trading.

A ideia geral é a seguinte: a classe de sinais de trade é derivada de CExpertSignal. Em seguida, é necessário sobrepor os métodos virtuais LongCondition() e ShortCondition() com suas próprias implementações.

Um livro interessante é "Estratégias dos Melhores Traders" (em russo), onde várias estratégias de trading são abordadas. Aqui, vamos focar nos padrões de candlestick de reversão, confirmados por Stochastic, CCI, MFI e RSI.

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

Vamos considerar os sinais baseados no padrão de candlestick de reversão "Bullish Harami/Bearish Harami", confirmados pelo Stochastic. O módulo de sinais de trade é baseado na classe CCandlePattern, que serve como um exemplo simples para a criação de sinais de trade com padrões de candlestick.

1. Padrões de Candlestick Bullish Harami e Bearish Harami

1.1. Bullish Harami

O padrão de reversão Bullish Harami se forma em uma tendência de baixa quando uma grande candlestick é seguida por uma candlestick menor, cuja parte do corpo está dentro da faixa vertical do corpo maior. Este padrão indica que a tendência de queda pode estar prestes a reverter, sinalizando que é um bom momento para entrar em uma posição comprada. A segunda candlestick abre com um gap para cima.

Quanto menor a segunda candlestick (branca), maior a probabilidade da reversão.

Fig. 1. Padrão de candlestick Bullish Harami

Fig. 1. Padrão de candlestick Bullish Harami

O reconhecimento do padrão "Bullish Harami" é feito no método CheckPatternBullishHarami() da classe CCandlePattern:

//+------------------------------------------------------------------+
//| Verifica a formação do padrão "Bullish Harami"          |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBullishHarami()
  {
//--- Bullish Harami
   if((Close(1)>Open(1))              && // o último candle fechado é bullish (dia branco)
     ((Open(2)-Close(2)>AvgBody(1))  && // o candle anterior é bearish, seu corpo é maior que a média (long black)
     ((Close(1)<Open(2))              && // o preço de fechamento do candle bullish é menor que o preço de abertura do candle bearish
      (Open(1)>Close(2)))             && // o preço de abertura do candle bullish é maior que o fechamento do candle bearish
      (MidPoint(2)<CloseAvg(2)))         // tendência de baixa
      return(true);
//---
   return(false);
  }

A verificação do padrão CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) da classe CCandlePattern é utilizada para verificar a formação do padrão "Bullish Harami".


1.2. Bearish Harami

O padrão de reversão Bearish Harami se forma em uma tendência de alta quando uma grande candlestick é seguida por uma candlestick menor, cuja parte do corpo está dentro da faixa vertical do corpo maior. Esse padrão indica que a tendência de alta pode estar prestes a reverter, sinalizando que é um bom momento para entrar em uma posição vendida. A segunda candlestick abre com um gap para baixo.

Quanto menor a segunda candlestick (preta), maior a probabilidade da reversão.

Fig. 2. Padrão de candlestick Bearish Harami

Fig. 2. Padrão de candlestick Bearish Harami

O reconhecimento do padrão "Bearish Harami" é feito no método CheckPatternBearishHarami() da classe CCandlePattern:

//+------------------------------------------------------------------+
//| Verifica a formação do padrão "Bearish Harami"       |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBearishHarami()
  {
//--- Bearish Harami
   if((Close(1)<Open(1))              && // último candle fechado é bearish (dia preto)
     ((Close(2)-Open(2)>AvgBody(1))  && // o candle anterior é bullish, seu corpo é maior que a média (long white)
     ((Close(1)>Open(2))              && // preço de fechamento do candle bearish é maior que o preço de abertura do candle bullish 
      (Open(1)<Close(2)))             && // preço de abertura do candle bearish é menor que o fechamento do candle bullish
      (MidPoint(2)>CloseAvg(2)))         // tendência de alta
      return(true);
//---
   return(false);
  }

A verificação do padrão CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) da classe CCandlePattern é utilizada para verificar a formação do padrão "Bearish Harami".


2. Sinais de Trade, 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 ser feito em dois casos:

  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 atingir os seguintes níveis: 20 para posição longa e 80 para posição curta)

Fig. 3. Padrão de candlestick Bearish Harami, confirmado pelo indicador Stochastic

Figura 3. Padrão de candlestick Bearish Harami, confirmado pelo indicador Stochastic

O controle das condições de trade para entrada e saída é implementado em dois métodos:

  • int CBH_BH_Stoch::LongCondition() - verifica as condições para abrir posição longa (retorna 80) e fechar a posição curta (retorna 40);
  • int CBH_BH_Stoch::ShortCondition() - verifica as 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 Harami" deve ser confirmada pelo indicador Stochastic: StochSignal(1)<30 (o valor da linha de sinal do indicador Stochastic do último candle fechado deve ser menor que 30).

  2. A posição curta deve ser fechada se a linha de sinal do 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 CBH_BH_Stoch::LongCondition()
  {
   int result=0;
//--- idx pode ser usado para determinar o modo de operação do EA
//--- idx=0 - neste caso o EA verifica as condições de trade a cada tick
//--- idx=1 - neste caso o EA verifica as condições de trade apenas em candles de notícias
  int idx   =StartIndex();
//--- verificando as condições para abrir posição longa
//--- formação do padrão Bullish Harami e linha de sinal<30
  if (CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) && (StochSignal(1)<30))
     result=80;
//--- verificando as 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;
//--- retorno do resultado
   return(result);
  }

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

  1. A formação do padrão "Bearish Harami" deve ser confirmada pelo indicador Stochastic: StochSignal(1)>70 (o valor da linha de sinal do indicador Stochastic do último candle fechado deve ser maior que 70).

  2. A posição longa deve ser fechada se a linha de sinal do 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 CBH_BH_Stoch::ShortCondition()
  {
   int result=0;
//--- idx pode ser usado para determinar o modo de operação do EA
//--- idx=0 - neste caso o EA verifica as condições de trade a cada tick
//--- idx=1 - neste caso o EA verifica as condições de trade apenas em candles de notícias
  int idx   =StartIndex();
//--- verificando as condições para abrir posição curta
//--- formação do padrão Bearish Harami e linha de sinal>70
  if (CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) && (StochSignal(1)>70))
     result=80;
//--- verificando as 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;
//--- retorno do resultado
   return(result);
  }


2.3. Criando o Consultor Especializado Usando MQL5 Wizard

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

Para criar um Consultor Especializado, inicie o MQL5 Wizard:

Fig. 4. Criando o Consultor Especializado usando MQL5 Wizard

Fig. 4. Criando o Consultor Especializado usando MQL5 Wizard

Vamos especificar o nome do Consultor Especializado:

Fig. 5. Propriedades gerais do Consultor Especializado

Fig. 5. Propriedades gerais do Consultor Especializado

Depois disso, precisamos selecionar os módulos de sinais de trade que serão utilizados.

Fig. 6. Propriedades do sinal do Consultor Especializado

Fig. 6. Propriedades do sinal do Consultor Especializado

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

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

Fig. 7. Propriedades do sinal do Consultor Especializado

Fig. 7. Propriedades do sinal do Consultor Especializado

Módulo de sinais de trade adicionado:

Fig. 8. Propriedades do sinal do Consultor Especializado

Fig. 8. Propriedades do sinal do Consultor Especializado

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

Fig. 9. Propriedades do trailing do Consultor Especializado

Fig. 9. Propriedades do trailing do Consultor Especializado

Quanto às propriedades de gerenciamento de dinheiro, utilizaremos "Trading com volume fixo":

Fig. 10. Propriedades de gerenciamento de dinheiro do Consultor Especializado

Fig. 10. Propriedades de gerenciamento de dinheiro do Consultor Especializado

Ao pressionar o botão "Finalizar", receberemos o código do Consultor Especializado gerado, localizado em Expert_ABH_BH_Stoch.mq5, que será salvo em terminal_data_folder\MQL5\Experts\.

Os parâmetros de entrada padrão do Consultor Especializado gerado:

//--- entradas para sinal principal
input int            Signal_ThresholdOpen   =10;     // Valor do limite de sinal para abrir [0...100]
input int            Signal_ThresholdClose  =10;     // Valor do limite de sinal para fechar [0...100]
input double         Signal_PriceLevel      =0.0;    // Nível de preço para executar uma operação
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 por:

//--- entradas para sinal principal
input int            Signal_ThresholdOpen   =40;     // Valor do limite de sinal para abrir [0...100]
input int            Signal_ThresholdClose  =20;     // Valor do limite de sinal para fechar [0...100]
input double         Signal_PriceLevel      =0.0    // Nível de preço para executar uma operação
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 limite para abrir e fechar posições.

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

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

O Consultor Especializado gerado pelo MQL5 Wizard abre e fecha posições usando os "votos" dos módulos de sinais de trade. O voto do módulo principal (como contêiner, ele 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 usados na média dos "votos". No nosso caso, temos: módulo principal + 1 módulo de sinais de trade, então precisamos levar em conta esse fato ao definir os valores de limite. Por causa disso, os ThresholdOpen e 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 do Backtesting Histórico

Vamos considerar o backtesting do Consultor Especializado em dados históricos (EURUSD H1, período de teste: 01/01/2010 a 04/03/2011, PeriodK=47, PeriodD=9, PeriodSlow=13, MA_period=5).

Na criação do Consultor Especializado, utilizamos um volume fixo (Trading Fixed Lot, 0.1), o algoritmo de Trailing Stop não foi utilizado (Trailing não utilizado).

Fig. 11. Resultados de teste do Consultor Especializado, baseado em Bullish/Bearish Harami + Stochastic

Fig. 11. Resultados de teste do Consultor Especializado, baseado em Bullish/Bearish Harami + 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 Consultor Especializado, criado pelo MQL5 Wizard, está anexado em expert_abh_bh_stoch.mq5.

Lista
Comentário 0