Início Negociação Sistemática Postagem

Crie Seu Expert Advisor com MQL5: Sinais de Comércio Baseados em Dark Cloud Cover e Piercing Line com RSI

Anexo
300.zip (6.5 KB, Baixar 0 vezes)

O MQL5 Wizard é uma ferramenta poderosa que permite criar robôs de negociação (EAs) prontos para uso, utilizando as classes da biblioteca padrão que vem com o terminal do cliente. Com ele, você pode testar suas ideias de trading rapidamente, bastando 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 geral é 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 suas próprias implementações.

Se você está em busca de inspiração, recomendo o livro "Estratégias dos Melhores Traders" (em russo), que aborda várias estratégias de trading. Aqui, vamos focar nos padrões de velas de reversão, confirmados pelos osciladores como Estocástico, CCI, MFI e RSI.

A melhor forma é 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 a classe derivada de CCandlePattern e adicionar os recursos necessários (como confirmação por osciladores) ali.

Aqui, vamos considerar os sinais baseados no padrão de velas de reversão "Dark Cloud Cover/Piercing Line", confirmados pelo indicador RSI. O módulo de sinais de negociação é baseado na classe CCandlePattern, que é um exemplo simples de uso para a criação de sinais de negociação com padrões de velas.


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

1.1. Dark Cloud Cover

Esse é um padrão de reversão de alta que ocorre no final de uma tendência de alta. No primeiro dia, forma-se uma vela branca longa e, no segundo dia, há um gap de alta. No entanto, o fechamento do segundo dia ocorre abaixo do ponto médio do primeiro dia.

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

Figura 1. Padrão de vela '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 vela "Dark Cloud Cover" |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternDarkCloudCover()
  {
//--- Dark Cloud Cover 
   if((Close(2)-Open(2)>AvgBody(1))  && // (vela branca longa)
      (Close(1)<Close(2))            && // 
      (Close(1)>Open(2))             && // (fechamento dentro do corpo anterior)
      (MidOpenClose(2)>CloseAvg(1))  && // (tendência de alta)
      (Open(1)>High(2)))                // (abertura 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, sugerindo 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 velas. Quanto mais penetrante o fechamento do segundo dia no corpo do primeiro dia, maior a probabilidade de sucesso do sinal de reversão.

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

Figura 2. Padrão de vela '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 vela "Piercing Line" |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternPiercingLine()
  {
//--- Piercing Line
   if((Close(1)-Open(1)>AvgBody(1)) && // (vela branca longa)
      (Open(2)-Close(2)>AvgBody(1)) && // (vela preta longa)
      (Close(1)>Close(2))           && //  
      (Close(1)<Open(2))            && // (fechamento dentro do corpo anterior) 
      (MidOpenClose(2)<CloseAvg(2)) && // (tendência de baixa)
      (Open(1)<Low(2)))                // (abertura 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 RSI

Os sinais de negociação para abrir posição longa ou curta devem ser confirmados pelo indicador RSI. O valor do RSI deve estar abaixo/acima dos níveis críticos (40 para posição longa e 60 para posição curta).

O fechamento da posição aberta depende dos valores do RSI. Isso pode ser feito em 2 casos:

  • se o RSI 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 RSI 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 RSI

Figura 3. Padrão 'Dark Cloud Cover' confirmado pelo indicador RSI


  • int CDC_PL_RSI::LongCondition() - verifica as condições para abrir posição longa (retorna 80) e fechar a posição curta (retorna 40);
  • int CDC_PL_RSI::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 "Piercing Line" deve ser confirmada pelo RSI: RSI(1)<40 (o valor do RSI da última barra completada deve ser menor que 40).

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

//+------------------------------------------------------------------+
//| 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 CDC_PL_RSI::LongCondition()
  {
   int result=0;
//--- o idx pode ser usado para determinar o modo de operação do EA
//--- idx=0 - nesse caso, o EA verifica as condições de negociação a cada tick
//--- idx=1 - nesse caso, o EA verifica as condições de negociação apenas em novas barras
  int idx   =StartIndex();
//--- verificando as condições para abrir posição longa
//--- formação do padrão Piercing Line e RSI<30
  if(CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) && (RSI(1)<40))
     result=80;
//--- verificando as condições para fechar a posição curta
//--- cruzamento da linha de sinal dos níveis de sobrecompra/sobrevenda (para cima 30, para cima 70)
  if(((RSI(1)>30) && (RSI(2)<30)) || ((RSI(1)>70) && (RSI(2)<70)))
     result=40;
//--- retorna o resultado
   return(result);
  }

2.2. Abrir Posição Curta / Fechar Posição Longa

  1. A formação do padrão "Dark Cloud Cover" deve ser confirmada pelo RSI: RSI(1)>60 (o valor do indicador RSI da última barra completada deve ser maior que 60).

  2. A posição longa deve ser fechada se o RSI cruzar para baixo os níveis críticos 70 ou 30.

//+------------------------------------------------------------------+
//| 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 CDC_PL_RSI::ShortCondition()
  {
   int result=0;
//--- o idx pode ser usado para determinar o modo de operação do EA
//--- idx=0 - nesse caso, o EA verifica as condições de negociação a cada tick
//--- idx=1 - nesse caso, o EA verifica as condições de negociação apenas em novas barras
   int idx   =StartIndex();
//--- verificando as condições para abrir posição curta
//--- formação do padrão Dark Cloud Cover e RSI>60
  if(CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) && (RSI(1)>60))
     result=80;
//--- verificando as condições para fechar a posição longa
//--- cruzamento da linha de sinal dos níveis de sobrecompra/sobrevenda (para baixo 70, para baixo 30)
   if(((RSI(1)<70) && (RSI(2)>70)) || ((RSI(1)<30) && (RSI(2)>30)))
     result=40;
//--- retorna o resultado
   return(result);
  }


2.3. Criando o Expert Advisor Usando o MQL5 Wizard

A classe CDC_PL_RSI não está incluída nas classes da Biblioteca Padrão, para utilizá-la, é necessário baixar o arquivo adc_pl_rsi.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á-lo no MQL5 Wizard após reiniciar o MetaEditor.

Para criar um Expert Advisor, inicie o MQL5 Wizard:

Fig. 4. Criando o Expert Advisor usando o MQL5 Wizard

Figura 4. Criando o Expert Advisor usando o MQL5 Wizard

Vamos especificar o nome do Expert Advisor:

Fig. 5. Propriedades gerais do Expert Advisor

Figura 5. Propriedades gerais do Expert Advisor

Depois, precisamos selecionar os módulos de sinais de negociação que usaremos.

Fig. 6. Propriedades de sinal do Expert Advisor

Figura 6. Propriedades de sinal do Expert Advisor

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

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

Fig. 7. Propriedades de sinal do Expert Advisor

Figura 7. Propriedades de sinal do Expert Advisor

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

Fig. 8. Propriedades de sinal do Expert Advisor

Figura 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 money management do Expert Advisor

Figura 9. Propriedades de money management do Expert Advisor

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

Fig. 10. Propriedades de gerenciamento de dinheiro do Expert Advisor

Figura 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_RSI.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 de limiar do sinal para abrir [0...100]
input int            Signal_ThresholdClose  =10;     // Valor de limiar 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 de limiar do sinal para abrir [0...100]
input int            Signal_ThresholdClose  =20;     // Valor de limiar 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 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 dos limiares:

  • 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 esse fato em consideração ao definir os valores de limiar. Por causa disso, os valores de 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 da História

Vamos considerar o backtesting do Expert Advisor em dados históricos (EURUSD H1, período de teste: 2010.01.01-2011.02.23, PeriodRSI=20, MA_period=14).

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

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

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


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

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


Publicações relacionadas

Comentário (0)