Crie seu Expert Advisor com MQL5 Wizard: Sinais de Negociação com Linhas de Encontro e MFI

Mike 2011.03.24 20:15 21 0 0
Anexo

O MQL5 Wizard é uma ferramenta poderosa que permite criar Expert Advisors prontos com base nas classes da biblioteca padrão que vem com o terminal cliente (veja Criando Expert Advisors no MQL5 Wizard para mais detalhes). Com ele, você pode testar rapidamente suas ideias de negociação; tudo que precisa fazer é criar sua própria classe de sinais de negociação. A estrutura dessa classe e exemplos 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, é necessário substituir os métodos virtuais LongCondition() e ShortCondition() por seus próprios métodos.

Existe um livro chamado "Estratégias dos Melhores Traders" (em russo), onde várias estratégias de negociação são discutidas. Vamos focar nos padrões de candlestick de reversão, confirmados pelos osciladores Stochastic, CCI, MFI e RSI.

A melhor abordagem é criar uma classe separada, derivada de CExpertSignal, para verificar a formação de padrões de candlestick. Para confirmar os sinais de negociação gerados pelos padrões de candlestick, é suficiente criar uma classe derivada de CCandlePattern e adicionar os recursos necessários (por exemplo, confirmação por osciladores).

Aqui, vamos considerar os sinais baseados nos padrões de candlestick de reversão "Bullish/Bearish Meeting Lines", confirmados pelo indicador MFI (Market Facilitation Index). O módulo de sinais de negociação é 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 "Meeting Lines" de Reversão

1.1. Bullish Meeting Lines

O padrão consiste em dois candlesticks (um bearish e um bullish) com preços de fechamento iguais (ou muito próximos). O corpo dos dois candlesticks deve ser maior que a média do comprimento do corpo.

O padrão "Bullish Meeting Lines" indica a reversão de uma tendência de baixa.

Padrão de Bullish Meeting Lines

Fig. 1. Padrão "Bullish Meeting Lines" 

O reconhecimento do padrão "Bullish Meeting Lines" é implementado no método CheckPatternBullishMeetingLines() da classe CCandlePattern:

//+--------------------------------------------------------------------+
//| Verifica a formação do padrão "Bullish Meeting Lines" |
//+--------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBullishMeetingLines()
  {
//--- Bullish Meeting Lines
   if((Open(2)-Close(2)>AvgBody(1))
     && // candlestick negro longo
     ((Close(1)-Open(1)>AvgBody(1))
     && // candlestick branco longo
      (MathAbs(Close(1)-Close(2))<0.1*AvgBody(1)))
     return(true);
//---
   return(false);
  }

O método CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_MEETING_LINES) da classe CCandlePattern é utilizado para verificar a formação do padrão "Bullish Meeting Lines".


1.2. Bearish Meeting Lines

O padrão consiste em dois candlesticks (um bullish e um bearish) com preços de fechamento iguais (ou muito próximos). O corpo dos dois candlesticks deve ser maior que a média do comprimento do corpo.

O padrão "Bearish Meeting Lines" indica a reversão de uma tendência de alta.

Padrão de Bearish Meeting Lines

Fig. 2. Padrão "Bearish Meeting Lines"

O reconhecimento do padrão "Bearish Meeting Lines" é implementado no método CheckPatternBearishMeetingLines() da classe CCandlePattern:

//+--------------------------------------------------------------------+
//| Verifica a formação do padrão "Bearish Meeting Lines" |
//+--------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBearishMeetingLines()
  {
//--- Bearish Meeting Lines
   if((Close(2)-Open(2)>AvgBody(1))
     && // candlestick branco longo
     ((Open(1)-Close(1)>AvgBody(1))
     && // candlestick negro longo
      (MathAbs(Close(1)-Close(2))<0.1*AvgBody(1)))
     return(true);
//---
   return(false);
  }

O método CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_MEETING_LINES) da classe CCandlePattern é utilizado para verificar a formação do padrão "Bearish Meeting Lines".


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

Os sinais de negociação para abrir posição longa ou curta devem ser confirmados pelo indicador 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 da posição aberta 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)

Padrão de Bearish Meeting Lines

Fig. 3. Padrão de Bearish Meeting Lines, confirmado pelo indicador MFI


  • int CML_MFI::LongCondition() - verifica as condições para abrir posição longa (retorna 80) e fechar posição curta (retorna 40);
  • int CML_MFI::ShortCondition() - verifica as 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 "Bullish Meeting Lines" deve ser confirmada pelo indicador MFI: MFi(1)<40 (o valor do indicador MFI da última barra concluída 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 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 CML_MFI::LongCondition()
  {
   int result=0;
//--- idx pode ser utilizado para determinar o modo de trabalho do EA
//--- idx=0 - neste caso EA verifica condições de negociação a cada tick
//--- idx=1 - neste caso EA verifica 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 Bullish Meeting Lines e MFI<40
  if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_MEETING_LINES) && (MFI(1)<40))
     result=80;
//--- verificando as condições para fechar posição curta
//--- cruzamento da linha de sinal dos níveis sobrecomprados/sobrevendidos (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 "Bearish Meeting Lines" deve ser confirmada pelo indicador MFI: MFI(1)>60 (o valor do indicador MFI da última barra concluída deve ser maior que 60).

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

//+------------------------------------------------------------------+
//| Verifica 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 CML_MFI::ShortCondition()
  {
   int result=0;
//--- idx pode ser utilizado para determinar o modo de trabalho do EA
//--- idx=0 - neste caso EA verifica condições de negociação a cada tick
//--- idx=1 - neste caso EA verifica 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 Bearish Meeting Lines e MFI>60
  if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_MEETING_LINES) && (MFI(1)>60))
     result=80;
//--- verificando as condições para fechar posição longa
//--- cruzamento da linha de sinal dos níveis sobrecomprados/sobrevendidos (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 CML_MFI não está incluída nas classes da Biblioteca Padrão, para usá-la, é necessário baixar o arquivo aml_mfi.mqh (veja 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ê pode usá-los no MQL5 Wizard após reiniciar o MetaEditor.

Para criar um Expert Advisor, inicie o MQL5 Wizard:

Criando Expert Advisor usando MQL5 Wizard

Fig. 4. Criando Expert Advisor usando MQL5 Wizard

Vamos especificar o nome do Expert Advisor:

Propriedades gerais do Expert Advisor

Fig. 5. Propriedades gerais do Expert Advisor

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

Propriedades dos sinais do Expert Advisor

Fig. 6. Propriedades dos sinais do Expert Advisor

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

Adicionando o módulo Sinais baseados em Bullish/Bearish Meeting Lines pelo MFI:

Propriedades dos sinais do Expert Advisor

Fig. 7. Propriedades dos sinais do Expert Advisor

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

Propriedades dos sinais do Expert Advisor

Fig. 8. Propriedades dos sinais do Expert Advisor

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

Propriedades de trailing do Expert Advisor

Fig. 9. Propriedades de trailing do Expert Advisor

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

Propriedades de gerenciamento de dinheiro do Expert Advisor

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

Ao pressionar o botão "Finalizar", obteremos o código do Expert Advisor gerado, localizado em Expert_AML_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 de sinal para abrir [0...100]
input int            Signal_ThresholdClose  =10;     // Valor do limite de sinal para fechar [0...100]
input double         Signal_PriceLevel      =0.0;    // Nível de preço para executar uma operaçã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 sinal principal
input int            Signal_ThresholdOpen   =40;     // Valor do limite de sinal para abrir [0...100]
input int            Signal_ThresholdClose  =20;     // Valor do limite de sinal para fechar [0...100]
input double         Signal_PriceLevel      =0.0;    // Nível de preço para executar uma operaçã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 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 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 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 consideração 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 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 Teste de Backtesting

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

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

Resultados do teste do Expert Advisor

Fig. 11. Resultados do teste do Expert Advisor, baseado em Bullish/Bearish Meeting Lines + 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 Expert Advisor, criado pelo MQL5 Wizard está anexado em expert_aml_mfi.mq5.


Lista
Comentário 0