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

Mike 2011.03.28 21:23 17 0 0
Anexo

O MQL5 Wizard é uma ferramenta poderosa que permite criar Expert Advisors (EAs) prontos para uso, baseados nas classes da biblioteca padrão que vem junto com o terminal cliente. Com ele, você consegue testar 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. Em seguida, é preciso 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 explora várias estratégias de negociação. Aqui, vamos focar nos padrões de velas de reversão, confirmados pelos osciladores como 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 velas. Para confirmar os sinais de negociação gerados pelos padrões de velas, basta escrever uma classe que derive de CCandlePattern e adicionar as funcionalidades necessárias (por exemplo, confirmação por osciladores).

Aqui, vamos considerar os sinais baseados nos padrões de velas de reversão "Estrela da Manhã/Estrela da Tarde" (Morning Doji Star/Evening Doji Star), confirmados pelo indicador CCI. O módulo de sinais de negociação é baseado na classe CCandlePattern, que é um exemplo simples de sua utilização para a criação de sinais de negociação com padrões de velas.

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

1.1. Estrela da Manhã

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

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

Caso a segunda vela seja doji, o padrão é denominado "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 de baixa, corpo maior que a média
      (MathAbs(Close(2)-Open(2)<AvgBody(1)*0.5) && // segunda vela tem corpo pequeno
      (Close(2)<Close(3))                       && // fechamento da segunda vela é menor que o fechamento da primeira
      (Open(2)<Open(3))                         && // abertura da segunda vela é menor que a abertura da primeira
      (Close(1)>MidOpenClose(3)))                  // fechamento da última vela é maior que o meio 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 de baixa 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 o fechamento da primeira
      (Open(2)<Open(3))             && // abertura da segunda vela é menor que a abertura da primeira
      (Open(1)>Close(2))            && // gap de alta na última vela
      (Close(1)>Close(2)))             // fechamento da última vela é maior que o fechamento 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 "Estrela da Manhã" e "Estrela da Manhã Doji".


1.2. Estrela da Tarde

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

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

Caso a segunda vela seja doji, o padrão é denominado "Estrela da Tarde Doji".

Fig. 2. Padrões de velas 'Estrela da Tarde' e 'Estrela da Tarde Doji'

Fig. 2. Padrões de velas "Estrela da Tarde" e "Estrela da Tarde Doji"

Aqui estão os métodos para identificar os padrões "Estrela da Tarde" e "Estrela da Tarde Doji":

//+------------------------------------------------------------------+
//| Verifica a formação do padrão "Estrela da Tarde"                    |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternEveningStar()
  {
//--- Estrela da Tarde
   if((Close(3)-Open(3)>AvgBody(1))             && // vela de alta com corpo maior que a média
      (MathAbs(Close(2)-Open(2)<AvgBody(1)*0.5) && // segunda vela tem corpo pequeno
      (Close(2)>Close(3))                       && // fechamento da segunda vela é maior que o fechamento da primeira
      (Open(2)>Open(3))                         && // abertura da segunda vela é maior que a abertura da primeira
      (Close(1)<MidOpenClose(3)))                  // fechamento da última vela é menor que o meio da primeira
      return(true);
//---
   return(false);
  }
//+------------------------------------------------------------------+
//| Verifica a formação do padrão "Estrela da Tarde Doji"               |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternEveningDoji()
  {
//--- Estrela da Tarde Doji
   if((Close(3)-Open(3)>AvgBody(1)) && // vela de alta 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 é maior que o fechamento da primeira
      (Open(2)>Open(3))             && // abertura da segunda vela é maior que a abertura da primeira
      (Open(1)<Close(2))            && // gap de baixa na última vela
      (Close(1)<Close(2)))             // fechamento da última vela é menor que o fechamento 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 utilizados para verificar a formação dos padrões "Estrela da Tarde" e "Estrela da Tarde Doji".


2. Sinais de Negociação, Confirmados pelo Indicador CCI

Os sinais de negociação para abrir posições longas ou curtas devem ser confirmados pelo indicador CCI. O valor do CCI deve ser maior/menor que os níveis críticos (-50 para posições longas e 50 para posições curtas).

O fechamento das posições abertas depende dos valores do CCI. Isso pode ser feito em 2 casos:

  1. se a linha do CCI atingir o nível crítico oposto (80 para posições longas e -80 para posições curtas)
  2. se o sinal reverso não for confirmado (quando o CCI atinge os níveis: -80 para posições longas e 80 para posições curtas)

Fig. 3. Padrão 'Estrela da Tarde' confirmado pelo indicador CCI

Fig. 3. Padrão "Estrela da Tarde" confirmado pelo indicador CCI


  • int CMS_ES_CCI::LongCondition() - verifica as condições para abrir uma posição longa (retorna 80) e fechar uma posição curta (retorna 40);
  • int CMS_ES_CCI::ShortCondition() - verifica as condições para abrir uma posição curta (retorna 80) e fechar uma 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 CCI: CCI(1)<-50 (o valor do CCI da última barra completada deve ser menor que -50).

  2. Devem ser fechadas as posições curtas se o indicador CCI cruzar para cima o nível crítico -80 ou cruzar para baixo o nível crítico 80.

//+------------------------------------------------------------------+
//| 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 CMS_ES_CCI::LongCondition()
  {
   int result=0;
//--- idx pode ser usado para determinar o modo de trabalho do EA
//--- idx=0 - neste caso o EA verifica as condições de negociação em cada tick
//--- idx=1 - neste caso o EA verifica as condições de negociação apenas em barras de notícias
   int idx   =StartIndex();
//--- Verificação das condições para abrir posição longa
//--- formação do padrão Estrela da Manhã e CCI<-50
   if(CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) && (CCI(1)<-50))
     result=80;
//--- Verificação das condições para fechar posição curta
//--- cruzamento da linha sinal nos níveis de sobrecompra/sobrevenda (para baixo -80, para cima -80)
   if(((CCI(1)>-80) && (CCI(2)<-80)) || ((CCI(1)<80) && (CCI(2)>80)))
     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 Tarde" deve ser confirmada pelo indicador CCI: CCI(1)>50 (o valor do indicador CCI da última barra completada deve ser maior que 50).

  2. A posição longa deve ser fechada se o indicador CCI cruzar para baixo os níveis -80 ou 80.

//+------------------------------------------------------------------+
//| 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 CMS_ES_CCI::ShortCondition()
  {
   int result=0;
//--- idx pode ser usado para determinar o modo de trabalho do EA
//--- idx=0 - neste caso o EA verifica as condições de negociação em cada tick
//--- idx=1 - neste caso o EA verifica as condições de negociação apenas em barras de notícias
   int idx   =StartIndex();
//--- Verificação das condições para abrir posição curta
//--- formação do padrão Estrela da Tarde e CCI>50
   if(CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) && (CCI(1)>50))
     result=80;
//--- Verificação das condições para fechar posição longa
//--- cruzamento da linha sinal nos níveis de sobrecompra/sobrevenda (para baixo -80, para cima 80)
   if(((CCI(1)<80) && (CCI(2)>80)) || ((CCI(1)<-80) && (CCI(2)>-80)))
     result=40;
//--- retornar resultado
   return(result);
  }


2.3. Criando um Expert Advisor usando o MQL5 Wizard

A classe CMS_ES_CCI não está incluída nas classes da Biblioteca Padrão, para usá-la, é necessário baixar o arquivo acms_es_cci.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 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 um Expert Advisor usando o MQL5 Wizard

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

Vamos especificar o nome do Expert Advisor:

Fig. 5. Propriedades gerais do Expert Advisor

Fig. 5. Propriedades gerais do Expert Advisor

Após isso, 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 de sinais: "Sinais baseados em Estrelas da Manhã/Tarde confirmados pelo CCI":

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 utilizaremos "Trailing Stop não utilizado":

Fig. 9. Propriedades de trailing do Expert Advisor

Fig. 9. Propriedades de trailing do Expert Advisor

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 Expert Advisor

Fig. 10. Propriedades de gestão de dinheiro do Expert Advisor

Ao pressionar o botão "Finalizar", receberemos o código do Expert Advisor gerado, localizado em Expert_AMS_ES_CCI.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 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 o 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 do limiar:

  • 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 container, 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 isso em conta ao definir os valores de limiar. Por causa disso, o ThresholdOpen e ThresholdClose devem ser configurados 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 do backtesting da história

Vamos considerar o backtesting do Expert Advisor em dados históricos (EURUSD H1, período de teste: 2009.01.01-2011.03.16, PeriodCCI=25, MA_period=5).

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

Fig. 11. Resultados do teste do Expert Advisor baseado em Estrelas da Manhã/Tarde + CCI

Fig. 11. Resultados do teste do Expert Advisor baseado em Estrelas da Manhã/Tarde + CCI


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


Lista
Comentário 0