Como Criar Sinais de Negociação com MQL5: Engulfing Bullish/Bearish + CCI

Mike 2011.03.10 19:54 24 0 0
Anexo

O MQL5 Wizard é uma ferramenta poderosa que permite criar Expert Advisors (EAs) prontos para uso, baseando-se nas classes da biblioteca padrão fornecida com o terminal cliente. Essa ferramenta é ideal para quem deseja validar rapidamente suas ideias de negociação; tudo que você precisa fazer é desenvolver sua própria classe de sinais de negociação. A estrutura dessa classe, juntamente com um exemplo, pode ser encontrada 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. Em seguida, é necessário sobrescrever os métodos virtuais LongCondition() e ShortCondition() com seus próprios métodos.

Um bom recurso é o livro "Estratégias dos melhores traders" (em russo), que discute várias estratégias de negociação. Vamos focar nos padrões de velas de reversão, confirmados pelos osciladores Estocástico, CCI, MFI e RSI.

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

Aqui, focaremos nos sinais baseados nos padrões de reversão "Bullish Engulfing/Bearish Engulfing", confirmados pelo indicador CCI. O módulo de sinais de negociação é baseado na classe CCandlePattern, que é um exemplo simples de como utilizá-la para criar sinais de negociação com padrões de velas.

1. Padrões de Velas 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 a eclipsa completamente. As sombras da pequena vela são curtas, permitindo que o corpo da grande vela 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 de vela "Bullish Engulfing"      |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBullishEngulfing()
  {
//--- Bullish Engulfing
   if((Open(2)>Close(2))             &&  // a vela anterior é de baixa
      (Close(1)-Open(1)>AvgBody(1))  &&  // corpo da vela de alta é maior que a média do corpo 
      (Close(1)>Open(2))             &&  // preço de fechamento da vela de alta é maior que o preço de abertura da vela de baixa
      (MidOpenClose(2)<CloseAvg(2))  &&  // tendência de baixa
      (Open(1)<Close(2)))                // preço de abertura da vela de alta é menor que o preço de fechamento da vela de baixa
      return(true);
//---
   return(false);
  }

O método CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) da classe CCandlePattern é utilizado para verificar a formação do padrão de vela "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 a eclipsa completamente. As sombras da pequena vela também são curtas, permitindo que o corpo da grande vela 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 de vela "Bearish Engulfing"      |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBearishEngulfing()
  {
//--- Bearish Engulfing
   if((Open(2)<Close(2))            &&  // a vela anterior é de alta
      (Open(1)-Close(1)>AvgBody(1)) &&  // corpo da vela é maior que a média do corpo
      (Close(1)<Open(2))            &&  // preço de fechamento da vela de baixa é menor que o preço de abertura da vela de alta
      (MidOpenClose(2)>CloseAvg(2)) &&  // tendência de alta
      (Open(1)>Close(2)))               // preço de abertura da vela de baixa é maior que o preço de fechamento da vela de alta
      return(true);
//---
   return(false);
  }

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


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 da posição aberta depende dos valores do CCI. Isso pode ocorrer em 2 situações:

  1. se a linha do CCI alcançar 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 Bullish Engulfing, confirmado pelo indicador CCI

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


  • int CBE_BE_CCI::LongCondition() - verifica as condições para abrir posição longa (retorna 80) e fechar a posição curta (retorna 40);
  • int CBE_BE_CCI::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 Engulfing" deve ser confirmada pelo CCI: CCI(1)<-50 (o valor do CCI da última barra completada 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 de 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_CCI::LongCondition()
  {
   int result=0;
//--- idx pode ser usado para determinar o modo de trabalho do Expert Advisor
//--- idx=0 - neste caso, EA verifica as condições de negociação a cada tick
//--- idx=1 - neste caso, EA verifica as condições de negociação apenas em novas barras
   int idx   =StartIndex();
//--- verificação das condições para abrir posição longa
//--- formação do padrão Bullish Engulfing e CCI<-50
   if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) && (CCI(1)<-50))
     result=80;
//--- verificação das condições para fechar a posição curta
//--- cruzamento da linha de sinal dos 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;
//--- retorna o 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 CCI: CCI(1)>50 (o valor do CCI do último barra completada deve ser maior que 50).

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

//+------------------------------------------------------------------+
//| Verifica as condições de 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_CCI::ShortCondition()
  {
   int result=0;
//--- idx pode ser usado para determinar o modo de trabalho do Expert Advisor
//--- idx=0 - neste caso, EA verifica as condições de negociação a cada tick
//--- idx=1 - neste caso, EA verifica as condições de negociação apenas em novas barras
   int idx   =StartIndex();
//--- verificação das condições para abrir posição curta
//--- formação do padrão Bearish Engulfing e CCI>50
   if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) && (CCI(1)>50))
     result=80;
//--- verificação das condições para fechar a posição longa
//--- cruzamento da linha de sinal dos 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;
//--- retorna o resultado
   return(result);
  }


2.3. Criando Expert Advisor Usando MQL5 Wizard

A classe CBE_BE_CCI não está incluída nas classes da Biblioteca Padrão; para utilizá-la, é necessário baixar o arquivo acbe_be_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ê pode utilizá-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

Após isso, 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, utilizamos apenas um módulo de sinais de negociação.

Adicionando o módulo de sinais Baseados em Bullish Engulfing/Bearish Engulfing confirmados pelo CCI:

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 utilizaremos "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 gestão de dinheiro, utilizaremos "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", obteremos o código do Expert Advisor gerado, localizado em Expert_ABE_BE_CCI.mq5, que será salvo na pasta terminal_data_folder\MQL5\Experts\.

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

//--- 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 limite para abrir e fechar posições.

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

  • 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 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 usados 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 limite. Por causa disso, o ThresholdOpen e o ThresholdClose devem ser definidos como 40=(0+80)/2 e 20=(0+40)/2.

Os valores de Signal_StopLevel e Signal_TakeLevel são definidos como 0, o que significa que o fechamento das posições só ocorrerá 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, PeriodCCI=49, MA_period=11).

Na criação do Expert Advisor, utilizamos 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 Engulfing/Bearish Engulfing + CCI

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


A melhor combinação de parâmetros de entrada pode ser encontrada utilizando 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_cci.mq5.


Lista
Comentário 0