Início Negociação Sistemática Postagem

Como Criar um Expert Advisor com MQL5: Sinais de Negociação Baseados em Padrões de Candlestick

Anexo
299.zip (6.51 KB, Baixar 0 vezes)

O MQL5 Wizard é uma ferramenta fantástica que possibilita a criação de Expert Advisors prontos, utilizando as classes da biblioteca padrão que vem com o terminal cliente (veja Criando Expert Advisors Prontos no MQL5 Wizard para mais detalhes). Essa ferramenta permite que você teste suas ideias de negociação rapidamente, tudo que você precisa é 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. A próxima etapa é sobrepor os métodos virtuais LongCondition() e ShortCondition() com os seus próprios métodos.

Há um livro chamado "Estratégias dos Melhores Traders" (em russo) que aborda muitas estratégias de negociação. Neste artigo, vamos focar em padrões de reversão de candlestick, confirmados pelos osciladores como 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, basta 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 "Dark Cloud Cover/Piercing Line", confirmados pelo Market Facilitation Index (MFI). 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 candlestick.


1. Padrões de Candlestick de Reversão: "Dark Cloud Cover" e "Piercing Line"

1.1. Dark Cloud Cover

O "Dark Cloud Cover" é um padrão de reversão de candlestick bearish que ocorre no final de uma tendência de alta. Um longo candlestick branco é formado no primeiro dia e um gap de alta é criado no segundo dia. No entanto, o fechamento do segundo dia é abaixo do ponto médio do primeiro dia.

Fig. 1. Padrão de candlestick 'Dark Cloud Cover'

Fig. 1. Padrão de candlestick "Dark Cloud Cover"

O reconhecimento do padrão "Dark Cloud Cover" é implementado no método CheckPatternDarkCloudCover() da classe CCandlePattern:

//+------------------------------------------------------------------+
//| Verifica a formação do padrão de candlestick "Dark Cloud Cover" |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternDarkCloudCover()
  {
//--- Dark Cloud Cover 
   if((Close(2)-Open(2)>AvgBody(1))  && // (long white)
      (Close(1)<Close(2))            && // 
      (Close(1)>Open(2))             && // (close dentro do corpo anterior)
      (MidOpenClose(2)>CloseAvg(1))  && // (tendência de alta)
      (Open(1)>High(2)))                // (abre em nova alta)
      return(true);
//---
   return(false);
  }

O método CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) da classe CCandlePattern é utilizado para verificar a formação do padrão "Dark Cloud Cover".


1.2. Piercing Line

O gap de baixa no segundo dia perpetua a tendência de baixa. No entanto, o fechamento do segundo dia está acima do ponto médio do corpo do primeiro dia. Isso sugere aos vendedores que um fundo pode estar se formando. Essa ação de preço não é tão discernível em gráficos de barras quanto em gráficos de candlestick. Quanto mais profundo o fechamento do segundo dia em relação ao corpo do primeiro dia, maior a probabilidade de que o sinal de reversão tenha sucesso.

Fig. 2. Padrão de candlestick 'Piercing Line'

Fig. 2. Padrão de candlestick "Piercing Line"

O reconhecimento do padrão "Piercing Line" é implementado no método CheckPatternPiercingLine() da classe CCandlePattern:

//+------------------------------------------------------------------+
//| Verifica a formação do padrão de candlestick "Piercing Line" |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternPiercingLine()
  {
//--- Piercing Line
   if((Close(1)-Open(1)>AvgBody(1)) && // (long white)
      (Open(2)-Close(2)>AvgBody(1)) && // (long black)
      (Close(1)>Close(2))           && //  
      (Close(1)<Open(2))            && // (fecha dentro do corpo anterior) 
      (MidOpenClose(2)<CloseAvg(2)) && // (tendência de baixa)
      (Open(1)<Low(2)))                // (abre abaixo da baixa anterior) 
      return(true);
//---
   return(false);
  }

O método CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) da classe CCandlePattern é utilizado para verificar a formação do padrão "Piercing Line".


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 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 das posições abertas depende dos valores do indicador MFI. Isso pode ser feito em 2 casos:

  • se o MFI atingiu o nível crítico oposto (70 para posição longa e 30 para posição curta)
  • 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 'Dark Cloud Cover' confirmado pelo indicador MFI

Fig. 3. Padrão "Dark Cloud Cover" confirmado pelo indicador MFI


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

  2. A posição curta deve ser fechada se o MFI tiver cruzado 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 CDC_PL_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 novos candles
  int idx   =StartIndex();
//--- verificando condições para abrir posição longa
//--- formação do padrão Piercing Line e MFI<40
  if(CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) && (MFI(1)<40))
     result=80;
//--- verificando condições para fechar posição curta
//--- cruzamento da linha de sinal dos níveis de sobrecompra/sobrevenda (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. Abrindo Posição Curta/Fechando Posição Longa

  1. A formação do padrão "Dark Cloud Cover" deve ser confirmada pelo MFI: MFI(1)>60 (o valor do MFI do último candle fechado deve ser maior que 60).

  2. A posição longa deve ser fechada se o MFI tiver cruzado 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 CDC_PL_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 novos candles
  int idx   =StartIndex();
//--- verificando condições para abrir posição curta
//--- formação do padrão Dark Cloud Cover e MFI>60
  if(CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) && (MFI(1)>60))
     result=80;
//--- verificando condições para fechar posição longa
//--- cruzamento da linha de sinal dos níveis de sobrecompra/sobrevenda (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 um Expert Advisor usando MQL5 Wizard

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

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

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

Adicionando o módulo Sinais baseados no Dark Cloud Cover/Piercing Line confirmados pelo MFI:

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

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 "Finalizar", obteremos o código do Expert Advisor gerado, localizado em Expert_ADC_PL_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 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 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:

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

No código dos métodos LongCondition() e ShortCondition() da classe de sinais de negociação, definimos 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 contêiner, 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 são também 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 limites. 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 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: 01/01/2010 a 16/03/2011, PeriodMFI=49, MA_period=11).

Na criação do Expert Advisor, utilizamos o volume fixo (Trading Fixed Lot, 0.1), o algoritmo de Trailing Stop não é utilizado (Trailing not used).

Fig. 11. Resultados do teste do Expert Advisor baseado em Dark Cloud Cover/Piercing Line + MFI

Fig. 11. Resultados do teste do Expert Advisor baseado em Dark Cloud Cover/Piercing Line + MFI


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_adc_pl_mfi.mq5.


Publicações relacionadas

Comentário (0)