Participe de nossa página de fãs
Coloque um link para ele, e permita que outras pessoas também o avaliem
Avalie seu funcionamento no terminal MetaTrader 5
Assistente MQL5 - Sinais de Negociação baseados no Padrões Candles de Reversão (Barras de preço) - expert para MetaTrader 5
- Visualizações:
- 7416
- Avaliação:
- Publicado:
- 2014.01.15 08:28
- Atualizado:
- 2016.11.22 07:33
- Precisa de um robô ou indicador baseado nesse código? Solicite-o no Freelance Ir para Freelance
O Assistente MQL5 oferece a criação automática de Expert Advisors (veja Assistente MQL5: Criando Expert Advisors sem Programar).
A classe CSignalCandles fornece sinais de negociação, com base em padrões candlestick de reversão. Esta estratégia é chamada de "Sinais baseados nos padrões candles de reversão" (criando o EA automaticamente através Assistente MQL5).
A ideia do sistema é identificar os padrões de reversão usando o cálculo do candle composto. Os padrões de reversão são semelhantes a análise dos castiçais Japonês nos padrões "Martelo" e o "Homem Enforcado". Mas é usado um candle composto em vez de um único candle e não precisa do pequeno corpo do candle composto para confirmar a inversão.
Os parâmetros de entrada:
- Range - número máximo de barras, utilizada no cálculo do candle composto.
- Minimum - tamanho mínimo do candle composto (em pontos convencionais).
- ShadowBig e ShadowSmall - sombras (em unidades compostas de candles).
- Limite, StopLoss e TakeProfit - preço de abertura, os níveis de SL e TP, os valores definidos em relação ao preço de fechamento do candle composto (unidades de candles compostos).
- Vencimento - tempo de expiração da ordem (em barras), usado na negociação com pedidos pendentes (Limit! = 0,0).
Os padrões candlestick de reversão são determinados a seguir.
O calculo dos parâmetros dos candles compostos iniciam a partir da última barra concluída (com índice 1)totalizando o número de barras definidas pelo parâmetro de entrada "Range". Se o tamanho do candle composto é maior que o valor especificado pelo parâmetro de entrada mínima, ele verifica as condições de reversão da vela composta pela análise de suas sombras.
A força baixista é caracterizada pelo tamanho da sombra alta em realaão ao candle composto, já a força altista é caracterizado pelo tamanho da sombra baixa.
- Para confirmar a reversão da tendência de baixa (e início da alta) é necessário o seguinte: o tamanho da sombra inferior ( força dos touros) deve ser maior que o valor definido pelo parâmetro de entrada ShadowBig. O tamanho da sombra alta (força dos ursos) tem de ser menor do que o valor definido pelo parâmetro de entrada ShadowSmall.
- Para confirmar a reversão da tendência de alta (e início da baixa), é necessário o seguinte: o tamanho da sombra superior (poder dos ursos) deve ser maior que o valor, definido pelo parâmetro de entrada ShadowBig. O tamanho da sombra baixa (poder dos touros) tem de ser menor do que o valor definido pelo parâmetro de entrada ShadowSmall.
Além da estratégia de reversão, é possível usar as estratégias de ruptura especificando o valor negativo para parâmetro de entrada Limit (veja "Assistente MQL5 - Sinais de comércio baseadas no Cruzamento de duas EMA com filtro de tempo intraday").
Dependendo do Limit, três formas diferentes de entrada no mercado são utilizadas:
- Limit>0. Entrará em movimento de volta sobre o preço, melhor do que o preço de mercado ( as ordens pendentes Buy Limit ou Sell Limit serão colocados dependendo sobre o sinal de negociação)
- Limit<0. Entrará na direção do movimento do preço (As ordens pendentes Buy Stop ou Sell Stop serão utilizados dependendo do sinal de negociação).
- Limit=0. A negociação com os preços de mercado.
Esta estratégia está implementada na classe CSignalCandles.
Figura 1. Sinais de negociação, com base em padrões candles de reversão
Sinais de Negociação
Os sinais de negociação são aplicados na classe CSignalCandles, existe uma função Candle() usada para a análise:
int Candle(int ind); // Retorna o número positivo/negativo, dependendo do tipo do candle composto // o valor retornado é o número de barras (candles) no candle compostao(a partir do ind)
Vários candles (barras) serão utilizados na construção do candle composto. O número mínimo de barras é definido pelo parâmetro Range. Em alguns casos, o candle composto pode ser formado com menos candles do que o estipulado no parametro Range (quando as condições de tamanho/sombras são satisfeitas). A função Candle retorna 0 se o candle composto não pode ser formado.
1. Abrir posição comprada
Para abrir posição comprada é necessária o candle composto de alta. A função verifica o candle e retorna se o candle composto ainda não está formado ainda ou o candle composto é de baixa. Caso contrário, é calculado o tamanho do candle composto (necessário para o cálculo do preço, SL e níveis de TP) e calcula os níveis de preços para a ordem pendente.
Note que o tipo de ordem pendente (Buy Limit ou Buy Stop) é vinculada sobre o sinal do parâmetro de entrada Limit (se Limite = 0 ou |price-ask|<stops level, colocará ordens para comprar no preço de mercado, se o Limite>0, colocará a ordem pendente Buy Limit, se Limit<0, será colocada a ordem pendente Buy Stop).
//+------------------------------------------------------------------+ //| Verifica as condições para abrir posição comprada (buy | //+------------------------------------------------------------------+ bool CSignalCandles::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration) { //--- Verificar a formação do candle composta de alta if(Candle(1)<=0) return(false); //--- obter o tamanho do candle composto double size=m_high_composite-m_low_composite; //--- calcular o preço de ordem pendente price=m_symbol.NormalizePrice(m_symbol.Ask()-m_limit*size); //--- calcular o preço do Stop Loss sl =m_symbol.NormalizePrice(price-m_stop_loss*size); //--- Calcular o preço do Take Profit tp =m_symbol.NormalizePrice(price+m_take_profit*size); //--- configurar o tempo para a expiração da ordem expiration+=m_expiration*PeriodSeconds(m_period); //--- se as condições forem satisfeitas, retorna verdadeira return(true); }
2. Fechar posição comprada
Se o candle composto de baixa foi formado, a posição comprada é fechada
//+------------------------------------------------------------------+ //| Verifica as condições para fechar posição comprada | //+------------------------------------------------------------------+ bool CSignalCandles::CheckCloseLong(double& price) { //--- Verificar a formação do candle composto de baixa if(Candle(1)>=0) return(false); //--- price=0.0; //--- se as condições forem satisfeitas, retorna verdadeiro return(true); }
3. Abertura da posição vendida
O candle composto de baixa deve se formar antes para abrir uma posição vendida. Se o candle composto não se formar, ou não é de baixa, retorna. caso contrário, podemos determinar seu tamanho e calcular os níveis de preços das ordens pendentes
O tipo de ordem depende do sinal do parâmetro de entrada Limit, consulte "posição aberta comprada"
//+------------------------------------------------------------------+ //| verifica as condições para abrir posição vendida (sell) | //+------------------------------------------------------------------+ bool CSignalCandles::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration) { //--- Verificar a formação do candle composto de baixa if(Candle(1)>=0) return(false); //--- obter o tamanho do candle composto double size=m_high_composite-m_low_composite; //--- calcular o preço das ordens pendentes price=m_symbol.NormalizePrice(m_symbol.Bid()+m_limit*size); //--- calcular o preço do Stop Loss sl =m_symbol.NormalizePrice(price+m_stop_loss*size); //--- calcular o preço do Take Profit tp =m_symbol.NormalizePrice(price-m_take_profit*size); //--- Definir o tempo de expiração da ordem expiration+=m_expiration*PeriodSeconds(m_period); //--- se as condições forem satisfeitas, retorna verdadeiro return(true); }
4. Fechar posição vendida
Se a candle composto de alta foi formado, a posição vendida é fechada.
//+------------------------------------------------------------------+ //| Verifica as condições para fechar a posição vendida | //+------------------------------------------------------------------+ bool CSignalCandles::CheckCloseShort(double& price) { //--- Verificar a formação do candle composto de alta if(Candle(1)<=0) return(false); //--- price=0.0; //--- se as condições forem satisfeitas, retorna verdadeiro return(true); }
Criando Expert Advisor usando Assistente MQL5
Para criar um robô de negociação com base nesta estratégia, você precisa escolher as propriedades de sinais como "Sinais baseados nos padrões candles de reversão" na opção do Assistente MQL5 "Criando Expert Advisors Pronto-para-Uso:"
Figura 2. Selecione "Sinais baseados nos padrões candles de reversão no Assistente MQL5
O próximo passo é especificar o algorítimo do trailing stop e o sistema de gerenciamento de risco do dinheiro. O código de Expert Advisor será criado automaticamente, você pode compilá-lo e testá-lo no Testador de Estratégias do terminal do cliente MetaTrader 5.
Resultados dos testes
Vamos considerar um teste do Expert Advisor em dados do histórico: (EURUSD M15, testing period: 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 de Expert Advisor usamos o volume fixo (Lote da Negociação Fixa, 0.1), o algorítimo do Trailing Stop não é usado (Trailing Stop não é usado).
Figura 3. Resultados dos Testes do Expert Advisor com sinais de negociação, com base nos padrões candles de reversão
Anexos: O SignalAlligator.mqh com a classe CSignalCandles estão localizados a pasta terminal_data_folder\MQL5\Include\Expert\Signal.
O expert_candles.mq5 contém o código do Expert Advisor criado no Assistente MQL5.
Traduzido do russo pela MetaQuotes Ltd.
Publicação original: https://www.mql5.com/ru/code/268
Este indicador permite-lhe executar o recálculo dos dados do indicador somente quando aparecer uma nova barra no gráfico.
Export Indicator's ValuesEste script exporta os valores do indicador para um arquivo CSV.
Nova versão do sript sChartsSynchroScroll.
ZigZag ProfissionalVersão melhorada do indicador ZigZag.