Início Negociação Sistemática Postagem

Sinais de Negociação com Padrões de Candlestick e CCI no MetaTrader 5

Anexo
286.zip (6.48 KB, Baixar 0 vezes)

O MQL5 Wizard é uma ferramenta poderosa que permite criar Consultores Especializados prontos com base nas classes da biblioteca padrão que vem com o terminal cliente. Com ele, você pode validar rapidamente suas ideias de negociação, bastando criar sua própria classe de sinais de negociação. Para mais detalhes sobre a estrutura da 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 é 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 estratégias eficazes, um bom ponto de partida é o livro "Estratégias dos Melhores Traders" (em russo), onde são discutidas diversas estratégias de negociação. Neste artigo, vamos focar nos padrões de candlestick de reversão, confirmados pelos osciladores 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 candlestick. Para confirmar os sinais de negociação gerados por esses padrões, você só precisará escrever uma classe derivada de CCandlePattern e adicionar os recursos necessários (como a confirmação pelos osciladores).

Neste artigo, vamos discutir os sinais baseados no padrão de reversão de "3 Corvos Negros/3 Soldados Brancos", confirmados pelo indicador Índice de Canal de Commodities (CCI). O módulo de sinais de negociação será baseado na classe CCandlePattern, que é 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

Um padrão de candlestick de baixa que prevê a reversão da tendência de alta atual. Esse padrão consiste em três candlesticks consecutivos com corpo longo, que fecharam abaixo do dia anterior, com a abertura de cada sessão ocorrendo dentro do corpo da vela anterior.

Padrão de candlestick '3 Corvos Negros'

Padrão de candlestick "3 Corvos Negros"

O reconhecimento do padrão "3 Corvos Negros" é implementado no 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)) && // (corpo longo)
      (Open(2)-Close(2)>AvgBody(1)) &&
      (Open(1)-Close(1)>AvgBody(1)) &&
      (MidPoint(2)<MidPoint(3))     && // (midpoints inferiores)       (MidPoint(1)<MidPoint(2)))         return(true); //---    return(false);   }

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


1.2. Padrão de candlestick 3 Soldados Brancos

Um padrão de candlestick de alta que prevê a reversão da tendência de baixa atual. Esse padrão é composto por três candlesticks consecutivos com corpo longo, que fecharam acima do dia anterior, com a abertura de cada sessão 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 próximo ao seu ponto mais alto, deixando uma sombra superior muito pequena ou inexistente. O mesmo padrão é então repetido no terceiro dia.

Padrão de candlestick '3 Soldados Brancos'

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)) && // (corpo longo)
      (Close(2)-Open(2)>AvgBody(1)) &&
      (Close(1)-Open(1)>AvgBody(1)) &&
      (MidPoint(2)>MidPoint(3))     && // (midpoints superiores)       (MidPoint(1)>MidPoint(2)))       return(true); //---    return(false);   }

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


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

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

O fechamento da posição aberta depende dos valores do CCI. Isso pode ser feito em duas situações:

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

Padrão '3 Corvos Negros', confirmado pelo indicador CCI

Padrão "3 Corvos Negros", confirmado pelo indicador CCI


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

  2. A posição curta deve ser fechada 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 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 CBC_WS_CCI::LongCondition()
  {
   int result=0;
//--- idx pode ser usado para determinar o modo de operação do EA
//--- 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();
//--- verificação das condições para abrir posição longa
//--- formação do padrão 3 Soldados Brancos e CCI<-50
   if(CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS) && (CCI(1)<-50))
     result=80;
//--- verificação das condições para fechar posição curta
//--- cruzamento da linha de sinal dos 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 "3 Soldados Brancos" deve ser confirmada pelo indicador CCI: CCI(1)>50 (o valor do 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 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 CBC_WS_CCI::ShortCondition()
  {
   int result=0;
//--- idx pode ser usado para determinar o modo de operação do EA
//--- 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();
//--- verificação das condições para abrir posição curta
//--- formação do padrão 3 Corvos Negros e CCI>50
   if(CheckCandlestickPattern(CANDLE_PATTERN_THREE_BLACK_CROWS) && (CCI(1)>50))
     result=80;
//--- verificação das condições para fechar posição longa
//--- cruzamento da linha de sinal dos 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 Consultor Especializado Usando o MQL5 Wizard

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

Para criar um Consultor Especializado, inicie o MQL5 Wizard:

Criando Consultor Especializado com MQL5 Wizard

Criando Consultor Especializado com MQL5 Wizard

Vamos especificar o nome do Consultor Especializado:

Propriedades gerais do Consultor Especializado

Propriedades gerais do Consultor Especializado

Depois disso, precisamos selecionar os módulos de sinais de negociação utilizados.

Propriedades dos sinais do Consultor Especializado

Propriedades dos sinais do Consultor Especializado

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

Adicionando o módulo de Sinais baseados em 3 Corvos Negros/3 Soldados Brancos confirmados pelo CCI:

Propriedades dos sinais do Consultor Especializado

Propriedades dos sinais do Consultor Especializado

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

Propriedades dos sinais do Consultor Especializado

Propriedades dos sinais do Consultor Especializado

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

Propriedades de trailing do Consultor Especializado

Propriedades de trailing do Consultor Especializado

Quanto às propriedades de gerenciamento de dinheiro, usaremos "Negociar com volume fixo":

Propriedades de gerenciamento de dinheiro do Consultor Especializado

Propriedades de gerenciamento de dinheiro do Consultor Especializado

Ao pressionar o botão "Finalizar", obteremos o código do Consultor Especializado gerado, localizado em Expert_ABC_WS_CCI.mq5, que será salvo na pasta terminal_data_folder\MQL5\Experts\.

Os parâmetros de entrada padrão do Consultor Especializado gerado:

//--- entradas para o sinal principal
input int            Signal_ThresholdOpen   =10;     // Valor do limiar do sinal para abrir [0...100]
input int            Signal_ThresholdClose  =10;     // Valor do limiar 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 substituídos por:

//--- entradas para o sinal principal
input int            Signal_ThresholdOpen   =40;     // Valor do limiar do sinal para abrir [0...100]
input int            Signal_ThresholdClose  =20;     // Valor do limiar 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 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 Consultor Especializado 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 usados na média dos "votos". No nosso caso, temos: módulo principal + 1 módulo de sinais de negociação, então precisamos considerar esse fato ao definir os valores limites. Por causa 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 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 Histórico

Vamos considerar o backtesting do Consultor Especializado em dados históricos (EURUSD H1, período de teste: 2010.01.01-2011.03.16, PeriodCCI=37, MA_period=13).

Na criação do Consultor Especializado, usamos o volume fixo (Negociação com Lote Fixo, 0.1), o algoritmo de Trailing Stop não foi utilizado (Trailing não utilizado).

Resultados do teste do Consultor Especializado, baseado em 3 Corvos Negros/3 Soldados Brancos + CCI

Resultados do teste do Consultor Especializado, baseado em 3 Corvos Negros/3 Soldados Brancos + CCI


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

O código do Consultor Especializado, criado pelo MQL5 Wizard está anexado em expert_abc_ws_cci.mq5.


Publicações relacionadas

Comentário (0)