Início Negociação Sistemática Postagem

MQL5 Wizard: Sinais de Negociação com Estrelas da Manhã/Noite + RSI para MetaTrader 5

Anexo
324.zip (6.47 KB, Baixar 0 vezes)

O MQL5 Wizard facilita 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). Isso permite verificar suas ideias de negociação rapidamente, bastando 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. É necessário sobrescrever os métodos virtuais LongCondition() e ShortCondition() com seus próprios métodos.

Um livro interessante é "Estratégias dos melhores traders" (em russo), onde várias estratégias de negociação são discutidas. Vamos focar em padrões de velas de reversão, confirmados por Estocástico, CCI, MFI e RSI.

A melhor abordagem é criar uma classe separada, derivada de CExpertSignal, para verificar a formação dos 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 os recursos necessários (por exemplo, confirmação por osciladores).

Aqui, vamos considerar os sinais baseados nos padrões de velas de reversão "Estrela da Manhã" e "Estrela da Noite", confirmados pelo indicador RSI. O módulo de sinais de negociação é baseado na classe CCandlePattern, que é um exemplo simples de como criar sinais de negociação com padrões de velas.

1. Padrões de velas de reversão "Estrela da Manhã" e "Estrela da Noite"

1.1. Estrela da Manhã

Esse padrão indica a reversão de uma tendência de baixa e é composto por três velas (Fig. 1). Após uma longa vela preta, aparece uma vela (a cor não é importante) com um corpo pequeno, que fica fora do corpo da vela preta. O corpo pequeno significa que a força dos touros e ursos estão equilibradas e o mercado está pronto para mudar a tendência.

A terceira vela do padrão é uma vela de alta, cujo corpo não se sobrepõe ao corpo da segunda vela, e o preço de fechamento está dentro do corpo da primeira vela (bearish). A vela resultante do modelo também é ilustrada na Figura 1.

Caso a segunda vela seja doji, o modelo é chamado de "Estrela da Manhã doji".

Fig. 1. Padrões de velas 'Estrela da Manhã' e 'Estrela da Manhã doji'

Fig. 1. Padrões de velas 'Estrela da Manhã' e 'Estrela da Manhã doji'

A identificação do padrão "Estrela da Manhã" é realizada nos métodos CheckPatternMorningStar() e CheckPatternMorningDoji() da classe CCandlePattern:

//+------------------------------------------------------------------+
//| Verifica a formação do padrão "Estrela da Manhã"                     |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternMorningStar()
  {
//--- Estrela da Manhã
   if((Open(3)-Close(3)>AvgBody(1))             && // vela bearish, seu corpo é maior que a média
      (MathAbs(Close(2)-Open(2)<AvgBody(1)*0.5) && // segunda vela com corpo pequeno (menor que a média)
      (Close(2)<Close(3))                       && // fechamento da segunda vela menor que a da primeira 
      (Open(2)<Open(3))                         && // abertura da segunda vela menor que a da primeira
      (Close(1)>MidOpenClose(3)))                  // fechamento da última vela maior que o centro da primeira 
      return(true);
//---
   return(false);
  }
//+------------------------------------------------------------------+
//| Verifica a formação do padrão "Estrela da Manhã doji"               |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternMorningDoji()
  {
//--- Estrela da Manhã doji
   if((Open(3)-Close(3)>AvgBody(1)) && // vela bearish com corpo maior que a média 
      (AvgBody(2)<AvgBody(1)*0.1)   && // a segunda vela tem um corpo muito pequeno (doji) 
      (Close(2)<Close(3))           && // fechamento da segunda vela menor que a da primeira 
      (Open(2)<Open(3))             && // abertura da segunda vela menor que a da primeira
      (Open(1)>Close(2))             && // gap de alta na última vela
      (Close(1)>Close(2)))             // fechamento da última vela maior que a da segunda
      return(true);
//---
   return(false);
  }

Os métodos CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) e CheckCandlestickPattern(CANDLE_PATTERN_MORNING_DOJI) da classe CCandlePattern são usados para verificar a formação dos padrões de velas "Estrela da Manhã" e "Estrela da Manhã doji".


1.2. Estrela da Noite

Esse padrão indica a reversão de uma tendência de alta e também é composto por três velas (Fig. 2). Após uma longa vela branca, aparece uma vela (a cor não é importante) com um corpo pequeno, que fica fora do corpo da vela branca. O corpo pequeno significa que a força dos touros e ursos estão equilibradas e o mercado está pronto para mudar a tendência.

A terceira vela do padrão é uma vela de baixa, cujo corpo não se sobrepõe ao corpo da segunda vela, e o preço de fechamento está dentro do corpo da primeira vela (bullish). A vela resultante do modelo também está ilustrada na Figura 2.

Caso a segunda vela seja doji, o modelo é chamado de "Estrela da Noite doji".

Fig. 2. Padrões de velas 'Estrela da Noite' e 'Estrela da Noite doji'

Fig. 2. Padrões de velas 'Estrela da Noite' e 'Estrela da Noite doji'

Aqui estão os métodos para identificação dos padrões "Estrela da Noite" e "Estrela da Noite doji":

//+------------------------------------------------------------------+
//| Verifica a formação do padrão "Estrela da Noite"                    |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternEveningStar()
  {
//--- Estrela da Noite
   if((Close(3)-Open(3)>AvgBody(1))             && // vela bullish com corpo maior que a média 
      (MathAbs(Close(2)-Open(2)<AvgBody(1)*0.5) && // segunda vela com corpo pequeno (menor que a média)
      (Close(2)>Close(3))                   && // fechamento da segunda vela maior que a da primeira
      (Open(2)>Open(3))                     && // abertura da segunda vela maior que a da primeira
      (Close(1)<MidOpenClose(3)))                  // fechamento da última vela menor que o centro da primeira 
      return(true);
//---
   return(false);
  }
//+------------------------------------------------------------------+
//| Verifica a formação do padrão "Estrela da Noite doji"               |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternEveningDoji()
  {
//--- Estrela da Noite doji
   if((Close(3)-Open(3)>AvgBody(1)) && // vela bullish com corpo maior que a média 
      (AvgBody(2)<AvgBody(1*0.1)   && // segunda vela tem um corpo muito pequeno (doji) 
      (Close(2)>Close(3))           && // fechamento da segunda vela maior que a da primeira
      (Open(2)>Open(3))                 && // abertura da segunda vela maior que a da primeira
      (Open(1)<Close(2))                 && // gap de baixa na última vela
      (Close(1)<Close(2)))                 // fechamento da última vela menor que a da segunda
      return(true);
//---
   return(false);
  }

Os métodos CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) e CheckCandlestickPattern(CANDLE_PATTERN_EVENING_DOJI) da classe CCandlePattern são usados para verificar a formação dos padrões de velas "Estrela da Noite" e "Estrela da Noite doji".


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 ser menor ou maior que os níveis críticos (40 para posição longa e 60 para posição curta).

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

  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 'Estrela da Manhã', confirmado pelo indicador RSI

Fig. 3. Padrão 'Estrela da Manhã', confirmado pelo indicador RSI

  • int CMS_ES_RSI::LongCondition() - verifica as condições para abrir posição longa (retorna 80) e fechar posição curta (retorna 40);
  • int CMS_ES_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 "Estrela da Manhã" 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 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 CMS_ES_RSI::LongCondition()
  {
   int result=0;
//--- idx pode ser usado para determinar o modo de trabalho 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();
//--- Verificando as condições para abrir posição longa
//--- formação do padrão Estrela da Manhã e RSI<30
  if(CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) && (RSI(1)<40))
     result=80;
//--- Verificando as 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(((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 "Estrela da Noite" deve ser confirmada pelo indicador 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 indicador 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 CMS_ES_RSI::ShortCondition()
  {
   int result=0;
//--- idx pode ser usado para determinar o modo de trabalho 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();
//--- Verificando as condições para abrir posição curta
//--- formação do padrão Estrela da Noite e RSI>60
  if(CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) && (RSI(1)>60))
     result=80;
//--- Verificando as condições para fechar 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;
//--- retornar resultado
   return(result);
  }


2.3. Criando o Expert Advisor usando o MQL5 Wizard

A classe CMS_ES_RSI não está incluída nas classes da Biblioteca Padrão, para usá-la, é necessário baixar o arquivo acms_es_rsi.mqh (veja anexos) e salvá-lo na pasta de dados do terminal_clente\MQL5\Include\Expert\Signal\MySignals. O mesmo deve ser feito com o arquivo candlepatterns.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 utilizados.

Fig. 6. Propriedades de sinal do Expert Advisor

Fig. 6. Propriedades de sinal do Expert Advisor

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

Adicionando o módulo "Sinais baseados em Estrelas da Manhã/Noite confirmados pelo RSI":

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 "Concluir", receberemos o código do Expert Advisor gerado, que estará localizado em Expert_AMS_ES_RSI.mq5, 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 limiar de sinal para abrir [0...100]
input int            Signal_ThresholdClose  =10;     // Valor do limiar de 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)

deve ser substituído por:

//--- entradas para o sinal principal
input int            Signal_ThresholdOpen   =40;     // Valor do limiar de sinal para abrir [0...100]
input int            Signal_ThresholdClose  =20;     // Valor do limiar de 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 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 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, portanto, precisamos levar em conta esse fato ao definir os valores dos limiares. 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 sã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

Vamos considerar o backtesting do Expert Advisor em dados históricos (EURUSD H1, período de teste: 01/01/2010 a 04/03/2011, PeriodK=47, PeriodD=9, PeriodSlow=13, MA_period=5).

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

Fig. 11. Resultados de teste do Expert Advisor, baseado em Estrelas da Manhã/Noite + RSI

Fig. 11. Resultados de teste do Expert Advisor, baseado em Estrelas da Manhã/Noite + RSI


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

A análise dos parâmetros é bastante simplificada usando o modo de visualização 3D do Tester de Estratégia, adicionado a partir da build 419 (Fig. 12):

Fig. 12. Balanço como função dos parâmetros de entrada PeriodRSI e MA_period.

Fig. 12. Balanço como função dos parâmetros de entrada PeriodRSI e MA_period

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


Publicações relacionadas

Comentário (0)