Início Negociação Sistemática Postagem

Sinais de Negociação com Bullish Harami/Bearish Harami e MFI no MetaTrader 5

Anexo
312.zip (6.49 KB, Baixar 0 vezes)

O MQL5 Wizard é uma ferramenta poderosa que permite a criação de Expert Advisors prontos, utilizando classes da biblioteca padrão que vem junto com o terminal do cliente (para mais detalhes, confira Criando Expert Advisors Prontos no MQL5 Wizard). Essa ferramenta ajuda a testar rapidamente suas ideias de negociação, basta criar sua própria classe de sinais de negociação. A estrutura dessa classe e exemplos podem ser encontrados no artigo MQL5 Wizard: Como Criar um Módulo de Sinais de Negociação.

A ideia principal é a seguinte: a classe de sinais de negociação é derivada de CExpertSignal, e 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 são discutidas várias estratégias de negociação, focando em padrões de reversão de velas, confirmados por 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, basta escrever uma classe derivada de CCandlePattern e adicionar as funcionalidades necessárias (como a confirmação por osciladores).

Aqui, vamos considerar os sinais baseados no padrão de reversão de velas "Bullish Harami/Bearish Harami", confirmados pelo índice de facilitação de mercado (MFI). O módulo de sinais de negociação é baseado na classe CCandlePattern, que fornece um exemplo simples de seu uso para criar sinais de negociação com padrões de velas.


1. Padrões de reversão "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 vela é seguida por uma vela menor cujo corpo está localizado dentro da faixa vertical do corpo maior. Este padrão indica que a tendência de queda pode estar se revertendo, sinalizando que é um bom momento para entrar em uma posição longa. A segunda vela abre com um gap para cima.

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

Fig. 1. Padrão de vela Bullish Harami

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

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

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

A verificação do padrão de vela (CANDLE_PATTERN_BULLISH_HARAMI) é feita pelo método CheckCandlestickPattern da classe CCandlePattern.


1.2. Bearish Harami

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

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

Fig. 2. Padrão de vela Bearish Harami

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

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

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

A verificação do padrão de vela (CANDLE_PATTERN_BEARISH_HARAMI) é feita pelo método CheckCandlestickPattern da classe CCandlePattern.


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

Os sinais de negociação para abrir posições longas ou curtas devem ser confirmados pelo indicador MFI. O valor do indicador MFI deve ser inferior a 40 (para posições longas) ou superior a 60 (para posições curtas).

O fechamento de posições abertas depende dos valores do indicador MFI. Isso pode ocorrer em 2 casos:

  1. se o MFI atingiu o nível crítico oposto (70 para posição longa e 30 para posição curta)
  2. se o sinal reverso não for confirmado (quando o indicador MFI atinge os seguintes níveis: 30 para posição longa e 70 para posição curta)

Fig. 3. Padrão Bullish Harami, confirmado pelo indicador MFI

Fig. 3. Padrão "Bullish Harami", confirmado pelo indicador MFI


  • int CBH_BH_MFI::LongCondition() - verifica condições para abrir posição longa (retorna 80) e fechar posição curta (retorna 40);
  • int CBH_BH_MFI::ShortCondition() - verifica condições para abrir posição curta (retorna 80) e fechar 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 MFI: MFi(1)<40 (o valor do indicador MFI da última barra concluída deve ser menor que 40).

  2. A posição curta deve ser fechada se o indicador MFI cruzar para cima os níveis críticos (70 ou 30).

//+------------------------------------------------------------------+
//| 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_MFI::LongCondition()
  {
   int result=0;
//--- idx pode ser usado para determinar o modo de operação do Expert Advisor
//--- 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();
//--- verificação das condições para abrir posição longa
//--- formação do padrão Bullish Harami e MFI<40
  if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) && (MFI(1)<40))
     result=80;
//--- verificação das condições para fechar posição curta
//--- cruzamento da linha de sinal dos níveis sobrecomprados/sobrevendidos (para cima 30, para cima 70)
  if(((MFI(1)>30) && (MFI(2)<30)) || ((MFI(1)>70) && (MFI(2)<70)))
     result=40;
//--- retornar 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 MFI: MFI(1)>60 (o valor do indicador MFI da última barra concluída deve ser maior que 60).

  2. A posição longa deve ser fechada se o indicador MFI cruzar para cima os níveis críticos (70 ou 30).

//+------------------------------------------------------------------+
//| 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_MFI::ShortCondition()
  {
   int result=0;
//--- idx pode ser usado para determinar o modo de operação do Expert Advisor
//--- 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();
//--- verificação das condições para abrir posição curta
//--- formação do padrão Bearish Harami e MFI>60
  if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) && (MFI(1)>60))
     result=80;
//--- verificação das condições para fechar posição longa
//--- cruzamento da linha de sinal dos níveis sobrecomprados/sobrevendidos (para cima 70, para baixo 30)
   if(((MFI(1)>70) && (MFI(2)<70)) || ((MFI(1)<30) && (MFI(2)>30)))
     result=40;
//--- retornar resultado
   return(result);
  }


2.3. Criando Expert Advisor usando MQL5 Wizard

A classe CBH_BH_MFI não está incluída nas classes da Biblioteca Padrão, para usá-la, é necessário baixar o arquivo abh_bh_mfi.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 acandlepatterns.mqh. Você pode usá-los 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

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

Fig. 6. Propriedades do sinal do Expert Advisor

Fig. 6. Propriedades do sinal do Expert Advisor

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

Adicionando o módulo de sinais Baseado em Bullish Harami/Bearish Harami confirmado pelo MFI:

Fig. 7. Propriedades do sinal do Expert Advisor

Fig. 7. Propriedades do sinal do Expert Advisor

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

Fig. 8. Propriedades do sinal do Expert Advisor

Fig. 8. Propriedades do 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

Quanto à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 "Concluir", obteremos o código do Expert Advisor gerado, localizado em Expert_ABH_BH_MFI.mq5, que será salvo na pasta terminal_data_folder\MQL5\Experts\.

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

//--- entradas para o 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 substituídos por:

//--- entradas para o 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 limite 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 limite:

  • 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 negociação. 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 negociação, então precisamos levar isso em conta ao definir os valores do limite. Por causa disso, os valores 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 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.16, PeriodMFI=37, MA_period=11).

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

Fig. 11. Resultados do teste do Expert Advisor, baseado em Bullish Harami/Bearish Harami + MFI

Fig. 11. Resultados do teste do Expert Advisor, baseado em Bullish Harami/Bearish Harami + MFI


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

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


Publicações relacionadas

Comentário (0)