Início Negociação Sistemática Postagem

MQL5 Wizard: Sinais de Negociação com 3 Corvos Negros/3 Soldados Brancos e MFI

Anexo
287.zip (6.5 KB, Baixar 0 vezes)

O MQL5 Wizard é uma ferramenta incrível que te permite criar Robôs de Investimento prontos, baseados nas classes da Biblioteca Padrão do MetaTrader 5. Isso torna mais fácil testar suas ideias de negociação. Para isso, basta criar sua própria classe de sinais de negociação, cuja estrutura e exemplo você pode encontrar no artigo MQL5 Wizard: Como Criar um Módulo de Sinais de Negociação.

A ideia principal é que a classe de sinais de negociação deriva de CExpertSignal. Depois, você precisa sobrescrever os métodos virtuais LongCondition() e ShortCondition() com os seus métodos personalizados.

Um livro interessante é "Estratégias dos Melhores Traders" (em russo), onde várias estratégias de negociação são discutidas. Neste artigo, vamos focar em padrões de velas de reversão, que sã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 velas. Para a confirmação dos sinais de negociação gerados pelos padrões de velas, basta escrever uma classe derivada de CCandlePattern e adicionar as características necessárias (por exemplo, a confirmação por osciladores).

1. Padrões de Velas Reversais: "3 Corvos Negros" e "3 Soldados Brancos"

1.1. 3 Corvos Negros

Esse padrão de velas de baixa é utilizado para prever uma reversão na tendência de alta atual. Ele é composto por três velas longas consecutivas que fecharam abaixo do dia anterior, com a abertura de cada sessão ocorrendo dentro do corpo da vela anterior.

Fig. 1. Padrão de vela '3 Corvos Negros'

Fig. 1. Padrão de vela "3 Corvos Negros"

O reconhecimento do padrão "3 Corvos Negros" é feito pelo método CheckPatternThreeBlackCrows da classe CCandlePattern:

//+------------------------------------------------------------------+
//| Verifica a formação do padrão de vela "3 Corvos Negros"      |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternThreeBlackCrows()
  {
//--- 3 Corvos Negros 
   if((Open(3)-Close(3)>AvgBody(1)) && // (vela longa preta)
      (Open(2)-Close(2)>AvgBody(1)) &&
      (Open(1)-Close(1)>AvgBody(1)) &&
      (MidPoint(2)<MidPoint(3))     && // (pontos médios mais baixos)
      (MidPoint(1)<MidPoint(2)))       
      return(true);
//---
   return(false);
  }

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


1.2. Padrão "3 Soldados Brancos"

Esse padrão de alta é usado para prever a reversão da tendência de baixa atual. Ele consiste em três velas longas consecutivas 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 desde que a vela do segundo dia abra na metade superior da faixa do primeiro dia. Até o final do segundo dia, ela deve fechar perto da máxima, deixando uma sombra superior muito pequena ou inexistente. O mesmo padrão deve ser repetido no terceiro dia.

Fig. 2. Padrão de vela '3 Soldados Brancos'

Fig. 2. Padrão de vela "3 Soldados Brancos"

Aqui está o método para reconhecer o padrão "3 Soldados Brancos":

//+------------------------------------------------------------------+
//| Verifica a formação do padrão de vela "3 Soldados Brancos"       |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternThreeWhiteSoldiers()
  {
   //--- 3 Soldados Brancos
   if((Close(3)-Open(3)>AvgBody(1)) && // vela longa branca
      (Close(2)-Open(2)>AvgBody(1)) &&
      (Close(1)-Open(1)>AvgBody(1)) &&
      (MidPoint(2)>MidPoint(3))     && // pontos médios mais altos
      (MidPoint(1)>MidPoint(2)))
      return(true);
//---
   return(false);
  }

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


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 indicador MFI. O valor do indicador MFI deve ser menor que 40 (para posições longas) ou maior que 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 atingir 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 seguintes níveis: 30 para posição longa e 70 para posição curta)

Fig. 3. Padrão '3 Corvos Negros', confirmado pelo indicador MFI

Fig. 3. Padrão '3 Corvos Negros', confirmado pelo indicador MFI


  • int CBC_WS_MFI::LongCondition() - verifica as condições para abrir posição longa (retorna 80) e fechar a posição curta (retorna 40);
  • int CBC_WS_MFI::ShortCondition() - verifica as condições para abrir posição curta (retorna 80) e fechar a posição longa (retorna 40).

2.1. Abrindo posição longa/Fechando posição curta

  1. A formação do padrão "3 Soldados Brancos" deve ser confirmada pelo indicador MFI: MFI(1)<40 (o valor do indicador MFI da última barra completada deve ser menor que 40).

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

//+------------------------------------------------------------------+
//| 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 CBC_WS_MFI::LongCondition()
  {
   int result=0;
//--- idx pode ser usado para determinar o modo de operação do Robô
//--- idx=0 - neste caso o Robô verifica as condições de negociação a cada tick
//--- idx=1 - neste caso o Robô 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 3 Soldados Brancos e MFI<40
  if(CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS) && (MFI(1)<40))
     result=80;
//--- verificando as condições para fechar a 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. Abrindo posição curta/Fechando posição longa

  1. A formação do padrão "3 Corvos Negros" deve ser confirmada pelo indicador 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 indicador MFI cruzar para cima os níveis críticos (70 ou 30).

//+------------------------------------------------------------------+
//| 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 CBC_WS_MFI::ShortCondition()
  {
   int result=0;
//--- idx pode ser usado para determinar o modo de operação do Robô
//--- idx=0 - neste caso o Robô verifica as condições de negociação a cada tick
//--- idx=1 - neste caso o Robô 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 3 Corvos Negros e MFI>60
  if(CheckCandlestickPattern(CANDLE_PATTERN_THREE_BLACK_CROWS) && (MFI(1)>60))
     result=80;
//--- verificando as condições para fechar a 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 o Robô de Investimento com o MQL5 Wizard

A classe CBC_WS_MFI não está incluída nas classes da Biblioteca Padrão; para usá-la, é necessário baixar o arquivo abc_ws_mfi.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 acandlepatterns.mqh. Você poderá usá-los no MQL5 Wizard após reiniciar o MetaEditor.

Para criar um Robô de Investimento, inicie o MQL5 Wizard:

Fig. 4. Criando Robô de Investimento com o MQL5 Wizard

Fig. 4. Criando Robô de Investimento com o MQL5 Wizard

Vamos especificar o nome do Robô de Investimento:

Fig. 5. Propriedades gerais do Robô de Investimento

Fig. 5. Propriedades gerais do Robô de Investimento

Após isso, precisamos selecionar os módulos de sinais de negociação utilizados.

Fig. 6. Propriedades de sinal do Robô de Investimento

Fig. 6. Propriedades de sinal do Robô de Investimento

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

Adicionando o módulo de Sinais baseados em 3 Corvos Negros/3 Soldados Brancos, confirmados por MFI:

Fig. 7. Propriedades de sinal do Robô de Investimento

Fig. 7. Propriedades de sinal do Robô de Investimento

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

Fig. 8. Propriedades de sinal do Robô de Investimento

Fig. 8. Propriedades de sinal do Robô de Investimento

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

Fig. 9. Propriedades de trailing do Robô de Investimento

Fig. 9. Propriedades de trailing do Robô de Investimento

Quanto às propriedades de gerenciamento de dinheiro, usaremos "Negociação com volume fixo":

Fig. 10. Propriedades de gerenciamento de dinheiro do Robô de Investimento

Fig. 10. Propriedades de gerenciamento de dinheiro do Robô de Investimento

Ao pressionar o botão "Finalizar", obteremos o código do Robô de Investimento gerado, localizado em Expert_ABC_WS_MFI.mq5, que será salvo na pasta terminal_data_folder\MQL5\Experts\.

Os parâmetros de entrada padrão do Robô de Investimento 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 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 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 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 a abertura e fechamento de 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 Robô de Investimento 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 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". No nosso caso, temos: módulo principal + 1 módulo de sinais de negociação, então precisamos levar em conta esse fato ao definir os valores dos limiares. Por causa disso, o ThresholdOpen e o 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 apenas quando as condições de fechamento forem verdadeiras.


2.4. Resultados de Testes de Retrospectiva

Vamos considerar o teste de um Robô de Investimento em dados históricos (EURUSD H1, período de teste: 01/01/2010 a 16/03/2011, PeriodMFI=37, MA_period=13).

Na criação do Robô de Investimento, utilizamos 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 de teste do Robô de Investimento, baseado em 3 Corvos Negros/3 Soldados Brancos + MFI

Fig. 11. Resultados de teste do Robô de Investimento, baseado em 3 Corvos Negros/3 Soldados Brancos + MFI


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

O código do Robô de Investimento, criado pelo MQL5 Wizard, está anexado em expert_abc_ws_mfi.mq5.


Publicações relacionadas

Comentário (0)