O MQL5 Wizard permite criar Expert Advisors prontos, utilizando as classes da biblioteca padrão que vem junto com o terminal cliente (confira Criando Expert Advisors no MQL5 Wizard para mais detalhes). Ele permite verificar rapidamente suas ideias de negociação; tudo que você precisa é 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 abordadas. Aqui, focaremos nos padrões de velas de reversão, confirmados pelo Stochastic, CCI, MFI e RSI.
A melhor abordagem é criar uma classe separada, derivada de CExpertSignal para verificar a formação de padrões de velas. Para confirmar os sinais de negociação gerados pelos padrões de velas, basta escrever a classe, derivada de CCandlePattern, e adicionar os recursos necessários (por exemplo, confirmação por osciladores).
Aqui, consideraremos os sinais baseados no padrão de velas de reversão "Bullish Harami/Bearish Harami", confirmado pelo indicador CCI. 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 velas.
1. Padrões de Velas de Reversão "Bullish Harami" e "Bearish Harami"
1.1. Bullish Harami
O padrão de reversão Bullish Harami se forma em uma tendência de baixa quando uma vela grande é seguida por uma vela menor cujo corpo está localizado dentro do intervalo vertical do corpo maior. Esse padrão indica que a tendência de queda pode estar se revertendo, sinalizando que é um bom momento para entrar em uma posição longa. A segunda vela é aberta com um gap para cima. Quanto menor a segunda vela (branca), maior a probabilidade da reversão.

Fig. 1. Padrão de velas "Bullish Harami"
O reconhecimento do padrão "Bullish Harami" é implementado no método CheckPatternBullishHarami() da classe CCandlePattern:
//+------------------------------------------------------------------+ //| Verifica a formação do padrão de velas "Bullish Harami" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBullishHarami() { //--- Bullish Harami if((Close(1)>Open(1)) && // a última barra concluída é bullish (dia branco) ((Open(2)-Close(2)>AvgBody(1)) && // a vela anterior é bearish, seu corpo é maior que a média (vela preta longa) ((Close(1)<Open(2)) && // o preço de fechamento da vela bullish é menor que o preço de abertura da vela bearish (Open(1)>Close(2))) && // o preço de abertura da vela bullish é maior que o preço de fechamento da vela bearish (MidPoint(2)<CloseAvg(2))) // tendência de baixa return(true); //--- return(false); }
A função CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) da classe CCandlePattern é utilizada para verificar a formação do padrão de velas "Bullish Harami".
1.2. Bearish Harami
O padrão de reversão Bearish Harami se forma em uma tendência de alta quando uma vela grande é seguida por uma vela menor cujo corpo está localizado dentro do intervalo vertical do corpo maior. Esse padrão indica que a tendência de alta pode estar se revertendo, sinalizando que é um bom momento para entrar em uma posição curta. A segunda vela é aberta com um gap para baixo.
Quanto menor a segunda vela (preta), maior a probabilidade da reversão.

Fig. 2. Padrão de velas "Bearish Harami"
O reconhecimento do padrão "Bearish Harami" é implementado no método CheckPatternBearishHarami() da classe CCandlePattern:
//+------------------------------------------------------------------+ //| Verifica a formação do padrão de velas "Bearish Harami" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBearishHarami() { //--- Bearish Harami if((Close(1)<Open(1)) && // a última barra concluída é bearish (dia preto) ((Close(2)-Open(2)>AvgBody(1)) && // a vela anterior é bullish, seu corpo é maior que a média (vela branca longa) ((Close(1)>Open(2)) && // o preço de fechamento da vela bearish é maior que o preço de abertura da vela bullish (Open(1)<Close(2))) && // o preço de abertura da vela bearish é menor que o preço de fechamento da vela bullish (MidPoint(2)>CloseAvg(2))) // tendência de alta return(true); //--- return(false); }
A função CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) da classe CCandlePattern é utilizada para verificar a formação do padrão de velas "Bearish Harami".
2. Sinais de Negociação, Confirmados pelo Indicador CCI
Os sinais de negociação para abrir posições longas ou curtas devem ser confirmados pelo indicador CCI. O valor do CCI deve ser maior/menor do que os níveis críticos (-50 para posição longa e 50 para posição curta).
O fechamento da posição aberta depende dos valores do CCI. Isso pode ser feito em 2 casos:
- se a linha do CCI atingiu o nível crítico oposto (80 para posição longa e -80 para posição curta)
- se o sinal reverso não for confirmado (quando o CCI atinge os seguintes níveis: -80 para posição longa e 80 para posição curta)

Fig. 3. Padrão Bullish Harami, confirmado pelo CCI
- int CBH_BH_CCI::LongCondition() - verifica as condições para abrir posição longa (retorna 80) e fechar a posição curta (retorna 40);
- int CBH_BH_CCI::ShortCondition() - verifica as condições para abrir posição curta (retorna 80) e fechar a posição longa (retorna 40).
2.1. Abrindo Posição Longa / Fechando Posição Curta
A formação do padrão "Bullish Harami" deve ser confirmada pelo indicador CCI: CCI(1)<-50 (o valor do CCI da última barra concluída deve ser menor que -50).
A posição curta deve ser fechada se o indicador CCI cruzou para cima o nível crítico -80 ou cruzou para baixo o nível crítico 80.
//+------------------------------------------------------------------+ //| Verifica as condições para entrada e saída do mercado | //| 1) Entrada no mercado (abrindo posição longa, resultado=80) | //| 2) Saída do mercado (fechando posição curta, resultado=40) | //+------------------------------------------------------------------+ int CBH_BH_CCI::LongCondition() { int result=0; //--- idx pode ser usado para determinar o modo de operação 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 as condições para abrir posição longa //--- formação do padrão Bullish Harami e CCI<-50 if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) && (CCI(1)<-50)) result=80; //--- verificando as condições para fechar posição curta //--- cruzamento da linha do sinal dos níveis de sobrecompra/sobrevenda (para baixo -80, para cima -80) if(((CCI(1)>-80) && (CCI(2)<-80)) || ((CCI(1)<80) && (CCI(2)>80))) result=40; //--- retornar resultado return(result); }
2.2. Abrindo Posição Curta / Fechando Posição Longa
A formação do padrão "Bearish Harami" deve ser confirmada pelo indicador CCI: CCI(1)>50 (o valor do CCI da última barra concluída deve ser maior que 50).
A posição longa deve ser fechada se o indicador CCI cruzou para baixo os níveis -80 ou 80.
//+------------------------------------------------------------------+ //| Verifica as condições para entrada e saída do mercado | //| 1) Entrada no mercado (abrindo posição curta, resultado=80) | //| 2) Saída do mercado (fechando posição longa, resultado=40) | //+------------------------------------------------------------------+ int CBH_BH_CCI::ShortCondition() { int result=0; //--- idx pode ser usado para determinar o modo de operação 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 as condições para abrir posição curta //--- formação do padrão Bearish Harami e CCI>50 if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) && (CCI(1)>50)) result=80; //--- verificando as condições para fechar posição longa //--- cruzamento da linha do sinal dos níveis de sobrecompra/sobrevenda (para baixo -80, para cima 80) if(((CCI(1)<80) && (CCI(2)>80)) || ((CCI(1)<-80) && (CCI(2)>-80))) result=40; //--- retornar resultado return(result); }
2.3. Criando Expert Advisor usando MQL5 Wizard
A classe CBH_BH_CCI não está incluída nas classes da Biblioteca Padrão. Para utilizá-la, é necessário baixar o arquivo acbh_bh_cci.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 candlepatterns.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 de sinal do Expert Advisor
No nosso caso, usamos apenas um módulo de sinais de negociação.
Adicionando o módulo de sinais baseado em Bullish Harami/Bearish Harami confirmado pelo CCI:

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
Em relação à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", obteremos o código do Expert Advisor gerado, localizado em Expert_ABH_BH_CCI.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 de entrada Signal_ThresholdOpen/Signal_ThresholdClose permitem especificar níveis 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 é usado, 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 esse fato em conta ao definir os valores de limite. Por causa disso, os ThresholdOpen e ThresholdClose devem ser configurados 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 de História
Vamos considerar o backtesting do Expert Advisor em dados históricos (EURUSD H1, período de teste: 2010.01.01-2011.03.16, PeriodCCI=11, MA_period=5).
Na criação do Expert Advisor, usamos o volume fixo (Negociação com Lote Fixo, 0.1), o algoritmo de Trailing Stop não é utilizado (Trailing não utilizado).

Fig. 11. Resultados do teste do Expert Advisor, baseado em Bullish Harami/Bearish Harami + CCI
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_abh_bh_cci.mq5.
Comentário 0