Assista a como baixar robôs de negociação gratuitos
Encontre-nos em Telegram!
Participe de nossa página de fãs
Script interessante?
Coloque um link para ele, e permita que outras pessoas também o avaliem
Você gostou do script?
Avalie seu funcionamento no terminal MetaTrader 5
Experts

Assistente MQL5 - Sinais de negociação baseado em Estrela da Manhã/Noite + CCI - expert para MetaTrader 5

Visualizações:
1652
Avaliação:
(22)
Publicado:
2014.01.15 08:18
Atualizado:
2016.11.22 07:33
\MQL5\Include\Expert\Signal\MySignals\
Precisa de um robô ou indicador baseado nesse código? Solicite-o no Freelance Ir para Freelance

O Assistente MQL5 permite a criação de Expert Advisors pronto para uso com base nas classes da Biblioteca padrão fornecidas no terminal do cliente (ver Criando Expert Advisors prontos no Assistente MQL5 para maiores detalhes). Ele permite verificar suas ideias de negociação de forma rápida, tudo o que você precisa é criar sua classe personalizada de sinais de negociação. A estrutura desta classe e os exemplos podem ser encontrados no artigo Assistente MQL5: Como criar um Módulo de Sinais de Negociação.

Em geral, a ideia é a seguinte: a classe de sinais de negociação é derivada de CExpertSignal, então, é necessário sobrescrever os métodos virtuais LongCondition() e ShortCondition() com seus próprios métodos.

No livro "Estratégias dos melhores Traders" (em Russo), podemos encontrar várias estratégias de negociação, por hora focaremos nos padrões de velas de reversão , e confirmado pelos osciladores Estocástico, CCI, MFI e RSI.

A melhor maneira de proceder é criando uma classe separada, derivada de CExpertSignal para verificar a formação dos padrões de velas. Para confirmar os sinais de negociação, gerado pelos padrões de velas, é suficiente escrever uma classe, derivada de CCandlePattern e adicionar as características necessárias nela (por exemplo, confirmação por osciladores).

Neste artigo, consideraremos os sinais com base no padrão de velas de reversão "Estrela da Manhã/Noite" (Estrela Doji da Manhã/Noite), confirmado pelo indicador CCI. O módulo de sinais de negociação, baseado na classe CCandlePattern, é um simples exemplo de seu uso na geração de sinais de negociação por meio dos padrões de velas.


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

1.1. Estrela da Manhã

Este padrão indica a reversão da tendência de baixa, que consiste de três velas (Fig. 1). Após uma longa vela negra há uma vela (a cor não é importante) com um pequeno corpo, que se encontra fora do corpo da vela negra. O pequeno corpo de uma vela significa que a força entre compradores e vendedores são iguais e que o mercado está pronto para mudar de tendência.

A terceira vela do padrão é uma vela altista, seu corpo não está sobreposto com o corpo da segunda vela e o preço de fechamento se encontra dentro do corpo da primeira vela (baixista). A vela resultante do modelo também é representada na figura 1.

Se caso a segunda vela for um Doji, o modelo é chamado de "Estrela Doji da Manhã".

Fig. 1. Padrões de vela "Estrela da Manhã" e "Estrela da Noite"

Fig. 1. Padrões de vela "Estrela da Manhã" e "Estrela Doji da Manhã"

O reconhecimento do padrão "Estrela da Manhã" está implementado nos métodos CheckPatternMorningStar() e CheckPatternMorningDoji() da classe CCandlePattern:

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


1.2. Estrela da Noite

Este padrão indica a reversão da tendência de alta, que consiste de três velas (Fig. 2). Após uma longa velas branca há uma vela (a cor não é importante) com um pequeno corpo, que se encontra fora do corpo da vela branca. O pequeno corpo de uma vela significa que a força entre compradores e vendedores são iguais e que o mercado está pronto para mudar de tendência.

A terceira vela do padrão é uma vela baixista, seu corpo não está sobreposto com o corpo da segunda vela e o preço de fechamento se encontra dentro do corpo da primeira vela (altista). A vela resultante do modelo também é representada na figura 2.

Se caso a segunda vela for um Doji, o modelo é chamado de "Estrela Doji da Noite".

Fig. 2. Padrões de vela "Estrela da Noite" e "Estrela Doji da Noite"

Fig. 2. Padrões de vela "Estrela da Noite" e "Estrela Doji da Noite"

O reconhecimento do padrão "Estrela da Noite" e "Estrela Doji da Noite" segue abaixo:

//+------------------------------------------------------------------+
//| Verifica a formação do padrão de vela "Estrela da Noite"         |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternEveningStar()
  {
//--- Estrela da Noite
   if((Close(3)-Open(3)>AvgBody(1))             && // vela altista, seu corpo é maior que o corpo médio da vela 
      (MathAbs(Close(2)-Open(2))<AvgBody(1)*0.5) && // a segunda vela possui um corpo pequeno (menor que a metade do corpo médio)
      (Close(2)>Close(3))                       && // o fechamento da segunda vela é maior que o fechamento da primeira
      (Open(2)>Open(3))                         && // a abertura da segunda vela é maior que a abertura da primeira
      (Close(1)<MidOpenClose(3)))                  // o fechamento da última vela completa é menor que o centro da primeira 
      return(true);
//---
   return(false);
  }
//+------------------------------------------------------------------+
//| Verifica a formação do padrão de vela "Estrela Doji da Noite"    |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternEveningDoji()
  {
//--- Estrela Doji da Noite
   if((Close(3)-Open(3)>AvgBody(1)) && // vela altista, seu corpo é maior que o corpo médio da vela 
      (AvgBody(2)<AvgBody(1)*0.1)   && // a segunda vela possui um corpo muito pequeno (doji) 
      (Close(2)>Close(3))           && // o fechamento da segunda vela é maior que o fechamento da primeira
      (Open(2)>Open(3))             && // a abertura da segunda vela é maior que a abertura da primeira
      (Open(1)<Close(2))            && // gap de baixa na última vela completa
      (Close(1)<Close(2)))             // o fechamento da última vela completa é 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 usados para verificar a formação dos padrões de vela "Estrela da Noite" e "Estrela Doji da Noite".


2. Sinais de negociação, confirmado pelo indicador CCI

O sinais de negociação para abrir posições de compra ou venda deve ser confirmado pelo indicador CCI. O valor de CCI deve ser maior/menor que os níveis críticos (-50 para posição comprada e 50 para posição vendida.

O fechamento da posição em aberto depende dos valores de CCI. Ele pode ser feito em 2 casos:

  1. Se a linha CCI atingiu o nível crítico oposto (80 para posição comprada e -80 para posição vendida)
  2. Se o sinal reverso não foi confirmado (quando CCI atinge os seguintes níveis: -80 para posição comprada e 80 para posição vendida)

Fig. 3. Padrão de vela "Estrela da Noite", confirmado pelo indicador CCI

Fig. 3. Padrão de vela "Estrela da Noite", confirmado pelo indicador CCI


  • int CMS_ES_CCI::LongCondition() - verifica as condições de abertura de posição comprada (retorna 80) e o fechamento da posição vendida (retorna 40);
  • int CMS_ES_CCI::ShortCondition() - verifica as condições de abertura de posição vendida (retorna 80) e o fechamento da posição comprada (retorna 40).

2.1. Abertura de posição comprada/fechamento de posição vendida

  1. A formação do padrão "Estrela da Manhã" deve ser confirmado pelo indicador CCI: CCI(1)<-50 (o valor de CCI da última barra completa deve ser menor que -50).

  2. A posição vendida deve ser fechada se o indicador CCI cruzou para cima o nível crítico -80 ou cruzou para baixo o nível crítico 80.

//+---------------------------------------------------------------------------+
//| Verifica as condições de entrada e saída do mercado                       |
//| 1) Entrada no mercado (abertura de posição comprada, resultado=80)        |
//| 2) Saída do mercado (fechamento de posição vendida, resultado=40)         |
//+---------------------------------------------------------------------------+
int CMS_ES_CCI::LongCondition()
  {
   int result=0;
//--- idx pode ser usado para determinar o modo de funcionamento 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 somente quando há novas barras
   int idx   =StartIndex();
//--- verificando as condições de abertura de posição comprada
//--- formação do padrão Estrela da Manhã e CCI<-50
   if(CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) && (CCI(1)<-50))
     result=80;
//--- verificando as condições de fechamento da posição vendida
//--- cruzamento da linha de sinal nos níveis de sobrecompra/sobrevenda (acima de -80, abaixo de 80)
   if(((CCI(1)>-80) && (CCI(2)<-80)) || ((CCI(1)<80) && (CCI(2)>80)))
     result=40;
//--- retorna o resultado
   return(result);
  }

2.2. Abertura de posição vendida/fechamento de posição comprada

  1. A formação do padrão "Estrela da Noite" deve ser confirmado pelo indicador CCI: CCI(1)>50 (o valor do indicador CCI da última barra completa deve ser maior que 50).

  2. A posição comprada deve ser fechada se o indicador CCI cruzou para baixo os níveis críticos -80 ou 80.

//+------------------------------------------------------------------------+
//| Verifica as condições de entrada e saída do mercado                    |
//| 1) Entrada no mercado (abertura de posição vendida, resultado=80)      |
//| 2) Saída do mercado (fechamento de posição comprada, resultado=40)     |
//+------------------------------------------------------------------------+
int CMS_ES_CCI::ShortCondition()
  {
   int result=0;
//--- idx pode ser usado para determinar o modo de funcionamento 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 somente quando há novas barras
   int idx   =StartIndex();
//--- verificando as condições de abertura de posição vendida
//--- formação do padrão Estrela da Noite e CCI>50
   if(CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) && (CCI(1)>50))
     result=80;
//--- verificando as condições de fechamento de posição comprada
//--- cruzamento da linha de sinal nos níveis de sobrecompra/sobrevenda (abaixo de -80, abaixo de 80)
   if(((CCI(1)<80) && (CCI(2)>80)) || ((CCI(1)<-80) && (CCI(2)>-80)))
     result=40;
//--- retorna o resultado
   return(result);
  }


2.3. Criando o Expert Advisor usando o Assistente MQL5

A classe CMS_ES_CCI não está incluída na Biblioteca Padrão de classes, para usá-la, é necessário baixar o arquivo acms_es_cci.mqh (ver anexos) e salvá-lo em client_terminal_data_folder\MQL5\Include\Expert\Signal\MySignals. O mesmo deve ser feito para o arquivo acandlepatterns.mqh. Você pode usá-lo no Assistente MQL5 após reiniciar o MetaEditor.

Para criar um Expert Advisor inicie o Assistente MQL5:

Fig. 4. Criando o Expert Advisor usando o Assistente MQL5

Fig. 4. Criando o Expert Advisor usando o Assistente MQL5

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 dos sinais de negociação usados.

Fig. 6. Propriedades de sinais do Expert Advisor

Fig. 6. Propriedades de sinais do Expert Advisor

Em nosso caso usaremos apenas um módulo de sinais de negociação.

Adicionando o módulo de sinais de negociação "Estrela da Manhã/Noite e confirmado pelo CCI":

Fig. 7. Propriedades de sinais do Expert Advisor

Fig. 7. Propriedades de sinais do Expert Advisor

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

Fig. 8. Propriedades de sinais do Expert Advisor

Fig. 8. Propriedades de sinais do Expert Advisor

Você pode selecionar qualquer propriedade de trailing, mas nós usaremos "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 gerenciamento de capital, usaremos "Negociação com volume fixo":

Fig. 10. Propriedades do gerenciamento de capital do Expert Advisor

Fig. 10. Propriedades do gerenciamento de capital do Expert Advisor

Ao pressionar o botão "Finalizar", obteremos o código gerado do Expert Advisor, de nome Expert_AMS_ES_CCI.mq5, localizado na pasta terminal_data_folder\MQL5\Experts\.

Parâmetros de entrada padrão do Expert Advisor gerado:

//--- entradas do sinal principal
input int            Signal_ThresholdOpen   =10;     // Valor do sinal de abertura [0...100]
input int            Signal_ThresholdClose  =10;     // Valor do sinal de fechamento [0...100]
input double         Signal_PriceLevel      =0.0;    // Nível do preço para a execução do 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 do sinal principal
input int            Signal_ThresholdOpen   =40;     // Valor do sinal de abertura [0...100]
input int            Signal_ThresholdClose  =20;     // Valor do sinal de fechamento [0...100]
input double         Signal_PriceLevel      =0.0;    // Nível do preço para a execução do 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 valores dos níveis de abertura e fechamento de posições.

No código dos métodos LongCondition() e ShortCondition() da classe de sinais de negociação, nós especificamos os valores fixos das limiares:

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

O Expert Advisor, gerado pelo Assistente MQL5 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, ele consiste em todos os módulos adicionados) também é usado, mas seus módulos LongCondition() e ShortCondition() sempre retornam 0.

O resultado da votação do módulo principal também é usado para calcular a média dos "votos". Em nosso caso temos: módulo principal + 1 módulo de sinais de negociação, por isso, temos que levar em consideração ao estabelecer os valores da limiar. Por esta razão os valores de ThresholdOpen e ThresholdClose devem ser definidos como 40=(0+80)/2 e 20=(0+40)/2.

Os valores dos parâmetros de entrada de Signal_StopLevel e Signal_TakeLevel está definido com o valor 0, isto significa que o fechamento das posições será executado apenas quando as condições de fechamento forem verdadeiras.


2.4. Resultados do backtesting com dados históricos

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

Na criação do Expert Advisor usaremos o volume fixo (Negociação com lote fixo, 0.1), o algoritmo de Trailing Stop não é usado (Trailing não utilizado).

Fig. 11. Resultados do teste com o Expert Advisor, baseado em Estrela da Manhã/Noite + CCI

Fig. 11. Resultados do teste com o Expert Advisor, baseado em Estrela da Manhã/Noite + CCI


O melhor conjunto dos parâmetros de entrada podem ser encontrado utilizando o Strategy Tester do terminal cliente MetaTrader 5.

O código do Expert Advisor, criado pelo Assistente MQL5 se encontra em anexo em expert_ams_es_cci.mq5.

Traduzido do russo pela MetaQuotes Ltd.
Publicação original: https://www.mql5.com/ru/code/322

Exp_AroonSignal Exp_AroonSignal

Expert Advisor baseado nos sinais de entrada do indicador AroonSignal.

Exp_AdaptiveCyberCycle Exp_AdaptiveCyberCycle

O Expert Advisor Exp_AdaptiveCyberCycle foi construído com base no indicador Adaptive Cyber Cycle. O sinal é formado após o fechamento da barra, quando há o cruzamento do indicador e sua linha de sinal.

Exp_3Parabolic Exp_3Parabolic

Sistema de negociação baseado em três parabólicas com três períodos de tempo distintos.

Demo_BitmapOffset (OBJPROP_XOFFSET e OBJPROP_YOFFSET) Demo_BitmapOffset (OBJPROP_XOFFSET e OBJPROP_YOFFSET)

Se você precisar mostrar apenas uma parte da imagem no momento e esconder a outra, você pode usar a janela móvel, especificando a área visível da imagem.