MQL5 Wizard facilita a criação automática de Sistemas de Trading (veja MQL5 Wizard: Criando Sistemas de Trading sem Programação).
A classe CSignalCandles fornece sinais de negociação baseados em padrões de candlestick reversais. A estratégia é chamada de “Sinais baseados em padrões de candlestick reversais” ao criar um EA automaticamente no MQL5 Wizard.
A ideia do sistema é identificar os padrões de reversão utilizando o cálculo da vela composta. Os padrões de reversão são semelhantes aos padrões de “Martelo” e “Homem Pendurado” na análise de candlesticks japoneses, mas utilizam a vela composta em vez da vela única, não necessitando do pequeno corpo da vela composta para confirmar a reversão.
Parâmetros de entrada:
- Range: número máximo de barras usadas no cálculo da vela composta.
- Minimum: tamanho mínimo da vela composta (em pontos convencionais).
- ShadowBig e ShadowSmall: sombras (em unidades da vela composta).
- Limit, StopLoss e TakeProfit: preço de abertura, níveis de SL e TP, valores definidos em relação ao preço de fechamento da vela composta (unidades de vela composta).
- Expiration: tempo de expiração do pedido (em barras), usado na negociação com ordens pendentes (Limit!=0.0).
Os padrões de candlestick reversais são determinados da seguinte forma.
O sistema calcula os parâmetros da vela composta a partir da barra mais recente (com índice 1) até o número de barras definido pelo parâmetro de entrada Range. Se o tamanho da vela composta for maior que o valor especificado pelo parâmetro Minimum, ele verifica as condições de reversão da vela composta analisando suas sombras.
O poder dos ursos é caracterizado pelo tamanho da sombra superior da vela composta, enquanto o poder dos touros é caracterizado pelo tamanho da sombra inferior.
- Para confirmar a reversão da tendência de baixa (e o início da tendência de alta), é necessário que: o tamanho da sombra inferior (poder dos touros) seja maior que o valor definido pelo parâmetro ShadowBig. O tamanho da sombra superior (poder dos ursos) deve ser menor que o valor definido pelo parâmetro ShadowSmall.
- Para confirmar a reversão da tendência de alta (e o início da tendência de baixa), é necessário que: o tamanho da sombra superior (poder dos ursos) seja maior que o valor definido pelo parâmetro ShadowBig. O tamanho da sombra inferior (poder dos touros) deve ser menor que o valor definido pelo parâmetro ShadowSmall.
Além da estratégia de reversão, é possível utilizar estratégias de quebra especificando um valor negativo para o parâmetro Limit (veja MQL5 Wizard - Sinais de Negociação Baseados na Crossover de Duas EMAs com filtro de tempo intradiário).
Dependendo do Limit, três formas diferentes de entrada no mercado são utilizadas:
- Limit>0. Entrará em um movimento de recuo no preço, melhor que o preço de mercado (ordens pendentes de Buy Limit ou Sell Limit serão colocadas dependendo do sinal de negociação).
- Limit<0. Entrará na direção do movimento de preço (ordens pendentes de Buy Stop ou Sell Stop serão usadas dependendo do sinal de negociação).
- Limit=0. Negociará utilizando os preços de mercado.
Essa estratégia está implementada na classe CSignalCandles.

Figura 1. Sinais de negociação, baseados em padrões de candlestick reversais
Sinais de Negociação
Os sinais de negociação são implementados na classe CSignalCandles, com a função Candle() usada para a análise:
int Candle(int ind); // Retorna o número positivo/negativo dependendo do tipo da vela composta // o valor retornado é o número de barras (candles) na vela composta (começando de ind)
Várias velas (barras) podem ser usadas na construção da vela composta. O número mínimo de barras é definido pelo parâmetro Range. Em alguns casos, a vela composta pode ser formada com velas menores que Range (quando as condições de tamanho/sombras são satisfeitas). A função Candle retorna 0 se a vela composta não puder ser formada.
1. Abrir posição longa
Para abrir uma posição longa, é necessária uma vela composta bullish. A função verifica isso e retorna caso a vela composta ainda não tenha sido formada ou se a vela composta for bearish. Caso contrário, calcula o tamanho da vela composta (necessário para o cálculo do preço, SL e TP) e determina os níveis de preço para a ordem pendente.
Lembre-se de que o tipo de ordem pendente (Buy Limit ou Buy Stop) depende do sinal do parâmetro Limit (se Limit=0 ou |preço-ask|<nível de stops, será colocada uma ordem de compra a mercado; se Limit>0, será colocada uma ordem pendente de Buy Limit; se Limit<0, será colocada uma ordem pendente de Buy Stop).
//+------------------------------------------------------------------+ //| Verifica condições para abrir posição longa (compra) | //+------------------------------------------------------------------+ bool CSignalCandles::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration) { //--- verifica a formação da vela composta bullish if(Candle(1)<=0) return(false); //--- obtém o tamanho da vela composta double size=m_high_composite-m_low_composite; //--- calcula o preço da ordem pendente price=m_symbol.NormalizePrice(m_symbol.Ask()-m_limit*size); //--- calcula o preço do Stop Loss sl =m_symbol.NormalizePrice(price-m_stop_loss*size); //--- calcula o preço do Take Profit tp =m_symbol.NormalizePrice(price+m_take_profit*size); //--- define o tempo de expiração da ordem expiration+=m_expiration*PeriodSeconds(m_period); //--- as condições foram satisfeitas, retorna verdadeiro return(true); }
2. Fechar posição longa
Se a vela composta bearish tiver se formado, a posição longa é fechada.
//+------------------------------------------------------------------+ //| Verifica condições para fechar posição longa |//+------------------------------------------------------------------+ bool CSignalCandles::CheckCloseLong(double& price) { //--- verifica a formação da vela composta bearish if(Candle(1)>=0) return(false); //--- price=0.0; //--- as condições foram satisfeitas, retorna verdadeiro return(true); }
3. Abrir posição curta
A vela composta bearish deve ser formada para abrir a posição curta. Se a vela composta não estiver formada ou não for bearish, retorna. Caso contrário, determinamos seu tamanho e calculamos os níveis de preço da ordem pendente.
(o tipo de ordem depende do sinal do parâmetro Limit, consulte “Abrir posição longa”).
//+------------------------------------------------------------------+ //| Verifica condições para abrir posição curta (venda) | //+------------------------------------------------------------------+ bool CSignalCandles::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration) { //--- verifica a formação da vela composta bearish if(Candle(1)>=0) return(false); //--- obtém o tamanho da vela composta double size=m_high_composite-m_low_composite; //--- calcula o preço da ordem pendente price=m_symbol.NormalizePrice(m_symbol.Bid()+m_limit*size); //--- calcula o preço do Stop Loss sl =m_symbol.NormalizePrice(price+m_stop_loss*size); //--- calcula o preço do Take Profit tp =m_symbol.NormalizePrice(price-m_take_profit*size); //--- define o tempo de expiração da ordem expiration+=m_expiration*PeriodSeconds(m_period); //--- as condições foram satisfeitas, retorna verdadeiro return(true); }
4. Fechar posição curta
Se a vela composta bullish tiver se formado, a posição curta é fechada.
//+------------------------------------------------------------------+ //| Verifica condições para fechar posição curta |//+------------------------------------------------------------------+ bool CSignalCandles::CheckCloseShort(double& price) { //--- verifica a formação da vela composta bullish if(Candle(1)<=0) return(false); //--- price=0.0; //--- as condições foram satisfeitas, retorna verdadeiro return(true); }
Criando um Expert Advisor usando MQL5 Wizard
Para criar um robô de negociação baseado na estratégia, você precisa escolher as propriedades do sinal como “Sinais baseados em padrões de candlestick reversais” na opção “Criando Expert Advisors Prontos” do MQL5 Wizard:

Figura 2. Selecione "Sinais baseados em padrões de candlestick reversais" no MQL5 Wizard
Em seguida, você deve especificar o algoritmo de trailing stop necessário e o sistema de gerenciamento de risco e dinheiro. O código do Expert Advisor será criado automaticamente, você poderá compilá-lo e testá-lo no Strategy Tester do terminal cliente MetaTrader 5.
Resultados dos Testes
Vamos considerar o backtesting do Expert Advisor em dados históricos (EURUSD M15, período de teste: 1.1.2010-05.01.2011, Range=3, Minimum=50, ShadowBig=0.5, ShadowSmall=0.2, Limit=0, StopLoss=2.0, TakeProfit=1.0, Expiration=4).
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).

Figura 3. Resultados do teste do Expert Advisor com sinais de negociação, baseados em padrões de candlestick reversais
Anexos: O arquivo SignalCandles.mqh com a classe CSignalCandles deve ser colocado na pasta terminal_data_folder\MQL5\Include\Expert\Signal.
O arquivo expert_candles.mq5 contém o código do Expert Advisor, criado usando o MQL5 Wizard.
Publicações relacionadas
- 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
- MQL5 Wizard: Sinais de Negociação com 3 Corvos Negros/3 Soldados Brancos e MFI
- MQL5 Wizard: Sinais de Negócios com 3 Corvos Negros/3 Soldados Brancos + Estocástico para MetaTrader 5
- MQL5 Wizard: Sinais de Negociação com Estrelas da Manhã/Noite + RSI para MetaTrader 5