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'
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'
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:
- se o MFI atingiu o nível crítico oposto (70 para posição longa e 30 para posição curta)
- 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
- 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
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).
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
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).
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
Vamos especificar o nome 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
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
Módulo de sinais de negociação adicionado:

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
Quanto às propriedades de gerenciamento de dinheiro, usaremos "Negociação com volume fixo":

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.
