Início Negociação Sistemática Postagem

MQL5 Wizard: Sinais de Negociação com Padrões Candlestick e RSI no MetaTrader 5

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

O MQL5 Wizard é uma ferramenta poderosa que possibilita a criação de Robôs de Negociação prontos, utilizando as classes da biblioteca padrão que acompanham o terminal cliente. Com ele, você pode verificar suas ideias de negociação de forma rápida, basta criar sua própria classe de sinais de negociação. Para mais detalhes sobre a estrutura dessa classe, confira o 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 deve ser derivada de CExpertSignal. A partir daí, é necessário sobrescrever os métodos virtuais LongCondition() e ShortCondition() com suas próprias implementações.

Um livro interessante é "Estratégias dos melhores traders" (em russo), que aborda várias estratégias de negociação. Vamos focar nos padrões de reversão de candlestick, confirmados pelos osciladores 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 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 (como a confirmação por osciladores).

Neste artigo, vamos analisar os sinais baseados no padrão de reversão "3 Corvos Negros / 3 Soldados Brancos", confirmados pelo indicador Índice de Força Relativa (RSI). O módulo de sinais de negociação é baseado na classe CCandlePattern, que oferece um exemplo simples de como criar sinais de negociação com padrões de candlestick.


1. Padrões de Candlestick "3 Corvos Negros" e "3 Soldados Brancos"

1.1. 3 Corvos Negros

Esse é um padrão de candlestick de baixa que indica a reversão de uma tendência de alta. O padrão é formado por três candlesticks consecutivos com corpo longo, que fecharam abaixo do dia anterior, e cada abertura ocorrendo dentro do corpo da vela anterior.

Fig. 1. Padrão de Candlestick 3 Corvos Negros

Fig. 1. Padrão de Candlestick "3 Corvos Negros"

O reconhecimento do padrão "3 Corvos Negros" é realizado pelo método CheckPatternThreeBlackCrows da classe CCandlePattern:

//+------------------------------------------------------------------+
//| Verifica a formação do padrão de candlestick "3 Corvos Negros"  |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternThreeBlackCrows()
  {
//--- 3 Corvos Negros 
   if((Open(3)-Close(3)>AvgBody(1)) && // (vela preta longa)
      (Open(2)-Close(2)>AvgBody(1)) &&
      (Open(1)-Close(1)>AvgBody(1)) && 
      (MidPoint(2)<MidPoint(3))     && // (meios inferiores)
      (MidPoint(1)<MidPoint(2)))       
      return(true);
//---
   return(false);
  }

O método CheckCandlestickPattern(CANDLE_PATTERN_THREE_BLACK_CROWS) da classe CCandlePattern é utilizado para verificar a formação do padrão "3 Corvos Negros".


1.2. Padrão de Candlestick 3 Soldados Brancos

Esse é um padrão de candlestick de alta que indica a reversão de uma tendência de baixa. O padrão é formado por três candlesticks consecutivos com corpo longo, que fecharam acima do dia anterior, com cada abertura ocorrendo dentro do corpo da vela anterior.

O padrão é válido enquanto a vela do segundo dia abrir na metade superior do intervalo do primeiro dia. Ao final do segundo dia, deve fechar perto de sua máxima, com uma sombra superior bem pequena ou inexistente. O mesmo padrão é então repetido no terceiro dia.

Fig. 2. Padrão de Candlestick 3 Soldados Brancos

Fig. 2. Padrão de Candlestick "3 Soldados Brancos"

Aqui está o método para reconhecimento do padrão "3 Soldados Brancos":

//+------------------------------------------------------------------+
//| Verifica a formação do padrão de candlestick "3 Soldados Brancos"  |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternThreeWhiteSoldiers()
  {
   //--- 3 Soldados Brancos
   if((Close(3)-Open(3)>AvgBody(1)) && // vela branca longa
      (Close(2)-Open(2)>AvgBody(1)) &&
      (Close(1)-Open(1)>AvgBody(1)) &&
      (MidPoint(2)>MidPoint(3))     && // meios superiores
      (MidPoint(1)>MidPoint(2)))
      return(true);
//---
   return(false);
  }

O método CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS) da classe CCandlePattern é utilizado para verificar a formação do padrão "3 Soldados Brancos".


2. Sinais de Negociação confirmados pelo indicador RSI

Os sinais de negociação para abrir posições longas ou curtas 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 das posições abertas depende dos valores do RSI. Isso pode ocorrer em duas situações:

  1. se o RSI atingir 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 RSI atinge os seguintes níveis: 30 para posição longa e 70 para posição curta)

Fig. 3. Padrão 3 Corvos Negros, confirmado pelo indicador Estocástico

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


  • int CML_RSI::LongCondition() - verifica as condições para abrir posição longa (retorna 80) e fechar posição curta (retorna 40);
  • int CML_RSI::ShortCondition() - verifica as 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 "3 Soldados Brancos" deve ser confirmada pelo indicador 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 indicador RSI cruzar para cima os níveis críticos 70 ou 30.

//+------------------------------------------------------------------+
//| 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 CBC_WS_RSI::LongCondition()
  {
   int result=0;
//--- idx pode ser usado para determinar o modo de trabalho do Robô de Negociação
//--- idx=0 - neste caso o Robô verifica as condições de negociação a cada tick
//--- idx=1 - neste caso o Robô 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 3 Soldados Brancos e RSI<30
  if(CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS) && (RSI(1)<40))
     result=80;
//--- verificando as condições para fechar posição curta
//--- cruzamento da linha sinal de 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;
//--- retornar resultado
   return(result);
  }

2.2. Abrir posição curta/Fechar posição longa

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

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

//+------------------------------------------------------------------+
//| 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 CBC_WS_RSI::ShortCondition()
  {
   int result=0;
//--- idx pode ser usado para determinar o modo de trabalho do Robô de Negociação
//--- idx=0 - neste caso o Robô verifica as condições de negociação a cada tick
//--- idx=1 - neste caso o Robô 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 3 Corvos Negros e RSI>60
  if(CheckCandlestickPattern(CANDLE_PATTERN_THREE_BLACK_CROWS) && (RSI(1)>60))
     result=80;
//--- verificando as condições para fechar posição longa
//--- cruzamento da linha sinal de 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;
//--- retornar resultado
   return(result);
  }


2.3. Criando um Robô de Negociação usando o MQL5 Wizard

A classe CML_RSI não está inclusa nas classes da Biblioteca Padrão, para usá-la, é necessário baixar o arquivo acml_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 candlepatterns.mqh. Você pode utilizá-los no MQL5 Wizard após reiniciar o MetaEditor.

Para criar um Robô de Negociação, inicie o MQL5 Wizard:

Fig. 4. Criando Robô de Negociação usando o MQL5 Wizard

Fig. 4. Criando Robô de Negociação usando o MQL5 Wizard

Vamos especificar o nome do Robô de Negociação:

Fig. 5. Propriedades gerais do Robô de Negociação

Fig. 5. Propriedades gerais do Robô de Negociação

Após isso, precisamos selecionar os módulos de sinais de negociação utilizados.

Fig. 6. Propriedades de sinal do Robô de Negociação

Fig. 6. Propriedades de sinal do Robô de Negociação

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

Adicionando o módulo Sinais baseados em 3 Corvos Negros / 3 Soldados Brancos de sinais de negociação:

Fig. 7. Propriedades de sinal do Robô de Negociação

Fig. 7. Propriedades de sinal do Robô de Negociação

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

Fig. 8. Propriedades de sinal do Robô de Negociação

Fig. 8. Propriedades de sinal do Robô de Negociação

Você pode selecionar quaisquer propriedades de trailing, mas utilizaremos "Trailing Stop não utilizado":

Fig. 9. Propriedades de trailing do Robô de Negociação

Fig. 9. Propriedades de trailing do Robô de Negociação

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 Robô de Negociação

Fig. 10. Propriedades de gestão de dinheiro do Robô de Negociação

Ao pressionar o botão "Finalizar", obteremos o código do Robô de Negociação gerado, localizado em Expert_ABC_WS_RSI.mq5, que será salvo na pasta terminal_data_folder\MQL5\Experts\.

Os parâmetros de entrada padrões do Robô de Negociação gerado:

//--- entradas para o sinal principal
input int            Signal_ThresholdOpen   =10;     // Valor de limite do sinal para abrir [0...100]
input int            Signal_ThresholdClose  =10;     // Valor de 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 o sinal principal
input int            Signal_ThresholdOpen   =40;     // Valor de limite do sinal para abrir [0...100]
input int            Signal_ThresholdClose  =20;     // Valor de 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, foram especificados os valores fixos dos limites:

  • Abertura de posição: 80;
  • Fechamento de posição: 40.

O Robô de Negociação gerado pelo MQL5 Wizard abre e fecha posições usando 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 é usado, 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 esse fato em conta ao definir os valores de limite. Por conta 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á realizado apenas quando as condições de fechamento forem verdadeiras.


2.4. Resultados de Backtesting Histórico

Vamos considerar o backtesting do Robô de Negociação em dados históricos (EURUSD H1, período de teste: 2010.01.01-2011.02.02, PeriodRSI=37, MA_period=51).

Na criação do Robô de Negociação, utilizamos o volume fixo (Negociação com Lote Fixo, 0.1), e o algoritmo de Trailing Stop não foi utilizado (Trailing não utilizado).

Fig. 11. Resultados de teste do Robô de Negociação baseado em 3 Corvos Negros/3 Soldados Brancos + RSI

Fig. 11. Resultados de teste do Robô de Negociação baseado em 3 Corvos Negros/3 Soldados Brancos + RSI


O melhor conjunto de parâmetros de entrada pode ser encontrado usando o Testador de Estratégia do terminal cliente MetaTrader 5.

O código do Robô de Negociação, criado pelo MQL5 Wizard, está anexado em expert_abc_ws_rsi.mq5.


Publicações relacionadas

Comentário (0)