O MQL5 Wizard é uma ferramenta poderosa que permite criar Expert Advisors prontos com base nas classes da biblioteca padrão que acompanha o terminal do cliente. Com ele, você pode testar suas ideias de negociação rapidamente, tudo que precisa fazer é criar sua própria classe de sinais de negociação. A estrutura desta classe e um exemplo 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 sobrescrever os métodos virtuais LongCondition() e ShortCondition() com seus próprios métodos.
Existem muitos padrões de candlestick de reversão que podemos considerar, como os padrões de "Bullish Engulfing" e "Bearish Engulfing", confirmados por indicadores como o Market Facilitation Index (MFI). Vamos explorar como criar sinais de negociação baseados nesses padrões.
1. Padrões de Candlestick de Reversão
1.1. Bullish Engulfing
O padrão "Bullish Engulfing" se forma durante uma tendência de baixa quando um pequeno candlestick negro é seguido por um grande candlestick branco que o eclipsa completamente. Os sombras do pequeno candlestick são curtas, permitindo que o corpo do grande candlestick cubra todo o candlestick do dia anterior.

Fig. 1. Padrão de candlestick Bullish Engulfing
A verificação do padrão "Bullish Engulfing" é feita pelo método CheckPatternBullishEngulfing() da classe CCandlePattern:
//+------------------------------------------------------------------+ //| Verifica a formação do padrão de candlestick "Bullish Engulfing" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBullishEngulfing() { //--- Bullish Engulfing if((Open(2)>Close(2)) && // o candlestick anterior é bearish (Close(1)-Open(1)>AvgBody(1)) && // corpo do candlestick bullish é maior que a média (Close(1)>Open(2)) && // preço de fechamento do candlestick bullish é maior que o preço de abertura do bearish (MidOpenClose(2)2)) && // tendência de baixa (Open(1) 2))) { // preço de abertura do candlestick bullish é menor que o preço de fechamento do bearish return(true); } //--- return(false); }
A função CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) da classe CCandlePattern é utilizada para verificar a formação do padrão "Bullish Engulfing".
1.2. Bearish Engulfing
O padrão "Bearish Engulfing" se forma durante uma tendência de alta quando um pequeno candlestick branco é seguido por um grande candlestick negro que o eclipsa completamente. Os sombras do pequeno candlestick são curtas, permitindo que o corpo do grande candlestick cubra todo o candlestick do dia anterior.

Fig. 2. Padrão de candlestick Bearish Engulfing
A verificação do padrão "Bearish Engulfing" é feita pelo método CheckPatternBearishEngulfing() da classe CCandlePattern:
//+------------------------------------------------------------------+ //| Verifica a formação do padrão de candlestick "Bearish Engulfing" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBearishEngulfing() { //--- Bearish Engulfing if((Open(2)2)) && // o candlestick anterior é bullish (Open(1)-Close(1)>AvgBody(1)) && // corpo do candlestick é maior que a média (Close(1) 2)) && // preço de fechamento do candlestick bearish é menor que o preço de abertura do bullish (MidOpenClose(2)>CloseAvg(2)) && // tendência de alta (Open(1)>Close(2))) { // preço de abertura do candlestick bearish é maior que o preço de fechamento do bullish return(true); } //--- return(false); }
A função CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) da classe CCandlePattern é utilizada para verificar a formação do padrão "Bearish Engulfing".
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 ocorrer em 2 casos:
- se o MFI atingir 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 seguintes níveis: 30 para posição longa e 70 para posição curta)

Fig. 3. Padrão Bullish Engulfing, confirmado pelo indicador MFI
- int CBE_BE_MFI::LongCondition() - verifica condições para abrir posição longa (retorna 80) e fechar posição curta (retorna 40);
- int CBE_BE_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 "Bullish Engulfing" deve ser confirmada pelo indicador MFI: MFI(1)<40 (o valor do indicador MFI da última barra completada deve ser menor que 40).
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 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 CBE_BE_MFI::LongCondition() { int result=0; //--- idx pode ser usado para determinar o modo de operação do EA //--- 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 apenas em novas barras int idx = StartIndex(); //--- verificação das condições para abrir posição longa //--- formação do padrão Bullish Engulfing e MFI<40 if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) && (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 "Bearish Engulfing" deve ser confirmada pelo indicador 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 indicador MFI cruzar para cima os níveis críticos (70 ou 30).
//+------------------------------------------------------------------+ //| Verifica as 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 CBE_BE_MFI::ShortCondition() { int result=0; //--- idx pode ser usado para determinar o modo de operação do EA //--- 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 apenas em novas barras int idx = StartIndex(); //--- verificação das condições para abrir posição curta //--- formação do padrão Bearish Engulfing e MFI>60 if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) && (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 o Expert Advisor usando o MQL5 Wizard
A classe CBE_BE_MFI não está incluída nas classes da Biblioteca Padrão, para usá-la, é necessário baixar o arquivo abe_be_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á utilizá-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 utilizados.

Fig. 6. Propriedades de sinal do Expert Advisor
Neste caso, usamos apenas um módulo de sinais de negociação.
Adicionando o módulo de sinais baseado em Bullish Engulfing/Bearish Engulfing confirmado 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 qualquer propriedade 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", teremos o código do Expert Advisor gerado, localizado em Expert_ABE_BE_MFI.mq5, que será salvo na pasta terminal_data_folder\MQL5\Experts.
Os parâmetros de entrada padrão do Expert Advisor gerado são:
//--- entradas para 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 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 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 limiar:
- 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, 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 conta ao definir os valores de limiar. Por causa disso, o ThresholdOpen e o ThresholdClose devem ser definidos como 40=(0+80)/2 e 20=(0+40)/2.
