O MQL5 Wizard é uma ferramenta poderosa que permite criar Expert Advisors prontos, utilizando as classes da biblioteca padrão que acompanha o terminal cliente (veja Criando Expert Advisors Prontos no MQL5 Wizard para mais detalhes). Essa ferramenta permite verificar suas ideias de negociação rapidamente; tudo que você precisa fazer é criar sua própria classe de sinais de negociação. A estrutura dessa classe e um exemplo podem ser encontrados no artigo MQL5 Wizard: Como Criar um Módulo de Sinais de Negociação.
A ideia geral é 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.
Há um livro chamado "Estratégias dos melhores traders" (em russo), onde muitas estratégias de negociação são discutidas, e aqui vamos focar nos padrões de candlestick de reversão, confirmados pelo 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 candlestick. Para a confirmação dos sinais de negociação gerados pelos padrões de candlestick, basta escrever a classe, derivada de CCandlePattern e adicionar as características necessárias (por exemplo, confirmação por osciladores).
Aqui vamos considerar os sinais baseados no padrão de reversão "Bullish Engulfing/Bearish Engulfing", confirmados pelo indicador RSI. O módulo de sinais de negociação é baseado na classe CCandlePattern, que é um exemplo simples de seu uso para a criação de sinais de negociação com padrões de candlestick.
1. Padrões "Bullish Engulfing" e "Bearish Engulfing"
1.1. Bullish Engulfing
O padrão de reversão "Bullish Engulfing" se forma em uma tendência de baixa, quando uma pequena vela negra é seguida por uma grande vela branca que a eclipsa completamente. As sombras da pequena vela são curtas, permitindo que o corpo da grande vela cubra toda a vela do dia anterior.

Fig. 1. Padrão de candlestick 'Bullish Engulfing'
O reconhecimento do padrão "Bullish Engulfing" é implementado no 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)) && // vela anterior é bearish (Close(1)-Open(1)>AvgBody(1)) && // corpo da vela bullish é maior que a média do corpo (Close(1)>Open(2)) && // preço de fechamento da vela bullish é maior que o preço de abertura da vela bearish (MidOpenClose(2)<CloseAvg(2)) && // tendência de baixa (Open(1)<Close(2))) // preço de abertura da vela bullish é menor que o preço de fechamento da bearish return(true); //--- return(false); }
O método CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) da classe CCandlePattern é usado para verificar a formação do padrão "Bullish Engulfing".
1.2. Bearish Engulfing
O padrão de reversão "Bearish Engulfing" se forma em uma tendência de alta, quando uma pequena vela branca é seguida por uma grande vela negra que a eclipsa completamente. As sombras da pequena vela são curtas, permitindo que o corpo da grande vela cubra toda a vela do dia anterior.

Fig. 2. Padrão de candlestick 'Bearish Engulfing'
O reconhecimento do padrão "Bearish Engulfing" é realizado no 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)<Close(2)) && // vela anterior é bullish (Open(1)-Close(1)>AvgBody(1)) && // corpo da vela é maior que a média do corpo (Close(1)<Open(2)) && // preço de fechamento da vela bearish é menor que o preço de abertura da vela bullish (MidOpenClose(2)>CloseAvg(2)) && // tendência de alta (Open(1)>Close(2))) // Preço de abertura da vela bearish é maior que o preço de fechamento da bullish return(true); //--- return(false); }
O método CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) da classe CCandlePattern é usado para verificar a formação do padrão "Bearish Engulfing".
2. Sinais de Negociação Confirmados pelo Indicador RSI
Os sinais de negociação para abrir posições longas ou curtas devem ser confirmados pelo indicador RSI. O valor do RSI deve ser menor ou maior que os níveis críticos (40 para posição longa e 60 para posição curta).
O fechamento das posições abertas depende dos valores do RSI. Isso pode ser feito em 2 casos:
- se o RSI 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 RSI 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 RSI
- int CBE_BE_RSI::LongCondition() - verifica as condições para abrir posição longa (retorna 80) e fechar a posição curta (retorna 40);
- int CBE_BE_RSI::ShortCondition() - verifica as condições para abrir posição curta (retorna 80) e fechar a 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 RSI: RSI(1)<40 (o valor do RSI da última barra concluída deve ser menor que 40).
A posição curta deve ser fechada se o indicador RSI 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 CBE_BE_RSI::LongCondition() { int result=0; //--- idx pode ser usado para determinar o modo de trabalho do Expert Advisor //--- 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(); //--- verificando condições para abrir posição longa //--- formação do padrão Bullish Engulfing e RSI<30 if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) && (RSI(1)<40)) result=80; //--- verificando 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(((RSI(1)>30) && (RSI(2)<30)) || ((RSI(1)>70) && (RSI(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 RSI: RSI(1)>60 (o valor do RSI da última barra concluída deve ser maior que 60).
A posição longa deve ser fechada se o indicador RSI cruzou para baixo 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 CBE_BE_RSI::ShortCondition() { int result=0; //--- idx pode ser usado para determinar o modo de trabalho do Expert Advisor //--- 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(); //--- verificando condições para abrir posição curta //--- formação do padrão Bearish Engulfing e RSI>60 if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) && (RSI(1)>60)) result=80; //--- verificando condições para fechar posição longa //--- cruzamento da linha de sinal dos níveis de sobrecompra/sobrevenda (para baixo 70, para baixo 30) if(((RSI(1)<70) && (RSI(2)>70)) || ((RSI(1)<30) && (RSI(2)>30))) result=40; //--- retornar resultado return(result); }
2.3. Criando o Expert Advisor usando MQL5 Wizard
A classe CBE_BE_RSI não está incluída nas classes da Biblioteca Padrão. Para usá-la, é necessário baixar o arquivo acml_rsi.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:

Fig. 4. Criando Expert Advisor usando MQL5 Wizard
Vamos especificar o nome do Expert Advisor:

Fig. 5. Propriedades gerais do Expert Advisor
Depois disso, precisamos selecionar os módulos de sinais de negociação utilizados.

Fig. 6. Propriedades do sinal do Expert Advisor
Neste caso, usamos apenas um módulo de sinais de negociação.
Adicionando o módulo de sinais: Sinais baseados em Bullish Engulfing/Bearish Engulfing confirmados pelo RSI:

Fig. 7. Propriedades do sinal do Expert Advisor
Módulo de sinais de negociação adicionado:

Fig. 8. Propriedades do 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 "Negociando com volume fixo":

Fig. 10. Propriedades de gerenciamento de dinheiro do Expert Advisor
Ao pressionar o botão "Concluir", obteremos o código do Expert Advisor gerado, localizado em Expert_ABE_BE_RSI.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 de limiar de sinal para abrir [0...100] input int Signal_ThresholdClose =10; // Valor de limiar de 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 de sinal para abrir [0...100] input int Signal_ThresholdClose =20; // Valor de limiar de 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 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, definimos 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 um 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 conta ao definir os valores dos limiares. 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 só será feito quando as condições de fechamento forem verdadeiras.
2.4. Resultados de backtesting da história
Vamos considerar o backtesting do Expert Advisor em dados históricos (EURUSD H1, período de teste: 01/01/2010 a 04/03/2011, PeriodRSI=11, MA_period=5).
Na criação do Expert Advisor, usamos o volume fixo (Trading Fixed Lot, 0.1), e o algoritmo Trailing Stop não é utilizado (Trailing não utilizado).

Fig. 11. Resultados dos testes do Expert Advisor, baseado em Bullish Engulfing/Bearish Engulfing + RSI
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_abe_be_rsi.mq5.
Publicações relacionadas
- MQL5 Wizard: Sinais de Negócios com 3 Corvos Negros/3 Soldados Brancos + Estocástico para MetaTrader 5
- Baixe Todo o Histórico de Ticks de um Símbolo no MetaTrader 5
- Como Integrar Eventos de Alto Impacto do ForexFactory no Seu EA para MetaTrader 4
- Como Criar Sinais de Negociação com MQL5 Wizard Usando Estrelas da Manhã e da Noite + Estocástico
- MQL5 Wizard: Sinais de Negociação com Padrões Candlestick e RSI no MetaTrader 5