Como Criar um Expert Advisor Usando MQL5 Wizard para Sinais de Negociação com Padrões de Candlestick 'Hammer' e 'Hanging Man'

Mike 2011.03.21 23:10 72 0 0
Anexo

O MQL5 Wizard permite criar Consultores Especializados prontos com base nas classes da biblioteca padrão que acompanha o terminal do cliente (veja Criando Consultores Especializados no MQL5 Wizard para mais detalhes). Com ele, você pode verificar rapidamente suas ideias de negociação, 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. Em seguida, é necessário sobrescrever os métodos virtuais LongCondition() e ShortCondition() com seus próprios métodos.

Existem livros como "Estratégias dos Melhores Traders" (em russo), que consideram várias estratégias de negociação. Neste artigo, vamos focar nos padrões de candlestick de reversão, confirmados pelos osciladores Stochastic, CCI, MFI e RSI.

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

Aqui, vamos considerar os sinais baseados no padrão de candlestick de reversão "Hammer/Hanging Man", confirmados pelo indicador CCI. 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 candlestick.

1. Padrões de Candlestick "Hammer" e "Hanging Man"

1.1. Hammer

O "Hammer" é um candlestick com um corpo pequeno e um longo pavio inferior, formado após um movimento de queda nos preços. O padrão "Hammer" indica o fim de uma tendência de baixa.

A cor do corpo do candlestick não é importante, mas um hammer de alta indica um maior potencial de alta. O corpo do padrão "Hammer" geralmente é formado perto do mínimo do candle anterior. Um pavio inferior mais longo e um pavio superior mais curto levam a um maior potencial de reversão.


Fig. 1. Padrão de candlestick 'Hammer'

Fig. 1. Padrão de candlestick 'Hammer'

O reconhecimento do padrão "Hammer" é implementado no método CheckPatternHammer() da classe CCandlePattern:

//+------------------------------------------------------------------+
//| Verifica a formação do padrão de candlestick "Hammer"             |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternHammer()
  {
//--- Hammer
   if((MidPoint(1)<CloseAvg(2))                                 && // tendência de baixa
      (MathMin(Open(1),Close(1))>(High(1)-(High(1)-Low(1))/3.0)) && // corpo no 1/3 superior
      (Close(1)<Close(2)) && (Open(1)<Open(2)))                    // gap do corpo
      return(true);
//---
   return(false);
  }

O método CheckCandlestickPattern(CANDLE_PATTERN_HAMMER) da classe CCandlePattern é usado para verificar a formação do padrão "Hammer".


1.2. Hanging Man

O "Hanging Man" é um candlestick com um corpo pequeno e um longo pavio inferior, formado após um movimento de alta nos preços. O padrão "Hanging Man" indica o fim de uma tendência de alta.

A cor do corpo do candlestick não é importante, mas um candle de baixa indica um maior potencial de baixa. O corpo do padrão "Hanging Man" geralmente é formado perto do máximo do candle anterior. Um pavio inferior mais longo e um pavio superior mais curto levam a um maior potencial de reversão.

Fig. 2. Padrão de candlestick 'Hanging Man'

Fig. 2. Padrão de candlestick 'Hanging Man'

O reconhecimento do padrão "Hanging Man" é implementado no método CheckPatternHangingMan() da classe CCandlePattern:

//+------------------------------------------------------------------+
//| Verifica a formação do padrão de candlestick "Hanging Man"       |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternHangingMan()
  {
//--- Hanging Man
   if((MidPoint(1)>CloseAvg(2))                                && // tendência de alta
      (MathMin(Open(1),Close(1)>(High(1)-(High(1)-Low(1))/3.0)) && // corpo no 1/3 superior
      (Close(1)>Close(2)) && (Open(1)>Open(2))))                  // gap do corpo
      return(true);
//---
   return(false);
  }

O método CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN) da classe CCandlePattern é usado para verificar a formação do padrão "Hanging Man".


2. Sinais de Negociação, Confirmados pelo Indicador CCI

Os sinais de negociação para abrir posições longas ou curtas devem ser confirmados pelo indicador CCI. O valor do CCI deve ser maior/menor que os níveis críticos (-50 para posição longa e 50 para posição curta).

O fechamento de posições abertas depende dos valores do CCI. Isso pode ser feito em 2 casos:

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

Fig. 3. Padrão 'Hammer', confirmado pelo indicador CCI

Fig. 3. Padrão 'Hammer', confirmado pelo indicador CCI


  • int CH_HM_CCI::LongCondition() - verifica as condições para abrir uma posição longa (retorna 80) e fechar a posição curta (retorna 40);
  • int CH_HM_CCI::ShortCondition() - verifica as condições para abrir uma 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 "Hammer" deve ser confirmada pelo indicador CCI: CCI(1)<-50 (o valor do CCI do último candle fechado deve ser menor que -50).

  2. A posição curta deve ser fechada se o indicador CCI cruzou para cima o nível crítico -80 ou cruzou para baixo o nível crítico 80.

//+------------------------------------------------------------------+
//| Verifica as 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 CH_HM_CCI::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 em cada tick
//--- idx=1 - neste caso, o EA verifica as condições de negociação apenas em candles novos
   int idx   =StartIndex();
//--- verificação das condições para abrir posição longa
//--- formação do padrão Hammer e CCI<-50
   if(CheckCandlestickPattern(CANDLE_PATTERN_HAMMER) && (CCI(1)<-50))
     result=80;
//--- verificação das condições para fechar posição curta
//--- cruzamento da linha do sinal nos níveis de sobrecompra/sobrevenda (para baixo -80, para baixo -80)
   if(((CCI(1)>-80) && (CCI(2)<-80)) || ((CCI(1)<80) && (CCI(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 "Hanging Man" deve ser confirmada pelo indicador CCI: CCI(1)>50 (o valor do indicador CCI do último candle fechado deve ser maior que 50).

  2. A posição longa deve ser fechada se o indicador CCI cruzou para baixo os níveis -80 ou 80.

//+------------------------------------------------------------------+
//| Verifica as 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 CH_HM_CCI::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 em cada tick
//--- idx=1 - neste caso, o EA verifica as condições de negociação apenas em candles novos
   int idx   =StartIndex();
//--- verificação das condições para abrir posição curta
//--- formação do padrão Hanging Man e CCI>50
   if(CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN) && (CCI(1)>50))
     result=80;
//--- verificação das condições para fechar posição longa
//--- cruzamento da linha do sinal nos níveis de sobrecompra/sobrevenda (para baixo -80, para baixo 80)
   if(((CCI(1)<80) && (CCI(2)>80)) || ((CCI(1)<-80) && (CCI(2)>-80)))
     result=40;
//--- retornar resultado
   return(result);
  }


2.3. Criando um Expert Advisor Usando MQL5 Wizard

A classe CH_HM_CCI não está incluída nas classes da Biblioteca Padrão, para usá-la, é necessário baixar o arquivo ach_hm_cci.mqh (veja 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ê poderá usá-lo no MQL5 Wizard após reiniciar o MetaEditor.

Para criar um Consultor Especializado, execute o MQL5 Wizard:

Fig. 4. Criando Consultor Especializado usando MQL5 Wizard

Fig. 4. Criando 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 negociação utilizados.

Fig. 6. Propriedades de sinal do Consultor Especializado

Fig. 6. Propriedades de sinal do Consultor Especializado

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

Adicionando o módulo Sinais baseados em Hammer/Hanging Man confirmados pelo CCI:

Fig. 7. Propriedades de sinal do Consultor Especializado

Fig. 7. Propriedades de sinal do Consultor Especializado

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

Fig. 8. Propriedades de sinal do Consultor Especializado

Fig. 8. Propriedades de sinal do Consultor Especializado

Você pode selecionar qualquer propriedade de trailing, mas usaremos "Trailing Stop não utilizado":

Fig. 9. Propriedades de trailing do Consultor Especializado

Fig. 9. Propriedades de trailing do Consultor Especializado

Quanto às propriedades de gestão de dinheiro, usaremos "Negociação com volume fixo":

Fig. 10. Propriedades de gestão de dinheiro do Consultor Especializado

Fig. 10. Propriedades de gestão de dinheiro do Consultor Especializado

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

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

//--- inputs 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 uma negociaçã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:

//--- inputs 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 uma negociaçã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 limiar para abrir e fechar posições.

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

  • 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 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 isso em conta ao definir os valores de limiar. 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 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 Testes de Retrospectiva

Vamos considerar o teste de retrocesso do Consultor Especializado em dados históricos (EURUSD H1, período de teste: 2010.01.01-2011.03.16, PeriodCCI=25, MA_period=5).

Na criação do Consultor Especializado, usamos um volume fixo (Negociação com Volume Fixo, 0.1), e o algoritmo de Trailing Stop não foi utilizado (Trailing não utilizado).

Fig. 11. Resultados de teste do Consultor Especializado, baseado em Hammer/Hanging Man + CCI

Fig. 11. Resultados de teste do Consultor Especializado, baseado em Hammer/Hanging Man + CCI


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 no expert_ah_hm_cci.mq5.


Lista
Comentário 0