O MQL5 Wizard permite a criação de Expert Advisors prontos, utilizando as classes da biblioteca padrão que vem junto com o terminal do cliente. Com isso, você pode testar suas ideias de negociação rapidamente, bastando 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 da CExpertSignal. Em seguida, é necessário sobrescrever os métodos virtuais LongCondition() e ShortCondition() com os seus próprios métodos.
Existe um livro chamado "Estratégias dos melhores traders" (em russo), onde muitas estratégias de negociação são discutidas. Aqui, vamos focar nos padrões de candlestick de reversão, confirmados pelos osciladores Estocástico, CCI, MFI e RSI.
A melhor maneira é 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 os recursos necessários (por exemplo, confirmação por osciladores).
Aqui, vamos considerar os sinais baseados nos padrões de reversão "Bullish/Bearish Meeting Lines", confirmados pelo indicador CCI (Índice de Canal de Commodities). O módulo de sinais de negociação é baseado na classe CCandlePattern, que fornece um exemplo simples de como utilizá-la para criar sinais de negociação com padrões de candlestick.
1. Padrões de Reversão "Meeting Lines"
1.1. Bullish Meeting Lines
O padrão consiste em dois candlesticks (um de baixa e um de alta) com preços de fechamento iguais (ou muito próximos). O corpo dos dois candlesticks deve ser maior que a média do comprimento do corpo.
O padrão "Bullish Meeting Lines" indica a reversão de uma tendência de baixa.

Fig. 1. Padrão "Bullish Meeting Lines"
O reconhecimento do padrão "Bullish Meeting Lines" é implementado no método CheckPatternCheckPatternBullishMeetingLines() da classe CCandlePattern:
//+--------------------------------------------------------------------+ //| Verifica a formação do padrão de candlestick "Bullish Meeting Lines" |//+--------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBullishMeetingLines() { //--- Bullish Meeting Lines if((Open(2)-Close(2)>AvgBody(1)) && // corpo longo preto ((Close(1)-Open(1))>AvgBody(1)) && // corpo longo branco (MathAbs(Close(1)-Close(2))<0.1*AvgBody(1))) // fechamento doji return(true); //--- return(false); }
O método CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_MEETING_LINES) da classe CCandlePattern é utilizado para verificar a formação do padrão "Bullish Meeting Lines".
1.2. Bearish Meeting Lines
O padrão consiste em dois candlesticks (um de alta e um de baixa) com preços de fechamento iguais (ou muito próximos). O corpo dos dois candlesticks deve ser maior que a média do comprimento do corpo.
O padrão "Bearish Meeting Lines" indica a reversão de uma tendência de alta.

Fig. 2. Padrão "Bearish Meeting Lines"
O reconhecimento do padrão "Bearish Meeting Lines" é implementado no método CheckPatternBearishMeetingLines() da classe CCandlePattern:
//+--------------------------------------------------------------------+ //| Verifica a formação do padrão de candlestick "Bearish Meeting Lines" |//+--------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBearishMeetingLines() { //--- Bearish Meeting Lines if((Close(2)-Open(2)>AvgBody(1)) && // corpo longo branco ((Open(1)-Close(1)>AvgBody(1)) && // corpo longo preto (MathAbs(Close(1)-Close(2))<0.1*AvgBody(1))) // fechamento doji return(true); //--- return(false); }
O método CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_MEETING_LINES) da classe CCandlePattern é utilizado para verificar a formação do padrão "Bearish Meeting Lines".
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 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. Esse fechamento pode ocorrer em 2 casos:
- se a linha do CCI atingir 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. O padrão "Bullish Meeting Lines", confirmado pelo indicador CCI
- int CML_CCI::LongCondition() - verifica as condições para abrir posição longa (retorna 80) e fechar a posição curta (retorna 40);
- int CML_CCI::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 Meeting Lines" deve ser confirmada pelo indicador CCI: CCI(1)<-50 (o valor do CCI da última barra completa 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 (abrir posição longa, resultado=80) | //| 2) Saída do mercado (fechar posição curta, resultado=40) | //+------------------------------------------------------------------+ int CML_CCI::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 barras de notícias int idx =StartIndex(); //--- verificando as condições para abrir posição longa //--- formação do padrão Bullish Meeting Lines e CCI<-50 if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_MEETING_LINES) && (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. Abrir Posição Curta/Fechar Posição Longa
A formação do padrão "Bearish Meeting Lines" deve ser confirmada pelo indicador CCI: CCI(1)>50 (o valor do CCI da última barra completa 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 (abrir posição curta, resultado=80) | //| 2) Saída do mercado (fechar posição longa, resultado=40) | //+------------------------------------------------------------------+ int CML_CCI::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 barras de notícias int idx =StartIndex(); //--- verificando as condições para abrir posição curta //--- formação do padrão Bearish Meeting Lines e CCI>50 if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_MEETING_LINES) && (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 um Expert Advisor usando o MQL5 Wizard
A classe CML_CCI não está incluída nas classes da Biblioteca Padrão; para usá-la, é necessário baixar o arquivo acml_cci.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ê poderá 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 o 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 utilizados.

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

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

Fig. 8. Propriedades dos sinais 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", obteremos o código do Expert Advisor gerado, que estará localizado em Expert_AML_CCI.mq5, salvo na pasta terminal_data_folder\MQL5\Experts\.
Os parâmetros de entrada padrão do Expert Advisor gerado são:
//--- entradas para o sinal principal input int Signal_ThresholdOpen =10; // Valor do limite de sinal para abrir [0...100] input int Signal_ThresholdClose =10; // Valor do limite 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 alterados para:
//--- entradas para o sinal principal input int Signal_ThresholdOpen =40; // Valor do limite de sinal para abrir [0...100] input int Signal_ThresholdClose =20; // Valor do limite 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 os 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 é 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". Neste caso, temos: módulo principal + 1 módulo de sinais de negociação, então precisamos levar isso em consideração ao definir os valores limite. Por causa disso, os 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 será feito apenas quando as condições de fechamento forem verdadeiras.
2.4. Resultados da Testagem de Históricos
Vamos considerar a testagem do Expert Advisor em dados históricos (EURUSD H1, período de teste: 2000.01.01-2011.03.16, PeriodCCI=18, MA_period=3).
Na criação do Expert Advisor, utilizamos o volume fixo (Negociação com Lote Fixo, 0.1), e o algoritmo Trailing Stop não foi utilizado (Trailing não utilizado).

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