Crie Sinais de Negociação com MQL5 Wizard: Linhas de Encontro e RSI no MetaTrader 5

Mike 2011.03.24 20:39 28 0 0
Anexo

O MQL5 Wizard é uma ferramenta incrível que te permite criar Expert Advisors prontos, utilizando as classes da biblioteca padrão que vem junto com o terminal cliente. Com isso, você pode testar suas ideias de trading rapidamente, bastando criar sua própria classe de sinais de negociação. A estrutura dessa classe e um exemplo estão disponíveis 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. Depois, é necessário sobrescrever os métodos virtuais LongCondition() e ShortCondition() com os seus próprios métodos.

Um livro interessante que recomendo é "Estratégias dos Melhores Traders" (em russo), onde são discutidas várias estratégias de trading. Aqui, nosso foco será em padrões de candlestick de reversão, confirmados pelos osciladores como Estocástico, CCI, MFI e RSI.

O melhor caminho é 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 pelos padrões de candlestick, basta escrever a classe derivada de CCandlePattern e adicionar as funcionalidades necessárias (por exemplo, confirmação por osciladores).

Vamos focar nos sinais baseados no padrão de candlestick de "Linhas de Encontro Bullish", confirmados pelo indicador RSI (Índice de Força Relativa). O módulo de sinais de negociação é baseado na classe CCandlePattern, que é um exemplo simples do seu uso para criação de sinais de negociação com padrões de candlestick.

1. Padrões de Reversão "Linhas de Encontro"

1.1. Linhas de Encontro Bullish

O padrão consiste em duas candlesticks (bearish e bullish) com preços de fechamento iguais (ou muito próximos). O corpo das duas candlesticks deve ser maior que o tamanho médio do corpo.

O padrão de "Linhas de Encontro Bullish" indica a reversão de uma tendência de baixa.

Fig. 1. Padrão

Fig. 1. Padrão "Linhas de Encontro Bullish"

O reconhecimento do padrão de "Linhas de Encontro Bullish" é implementado no método CheckPatternBullishMeetingLines() da classe CCandlePattern:

//+--------------------------------------------------------------------+
//| Verifica a formação do padrão de "Linhas de Encontro Bullish"    |             
//+--------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBullishMeetingLines()
  {
//--- Linhas de Encontro Bullish
   if((Open(2)-Close(2)>AvgBody(1))              && // longa negra
     ((Close(1)-Open(1))>AvgBody(1))             && // longa branca
      (MathAbs(Close(1)-Close(2))<0.1*AvgBody(1)))   // fechamento doji
      return(true);
//---
   return(false);
  }

O método CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_MEETING_LINES) da classe CCandlePattern é usado para verificar a formação do padrão de "Linhas de Encontro Bullish".


1.2. Linhas de Encontro Bearish

O padrão consiste em duas candlesticks (bullish e bearish) com preços de fechamento iguais (ou muito próximos). O corpo das duas candlesticks deve ser maior que o tamanho médio do corpo.

O padrão de "Linhas de Encontro Bearish" indica a reversão de uma tendência de alta.

Fig. 2. Padrão

Fig. 2. Padrão "Linhas de Encontro Bearish"

O reconhecimento do padrão de "Linhas de Encontro Bearish" é implementado no método CheckPatternBearishMeetingLines() da classe CCandlePattern:

//+--------------------------------------------------------------------+
//| Verifica a formação do padrão de "Linhas de Encontro Bearish"    |//+--------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBearishMeetingLines()
  {
//--- Linhas de Encontro Bearish
   if((Close(2)-Open(2)>AvgBody(1))             && // longa branca
     ((Open(1)-Close(1))>AvgBody(1))             && // longa negra
      (MathAbs(Close(1)-Close(2))<0.1*AvgBody(1)))  // fechamento doji
      return(true);
//---
   return(false);
  }

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



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 ser menor ou maior que os 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:

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

Fig. 3. Padrão

Fig. 3. Padrão "Linhas de Encontro Bearish", confirmado pelo indicador RSI


  • int CML_RSI::LongCondition() - verifica as condições para abrir posição longa (retorna 80) e fechar a posição curta (retorna 40);
  • int CML_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 de "Linhas de Encontro Bullish" 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 cruzou 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 CML_RSI::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 barras de notícias
  int idx   =StartIndex();
//--- verificando as condições para abrir posição longa
//--- formação do padrão de Linhas de Encontro Bullish e RSI<30
  if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_MEETING_LINES) && (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 de "Linhas de Encontro Bearish" 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 cruzou 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 CML_RSI::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 barras de notícias
  int idx   =StartIndex();
//--- verificando as condições para abrir posição curta
//--- formação do padrão de Linhas de Encontro Bearish e RSI>60
  if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_MEETING_LINES) && (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 um Expert Advisor com o MQL5 Wizard

A classe CML_RSI não está incluída nas classes da Biblioteca Padrão, para utilizá-la, é necessário baixar o arquivo acml_rsi.mqh (veja os anexos) e salvá-lo na pasta client_terminal_data_folder\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 Expert Advisor com MQL5 Wizard

Fig. 4. Criando Expert Advisor com 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 que serão utilizados.

Fig. 6. Propriedades dos sinais do Expert Advisor

Fig. 6. Propriedades dos sinais do Expert Advisor

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

Adicionando o módulo de Sinais baseados em Linhas de Encontro Bullish/Bearish confirmados pelo RSI:

Fig. 7. Propriedades dos sinais do Expert Advisor

Fig. 7. Propriedades dos sinais do Expert Advisor

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

Fig. 8. Propriedades dos sinais do Expert Advisor

Fig. 8. Propriedades dos sinais 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

Quanto às propriedades de gerenciamento de dinheiro, utilizaremos "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_AML_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 o sinal principal
input int            Signal_ThresholdOpen   =10;     // Valor limite de sinal para abrir [0...100]
input int            Signal_ThresholdClose  =10;     // Valor limite de 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 alterados para:

//--- entradas para o sinal principal
input int            Signal_ThresholdOpen   =40;     // Valor limite de sinal para abrir [0...100]
input int            Signal_ThresholdClose  =20;     // Valor limite de 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 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, especificamos 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 usando os "votos" dos módulos de sinais de negociação. O voto do módulo principal (como um contêiner, ele 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 consideração ao definir os valores do limite. Por causa disso, os ThresholdOpen e ThresholdClose devem ser ajustados para 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 da Backtesting de História

Vamos considerar a backtesting do Expert Advisor em dados históricos (EURUSD H1, período de teste: 2000.01.01-2011.03.01, PeriodRSI=11, MA_period=3).

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

Fig. 11. Resultados do teste do Expert Advisor, baseado em Linhas de Encontro Bullish/Bearish + RSI

Fig. 11. Resultados do teste do Expert Advisor, baseado em Linhas de Encontro Bullish/Bearish + RSI


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


Lista
Comentário 0