O MQL5 Wizard permite criar EAs (Expert Advisors) prontos baseados nas classes da biblioteca padrão que acompanham o terminal do cliente. Com isso, você pode verificar suas ideias de negociação de forma rápida, basta 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 básica é a seguinte: a classe de sinais de negociação é derivada de CExpertSignal. Você precisará sobrescrever os métodos virtuais LongCondition() e ShortCondition() com seus próprios métodos.
Um livro interessante é "Estratégias dos Melhores Traders" (em russo), que considera várias estratégias de negociação. Aqui, vamos focar em padrões de velas de reversão, confirmados pelos osciladores Stochastic, CCI, MFI e RSI.
O melhor caminho é criar uma classe separada, derivada de CExpertSignal para verificar a formação de padrões de velas. Para confirmação dos sinais de negociação gerados por esses padrões, basta escrever a classe derivada de CCandlePattern e adicionar as funcionalidades necessárias (como confirmação por osciladores).
Neste artigo, vamos considerar os sinais baseados no padrão de velas de reversão "Bullish Engulfing/Bearish Engulfing", confirmados pelo indicador Stochastic. 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 velas.
1. Padrões de Velas de Reversão: "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 preta é seguida por uma grande vela branca que eclipsa completamente a vela do dia anterior. As sombras (caudas) da vela pequena são curtas, permitindo que o corpo da vela grande cubra toda a vela do dia anterior.

Fig. 1. Padrão de vela "Bullish Engulfing"
O reconhecimento do padrão "Bullish Engulfing" é implementado no método CheckPatternBullishEngulfing() da classe CCandlePattern:
//+------------------------------------------------------------------+ //| Verifica a formação do padrão "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 (Close(1)>Open(2)) && // preço de fechamento da vela bullish é maior que a abertura da bearish (MidOpenClose(2)<CloseAvg(2)) && // tendência de baixa (Open(1)<Close(2))) // preço de abertura da vela bullish é menor que o fechamento da bearish return(true); //--- return(false); }
O método CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) da classe CCandlePattern é utilizado 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 preta que cobre completamente a vela do dia anterior. As sombras (caudas) da vela pequena são curtas, permitindo que o corpo da vela grande cubra toda a vela do dia anterior.

Fig. 2. Padrão de vela "Bearish Engulfing"
O reconhecimento do padrão "Bearish Engulfing" é implementado no método CheckPatternBearishEngulfing() da classe CCandlePattern:
//+------------------------------------------------------------------+ //| Verifica a formação do padrão "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 (Close(1)<Open(2)) && // preço de fechamento da vela bearish é menor que a abertura da bullish (MidOpenClose(2)>CloseAvg(2)) && // tendência de alta (Open(1)>Close(2))) // Preço de abertura da vela bearish é maior que o fechamento da bullish return(true); //--- return(false); }
O método CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) da classe CCandlePattern é utilizado para verificar a formação do padrão "Bearish Engulfing".
2. Sinais de Negociação Confirmados pelo Indicador Stochastic
Os sinais de negociação para abrir posição longa ou curta devem ser confirmados pelo oscilador Stochastic. A linha de sinal %D deve ser maior/menor que os níveis críticos correspondentes (30 ou 70).
O fechamento da posição aberta depende dos valores do indicador %D. Isso pode ocorrer em duas situações:
- se a linha %D atingir o nível crítico oposto (80 para posição longa e 20 para posição curta)
- se o sinal reverso não for confirmado (quando a linha %D atinge os níveis seguintes: 20 para posição longa e 80 para posição curta)

Fig. 3. Padrão "Bullish Engulfing", confirmado pelo indicador Stochastic
Verificação das condições de negociação para entrada e saída é implementada em dois métodos:
- int CBE_BE_Stoch::LongCondition() - verifica condições para abrir posição longa (retorna 80) e fechar a posição curta (retorna 40);
- int CBE_BE_Stoch::ShortCondition() - verifica 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 Stochastic: StochSignal(1)<30 (o valor da linha de sinal do indicador Stochastic da última barra completada deve ser menor que 30).
A posição curta deve ser fechada se a linha de sinal do indicador Stochastic cruzou para cima os níveis 20 ou 80.
//+------------------------------------------------------------------+ //| 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_Stoch::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 a cada tick //--- idx=1 - neste caso o EA verifica as condições de negociação apenas em barras de notícias int idx =StartIndex(); //--- verificando condições para abrir posição longa //--- formação do padrão Bullish Engulfing e linha de sinal<30 if (CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) && (StochSignal(1)<30)) result=80; //--- verificando condições para fechar posição curta //--- cruzamento da linha de sinal dos níveis sobrecomprado/vendido (para baixo 20, para cima 80) if((((StochSignal(1)>20) && (StochSignal(2)<20)) || ((StochSignal(1)>80) && (StochSignal(2)<80)))) 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 Stochastic: StochSignal(1)>70 (o valor da linha de sinal do indicador Stochastic da última barra completada deve ser maior que 70).
A posição longa deve ser fechada se a linha de sinal do indicador Stochastic cruzou para baixo os níveis 80 ou 20.
//+------------------------------------------------------------------+ //| 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_Stoch::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 a cada tick //--- idx=1 - neste caso o EA verifica as condições de negociação apenas em barras de notícias int idx =StartIndex(); //--- verificando condições para abrir posição curta //--- formação do padrão Bearish Engulfing e linha de sinal>70 if (CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) && (StochSignal(1)>70)) result=80; //--- verificando condições para fechar posição longa //--- cruzamento da linha de sinal dos níveis sobrecomprado/vendido (para baixo 80, para cima 20) if((((StochSignal(1)<80) && (StochSignal(2)>80)) || ((StochSignal(1)<20) && (StochSignal(2)>20)))) result=40; //--- retornar resultado return(result); }
2.3. Criando o Expert Advisor com o MQL5 Wizard
A classe CBE_BE_Stoch não está incluída nas classes da Biblioteca Padrão, para usá-la, é necessário baixar o arquivo acbe_be_stoch.mqh (ver anexos) e salvá-lo na pasta client_terminal_data\MQL5\Include\Expert\Signal\MySignals. O mesmo deve ser feito com o arquivo candlepatterns.mqh. Você pode utilizá-lo no MQL5 Wizard após reiniciar o MetaEditor.
Para criar um Expert Advisor, inicie o MQL5 Wizard:

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

Fig. 5. Propriedades gerais do Expert Advisor
Após isso, precisamos selecionar os módulos de sinais de negociação a serem usados.

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

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 iremos usar "Trailing Stop não utilizado":

Fig. 9. Propriedades de trailing do Expert Advisor
Quanto às propriedades de gestão de dinheiro, iremos usar "Negociação com volume fixo":

Fig. 10. Propriedades de gestão de dinheiro do Expert Advisor
Ao pressionar o botão "Finalizar", receberemos o código do Expert Advisor gerado, localizado em Expert_ABE_BE_Stoch.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 alterados para:
//--- 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 de entrada Signal_ThresholdOpen/Signal_ThresholdClose permitem especificar os níveis de limitação para 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 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 em conta esse fato ao definir os valores dos limites. 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 Backtesting Histórico
Vamos considerar o backtesting do Expert Advisor em dados históricos (EURUSD H1, período de teste: 2010.01.01-2011.03.04, PeriodK=47, PeriodD=9, PeriodSlow=13, MA_period=5).
Na criação do Expert Advisor, utilizamos o volume fixo (Negociação com Lote Fixo, 0.1), e o algoritmo de Trailing Stop não foi utilizado (Trailing não utilizado).

Fig. 11. Resultados do teste do Expert Advisor, baseado em Bullish/Bearish Engulfing + Stochastic
O melhor conjunto de parâmetros de entrada pode ser encontrado usando o Testador de Estratégia do terminal cliente MetaTrader 5.
O código do Expert Advisor, criado pelo MQL5 Wizard, está anexado em expert_abe_be_stoch.mq5.
Comentário 0