MetaTrader5
MQL5 Wizard: Sinais de Negócios com 3 Corvos Negros/3 Soldados Brancos + Estocástico para MetaTrader 5
O MQL5 Wizard é uma ferramenta incrível que permite criar Expert Advisors prontos, utilizando as classes da biblioteca padrão do terminal cliente (veja Criando Expert Advisors no MQL5 Wizard para mais detalhes). Com ele, você pode verificar suas ideias de trading rapidamente, bastando criar sua própria classe de sinais de trading. A estrutura dessa classe e um exemplo podem ser encontrados no artigo MQL5 Wizard: Como Criar um Módulo de Sinais de Trading. A ideia básica é a seguinte: a classe de sinais de trading é derivada de CExpertSignal. Em seguida, você precisa sobrepor 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 são discutidas muitas estratégias de trading. Aqui, vamos focar em padrões de velas 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 velas. Para confirmar os sinais de trading 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). Vamos considerar os sinais baseados no padrão de velas de reversão "3 Corvos Negros/3 Soldados Brancos", confirmados pelo Estocástico. O módulo de sinais de trading é baseado na classe CCandlePattern, que é um exemplo simples de seu uso para criação de sinais de trading com padrões de velas. 1. Padrões de Velas de Reversão: "3 Corvos Negros" e "3 Soldados Brancos" 1.1. 3 Corvos Negros Um padrão de velas de baixa que é usado para prever a reversão da tendência de alta atual. Este padrão consiste em três velas longas consecutivas que fecharam abaixo do dia anterior, com a abertura de cada sessão ocorrendo dentro do corpo da vela anterior. Figura 1. Padrão de velas '3 Corvos Negros' O reconhecimento do padrão "3 Corvos Negros" é implementado no método CheckPatternThreeBlackCrows da classe CCandlePattern: //+------------------------------------------------------------------+
//| Verifica a formação do padrão de velas "3 Corvos Negros" |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternThreeBlackCrows()
{
//--- 3 Corvos Negros
if((Open(3)-Close(3)>AvgBody(1)) && // (vela longa preta)
(Open(2)-Close(2)>AvgBody(1)) &&
(Open(1)-Close(1)>AvgBody(1)) &&
(MidPoint(2)<MidPoint(3)) && // (midpoints inferiores)
(MidPoint(1)<MidPoint(2)))
return(true);
//---
return(false);
} O método CheckCandlestickPattern(CANDLE_PATTERN_THREE_BLACK_CROWS) da classe CCandlePattern é utilizado para verificar a formação do padrão de velas "3 Corvos Negros". 1.2. Padrão de Velas "3 Soldados Brancos" Um padrão de velas de alta que é usado para prever a reversão da tendência de baixa atual. Este padrão consiste em três velas longas consecutivas que fecharam acima do dia anterior, com a abertura de cada sessão ocorrendo dentro do corpo da vela anterior. O padrão é válido enquanto a vela do segundo dia abrir na metade superior da faixa do primeiro dia. Ao final do segundo dia, deve fechar perto de sua máxima, deixando uma sombra superior muito pequena ou inexistente. O mesmo padrão é repetido no terceiro dia. Figura 2. Padrão de velas '3 Soldados Brancos' Aqui está o método para reconhecer o padrão "3 Soldados Brancos": //+------------------------------------------------------------------+
//| Verifica a formação do padrão de velas "3 Soldados Brancos" |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternThreeWhiteSoldiers()
{
//--- 3 Soldados Brancos
if((Close(3)-Open(3)>AvgBody(1)) && // vela longa branca
(Close(2)-Open(2)>AvgBody(1)) &&
(Close(1)-Open(1)>AvgBody(1)) &&
(MidPoint(2)>MidPoint(3)) && // midpoints superiores
(MidPoint(1)>MidPoint(2)))
return(true);
//---
return(false);
} O método CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS) da classe CCandlePattern é utilizado para verificar a formação do padrão de velas "3 Soldados Brancos". 2. Sinais de Trading, Confirmados pelo Indicador Estocástico Os sinais de trading para abrir posições longas ou curtas devem ser confirmados pelo oscilador Estocástico. A linha %D deve ser maior ou menor que o nível crítico correspondente (30 ou 70). O fechamento de uma posição aberta depende dos valores do indicador %D. Isso pode ser feito em dois casos: se a linha %D atingiu o nível crítico oposto (80 para a posição longa e 20 para a posição curta) se o sinal reverso não for confirmado (quando a linha %D atinge os seguintes níveis: 20 para a posição longa e 80 para a posição curta) Fig. 3. Padrão '3 Soldados Brancos', confirmado pelo indicador Estocástico Verificamos as condições de trading para entrada e saída em dois métodos: int CBC_WS_Stoch::LongCondition() - verifica as condições para abrir uma posição longa (retorna 80) e fechar a posição curta (retorna 40); int CBC_WS_Stoch::ShortCondition() - verifica as condições para abrir uma 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 "Três Soldados Brancos" deve ser confirmada pelo indicador Estocástico: StochSignal(1)<30 (o valor da linha de sinal do indicador Estocástico do último candle deve ser menor que 30). A posição curta deve ser fechada se a linha de sinal do Estocástico cruzar 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 CBC_WS_Stoch::LongCondition()
{
int result=0;
//--- idx pode ser usado para determinar o modo de trabalho do Expert Advisor
//--- idx=0 - neste caso, o EA verifica condições de trading a cada tick
//--- idx=1 - neste caso, o EA verifica condições de trading apenas em barras de notícias
int idx =StartIndex();
//--- verificando as condições para abrir posição longa
//--- formação do padrão 3 Soldados Brancos e linha de sinal<30
if (CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS) && (StochSignal(1)<30))
result=80;
//--- verificando as condições para fechar posição curta
//--- cruzamento da linha de sinal nos níveis de sobrecompra/sobrevenda (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 "Três Corvos Negros" deve ser confirmada pelo indicador Estocástico: StochSignal(1)>70 (o valor da linha de sinal do indicador Estocástico do último candle deve ser maior que 70). A posição longa deve ser fechada se a linha de sinal do Estocástico cruzar 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 CBC_WS_Stoch::ShortCondition()
{
int result=0;
//--- idx pode ser usado para determinar o modo de trabalho do Expert Advisor
//--- idx=0 - neste caso, o EA verifica condições de trading a cada tick
//--- idx=1 - neste caso, o EA verifica condições de trading apenas em barras de notícias
int idx =StartIndex();
//--- verificando as condições para abrir posição curta
//--- formação do padrão 3 Corvos Negros e linha de sinal>70
if (CheckCandlestickPattern(CANDLE_PATTERN_THREE_BLACK_CROWS) && (StochSignal(1)>70))
result=80;
//--- verificando as condições para fechar posição longa
//--- cruzamento da linha de sinal nos níveis de sobrecompra/sobrevenda (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 um Expert Advisor com o MQL5 Wizard A classe CBC_WS_Stoch não está inclusa nas classes da Biblioteca Padrão, para utilizá-la, é necessário baixar o arquivo acbc_ws_stoch.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á-lo 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 Depois disso, precisamos selecionar os módulos de sinais de trading usados. Fig. 6. Propriedades de sinal do Expert Advisor Neste caso, utilizamos apenas um módulo de sinais de trading. Adicionando o módulo "Sinais baseados em 3 Corvos Negros/3 Soldados Brancos confirmados pelo Estocástico": Fig. 7. Propriedades de sinal do Expert Advisor Módulo de sinais de trading 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 Sobre as propriedades de gestão de dinheiro, utilizaremos "Trading com volume fixo": Fig. 10. Propriedades de gestão de dinheiro do Expert Advisor Ao pressionar o botão "Finalizar", obteremos o código do Expert Advisor gerado, localizado em Expert_ABC_WS_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 o sinal principal
input int Signal_ThresholdOpen =10; // Valor do limiar do sinal para abrir [0...100]
input int Signal_ThresholdClose =10; // Valor do 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 o sinal principal
input int Signal_ThresholdOpen =40; // Valor do limiar do sinal para abrir [0...100]
input int Signal_ThresholdClose =20; // Valor do 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 abertura e fechamento de posições. No código dos métodos LongCondition() e ShortCondition() da classe de sinais de trading, 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 trading. 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 trading, então precisamos levar esse fato em consideração ao definir os valores de limiar. Por conta disso, 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 de Backtesting Vamos considerar o backtesting do Expert Advisor em dados históricos (EURUSD H1, período de teste: 2010.01.01-2011.02.02, PeriodK=47, PeriodD=9, PeriodSlow=13, MA_period=5). Na criação do Expert Advisor, utilizamos o volume fixo (Trading Fixed Lot, 0.1), o algoritmo Trailing Stop não é utilizado (Trailing não utilizado). Fig. 11. Resultados do teste do Expert Advisor, baseado em 3 Corvos Negros/3 Soldados Brancos + Estocástico 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_abc_ws_stoch.mq5.
2011.02.16