Início Negociação Sistemática Postagem

Criando EAs com MQL5: Sinais de Negociação com Hammer/Hanging Man e Estocástico

Anexo
314.zip (6.58 KB, Baixar 0 vezes)

O MQL5 Wizard permite que você crie EAs prontos com base nas classes da biblioteca padrão que acompanham o terminal do cliente (confira Criando EAs Prontos no MQL5 Wizard para mais detalhes). Essa ferramenta te ajuda a checar suas ideias de trade rapidamente, tudo que você precisa fazer é 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. Depois, é necessário sobrescrever os métodos LongCondition() e ShortCondition() com seus próprios métodos.

Existe um livro chamado "Estratégias dos Melhores Traders" (em russo), onde várias estratégias de trading são abordadas, e nós vamos focar nos padrões de velas de reversão, confirmados pelos osciladores como Estocástico, CCI, MFI e RSI.

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

Aqui, vamos considerar os sinais baseados nos padrões de velas de reversão "Hammer/Hanging Man", confirmados pelo Estocástico. O módulo de sinais de trade é baseado na classe CCandlePattern, que é um exemplo simples de como criar sinais de trade com padrões de velas.

1. Padrões de velas de reversão "Hammer" e "Hanging Man"

1.1. Hammer

O "Hammer" é uma vela com um corpo pequeno e uma longa sombra inferior, formada após um movimento de queda no preço. O padrão "Hammer" indica o fim de uma tendência de baixa.

A cor do corpo da vela não é importante, mas um hammer bullish indica um maior potencial de alta. O corpo do padrão "Hammer" frequentemente se forma próximo ao mínimo da vela anterior. Uma longa sombra inferior e uma sombra superior curta aumentam o potencial de reversão do padrão.

Fig. 1. Padrão de vela

Fig. 1. Padrão de vela "Hammer"

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

//+------------------------------------------------------------------+
//| Verifica a formação do padrão de vela "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 na parte superior 1/3
      (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 é utilizado para checar a formação do padrão de vela "Hammer".


1.2. Hanging Man

O "Hanging Man" é uma vela com um corpo pequeno e uma longa sombra inferior, formada após um movimento de alta no preço. O padrão "Hanging Man" indica o fim de uma tendência de alta.

A cor do corpo da vela não é importante, mas uma vela bearish indica um maior potencial de baixa. O corpo do padrão "Hanging Man" frequentemente se forma próximo ao máximo da vela anterior. Uma longa sombra inferior e uma sombra superior curta aumentam o potencial de reversão do padrão.

Fig. 2. Padrão de vela

Fig. 2. Padrão de vela "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 vela "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 na parte superior 1/3
      (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 é utilizado para checar a formação do padrão de vela "Hanging Man".


2. Sinais de Negociação, Confirmados pelo Indicador Estocástico

Os sinais de negociação para abrir posições longas ou curtas devem ser confirmados pelo oscilador Estocástico. A linha %D deve ser maior ou menor que o nível crítico correspondente (30 ou 70).

O fechamento das posições abertas depende dos valores do indicador %D. Isso pode ser feito em 2 casos:

  1. se a linha %D atingiu 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 seguintes níveis: 20 para posição longa e 80 para posição curta)

Fig. 3. Padrão

Fig. 3. Padrão "Hammer", confirmado pelo indicador Estocástico


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

2.1. Abrindo Posição Longa/Fechando Posição Curta

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

  2. A posição curta deve ser fechada se a linha de sinal do Estocástico 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 CH_HM_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 trade a cada tick
//--- idx=1 - neste caso o EA verifica as condições de trade apenas em novas barras
  int idx   =StartIndex();
//--- verificação das condições para abrir posição longa
//--- formação do padrão Hammer e linha de sinal<30
  if (CheckCandlestickPattern(CANDLE_PATTERN_HAMMER) && (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 "Hanging Man" deve ser confirmada pelo Estocástico: StochSignal(1)>70 (o valor da linha de sinal do indicador Estocástico da última barra completada deve ser maior que 70).

  2. A posição longa deve ser fechada se a linha de sinal do Estocástico 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 CH_HM_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 trade a cada tick
//--- idx=1 - neste caso o EA verifica as condições de trade apenas em novas barras
  int idx   =StartIndex();
//--- verificação das condições para abrir posição curta
//--- formação do padrão Hanging Man e linha de sinal>70
  if (CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN) && (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 o Expert Advisor com o MQL5 Wizard

A classe CH_HM_Stoch não está incluída nas classes da biblioteca padrão, para usá-la, é necessário baixar o arquivo ach_hm_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ê poderá usá-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

Depois disso, precisamos selecionar os módulos de sinais de negociação utilizados.

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 "Sinais baseados em Hammer/Hanging Man confirmados por Estocástico":

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 usaremos "Trailing Stop não utilizado":

Fig. 9. Propriedades de trailing do Expert Advisor

Fig. 9. Propriedades de trailing do Expert Advisor

Em relação às propriedades de gerenciamento de dinheiro, usaremos "Negociação com volume 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", receberemos o código do Expert Advisor gerado, localizado em Expert_AH_HM_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 por:

//--- 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 trade, 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 usando os "votos" dos módulos de sinais de trade. O voto do módulo principal (como um container, que consiste em todos os módulos adicionados) também é usado, mas seus métodos LongCondition() e ShortCondition() sempre retornam 0.

Os resultados dos votos do módulo principal são também usados na média de "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 limiar. Por causa disso, o 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, isso significa que o fechamento das posições será feito somente 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).

No desenvolvimento do Expert Advisor, usamos um volume fixo (Trading Fixed Lot, 0.1), o algoritmo Trailing Stop não é utilizado (Trailing não utilizado).


Fig. 11. Resultados do teste do Expert Advisor, baseado em Hammer/Hanging Man + Estocástico

Fig. 11. Resultados do teste do Expert Advisor, baseado em Hammer/Hanging Man + Estocástico


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 em expert_ah_hm_stoch.mq5.


Publicações relacionadas

Comentário (0)