Início Negociação Sistemática Postagem

Como Criar Sinais de Negociação com o MQL5 Wizard: Padrões de Estrelas e MFI

Anexo
323.zip (6.46 KB, Baixar 0 vezes)

O MQL5 Wizard é uma ferramenta poderosa que permite criar Expert Advisors (EAs) prontos para uso, utilizando as classes da biblioteca padrão que vem junto com o terminal MetaTrader (veja Criando EAs Prontos no MQL5 Wizard para mais detalhes). Com ele, você pode testar suas ideias de negociação rapidamente, bastando criar sua própria classe de sinais de negociação.

A ideia básica é derivar a classe de sinais de negociação de CExpertSignal. Depois, é necessário sobrescrever os métodos virtuais LongCondition() e ShortCondition() com suas próprias implementações.

Um livro interessante, "Estratégias dos melhores traders" (em russo), discute várias estratégias de negociação. Aqui, vamos nos concentrar nos padrões de reversão de velas, 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 por esses padrões, basta criar uma classe derivada de CCandlePattern e adicionar as funcionalidades necessárias (por exemplo, confirmação por osciladores).

Vamos focar agora nos sinais baseados nos padrões de reversão "Estrela da Manhã/Estrela da Noite" (Morning Doji Star/Evening Doji Star), confirmados pelo MFI. O módulo de sinais de negociação é baseado na classe CCandlePattern, que é um exemplo simples de como criar sinais de negociação utilizando 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 sinaliza a reversão de uma tendência de baixa e é composto por três velas (Fig. 1). Após uma longa vela preta, há uma vela (a cor não importa) com um corpo pequeno, que está fora do corpo da vela preta. O corpo pequeno indica que a força dos touros e ursos está equilibrada, e o mercado está pronto para mudar de 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 está dentro do corpo da primeira (bearish). A vela resultante do modelo também é mostrada na Figura 1.

Caso a segunda vela seja um doji, o padrão é 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, corpo maior que a média
      (MathAbs(Close(2)-Open(2)<AvgBody(1)*0.5) && // segunda vela com 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 centro da primeira
      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 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, há uma vela (a cor não importa) com um corpo pequeno, que está fora do corpo da vela branca. O corpo pequeno indica que a força dos touros e ursos está equilibrada, e o mercado está pronto para mudar de 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 está dentro do corpo da primeira (bullish). A vela resultante do modelo também é mostrada na Figura 2.

Caso a segunda vela seja um doji, o padrão é 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 identificar os 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
      (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 centro da primeira
      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 "Estrela da Noite" e "Estrela da Noite Doji".


2. Sinais de Negociação Confirmados pelo Indicador MFI

Os sinais de negociação para abrir posições longas ou curtas devem ser confirmados pelo MFI. O valor do indicador MFI deve ser inferior a 40 (para posições longas) ou superior a 60 (para posições curtas).

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

  1. se o MFI atingiu 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 indicador MFI atinge os níveis seguintes: 30 para posição longa e 70 para posição curta)

Figura 3. O padrão 'Estrela da Manhã', confirmado pelo indicador MFI

Figura 3. O padrão 'Estrela da Manhã', confirmado pelo indicador MFI


  • int CMS_ES_MFI::LongCondition() - verifica condições para abrir posição longa (retorna 80) e fechar posição curta (retorna 40);
  • int CMS_ES_MFI::ShortCondition() - verifica 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 MFI: MFi(1)<40 (o valor do indicador MFI da última barra completada deve ser inferior a 40).

  2. A posição curta deve ser fechada se o MFI cruzou para cima os níveis críticos (70 ou 30).

//+------------------------------------------------------------------+
//| Verifica 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_MFI::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 MFI<40
  if(CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) && (MFI(1)<40))
     result=80;
//--- verificação das 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(((MFI(1)>30) && (MFI(2)<30)) || ((MFI(1)>70) && (MFI(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 MFI: MFI(1)>60 (o valor do indicador MFI da última barra completada deve ser maior que 60).

  2. A posição longa deve ser fechada se o MFI cruzou para cima os níveis críticos (70 ou 30).

//+------------------------------------------------------------------+
//| Verifica 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_MFI::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 Noite e MFI>60
  if(CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) && (MFI(1)>60))
     result=80;
//--- verificação das condições para fechar posição longa
//--- cruzamento da linha de sinal dos níveis de sobrecompra/sobrevenda (para cima 70, para baixo 30)
   if(((MFI(1)>70) && (MFI(2)<70)) || ((MFI(1)<30) && (MFI(2)>30)))
     result=40;
//--- retornar resultado
   return(result);
  }


2.3. Criando Expert Advisor usando MQL5 Wizard

A classe CMS_ES_MFI não está incluída nas classes da Biblioteca Padrão. Para usá-la, é necessário baixar o arquivo ams_es_mfi.mqh (veja 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á-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, precisamos selecionar os módulos de sinais de negociação usados.

Fig. 6. Propriedades de sinal do Expert Advisor

Fig. 6. Propriedades de sinal do Expert Advisor

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

Adicionando o módulo: Sinais baseados em Estrela da Manhã/Estrela da Noite confirmados por MFI:

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 "Finalizar", receberemos o código do Expert Advisor gerado, localizado em Expert_AMS_ES_MFI.mq5, que será salvo na pasta terminal_data_folder\MQL5\Experts\.

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

//--- entradas para sinal principal
input int            Signal_ThresholdOpen   =10;     // Valor do limite do sinal para abrir [0...100]
input int            Signal_ThresholdClose  =10     // Valor do limite 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 sinal principal
input int            Signal_ThresholdOpen   =40;     // Valor do limite do sinal para abrir [0...100]
input int            Signal_ThresholdClose  =20     // Valor do limite 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 Signal_ThresholdOpen/Signal_ThresholdClose permitem especificar os 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, que 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". Neste caso, temos: módulo principal + 1 módulo de sinais de negociação, então precisamos levar isso em conta ao definir os valores dos 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 estão definidos como 0, o que significa que o fechamento das posições será feito somente quando as condições de fechamento forem verdadeiras.


2.4. Resultados de testes de histórico

Vamos considerar o teste do Expert Advisor em dados históricos (EURUSD H1, período de teste: 2010.01.01-2011.03.16, PeriodMFI=49, MA_period=3).

Na criação do Expert Advisor, usamos o volume fixo (Negociação com 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ã/Noite + MFI

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


O melhor conjunto de parâmetros de entrada pode ser encontrado usando o Strategy Tester do terminal MetaTrader 5.

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


Publicações relacionadas

Comentário (0)