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 Cruzamento das Linhas do Indicador Jacaré (Alligator) - expert para MetaTrader 5
- Visualizações:
- 2857
- Avaliação:
- Publicado:
- 2014.01.15 08:29
- 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).
Vamos considerar os sinais de negociação baseados no indicador técnico Alligator, apresentado por B.Williams em "Negociando o Caos". A estratégia é chamada de "Sinais baseados no Alligator" (criando EA automaticamente através do Assistente MQL5).
O sistema é baseado em três médias móveis (lábios, dentes e linhas da mandíbula) e osciladores, calculados usando a diferença entre eles. Os sinais de negociação são gerados após o cruzamento das linhas do Alligator, dependendo da tendência e determinada no final dessas linhas. A tendência ascendente acontece quando a linha dos Lábios (com período mínimo) é a mais alta, seguida da linha dos Dentes, e por fim, a menor é a linha da Mandíbula. Semelhantemente e em direção oposta é o caso da tendência de baixa.
Os sinais de negociação:
- Abrir posição de compra: cruzamento das linhas do Alligator e aumento da distância entre elas, no caso da tendência de alta;
- Fechar posição de compra: cruzamento para baixo da linha dos lábios com a linha da mandíbula;
- Abrir posição de venda: cruzamento das linhas de Alligator e aumento da distância entre eles, no caso de a tendência de baixa;
- Fechar posição de venda: cruzamento para cima da linha dos lábios com a linha da mandíbula;
Esta estratégia é implementada na classe CSignalAlligator.
Figura 1. Sinais de negociação com base no indicador técnico Alligator
Sinais de Negociação
A estratégia de negociação é implementado no CSignalAlligator, tem alguns métodos protegidos para simplificar o acesso aos valores dos indicadores:
double Jaw(int ind) // retorna o valor da linha da Mandíbula da barra double Teeth(int ind) // retorna o valor da linha dos Dentes da barra double Lips(int ind) // retorna o valor da linha dos lábios da barra double LipsTeethDiff(int ind) // retorna a diferença entre os Lábios e as linha dos Dentes double TeethJawDiff(int ind) // retorna a diferença entre os Dentes e as linha da Mandíbula double LipsJawDiff(int ind) // retorna a diferença entre os Lábios e as linha de Mandíbula bool CheckCross(); // usado para verificar o cruzamento das linhas do Alligator
1. Abrir posição comprada
A verificação das condições de negociação tem algumas características, causadas pelo deslocamento das linhas dos Lábios, Dentes e Mandíbula.
Condições para abertura da posição comprada:
- O CheckCross é usado para determinar o cruzamento e aumento da diferença entre as linhas;
- LipsTeethDiff(-2)>=LipsTeethDiff(-1) e LipsTeethDiff(-1)>=LipsTeethDiff(0); verifica se há aumento da diferença entre as linhas dos Lábios e dos Dentes;
- LipsTeethDiff(0)>=0.0; a linha dos Lábios é maior do que a linha dos Dentes;
- TeethJawDiff(-2) >=TeethJawDiff(-1) and TeethJawDiff(-1) >=TeethJawDiff(0) ; verifica se há aumento da diferença entre as linhas dos Dentes e da mandíbula;
- TeethJawDiff(0) >=0.0; a linha dos Dentes é maior do que a linha da Mandíbula.
//+------------------------------------------------------------------+ //| verificar as condições para abertura da posição comprada | //+------------------------------------------------------------------+ bool CSignalAlligator::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration) { if(CheckCross()) return(false); //--- price=0.0; sl =0.0; tp =0.0; //--- if(LipsTeethDiff(-2)>=LipsTeethDiff(-1) && LipsTeethDiff(-1)>=LipsTeethDiff(0) && LipsTeethDiff(0)>=0.0 && TeethJawDiff(-2) >=TeethJawDiff(-1) && TeethJawDiff(-1) >=TeethJawDiff(0) && TeethJawDiff(0) >=0.0) m_crossed=true; //--- return(m_crossed); }
2. Fechar posição comprada
Condições para fechar posição comprada (note a mudança das linhas):
- LipsTeethDiff(-1)<0; a linha dos lábios barra seguinte (por causa do deslocamento) é menor do que a linha dos Dentes;
- LipsTeethDiff(0)>=0; a linha dos Lábios da barra atual é maior/igual a linha dos Dentes;
- LipsTeethDiff(1)>0; a linha dos lábios da barra anterior(concluída) é maior do que a linha dos Dentes.
//+------------------------------------------------------------------+ //| Verifica as condições para fechar posição comprada | //+------------------------------------------------------------------+ bool CSignalAlligator::CheckCloseLong(double& price) { price=0.0; //--- return(LipsTeethDiff(-1)<0 && LipsTeethDiff(0)>=0 && LipsTeethDiff(1)>0); }
3. Abertura da posição vendida
Condições para abertura da posição vendida:
- O CheckCross é usado para determinar o cruzamento e aumento da diferença entre as linhas;
- LipsTeethDiff(-2)<=LipsTeethDiff(-1) и LipsTeethDiff(-1)<=LipsTeethDiff(0); verifica se há aumento da diferença entre as linhas dos Lábios e dos Dentes;
- LipsTeethDiff(0)<=0.0; a linha dos Lábios da barra atual é menor do que a linha Dentes;
- TeethJawDiff(-2)<=TeethJawDiff(-1) и TeethJawDiff(-1)<=TeethJawDiff(0); verifica se há aumento da diferença entre as linhas dos Dentes e da Mandíbula;
- TeethJawDiff(0) <=0.0; a linha dos Dentes da barra atual é inferior a linha da Mandíbula;
//+------------------------------------------------------------------+ //| verifica as condições para abertura da posição vendida (sell) | //+------------------------------------------------------------------+ bool CSignalAlligator::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration) { if(CheckCross()) return(false); //--- price=0.0; sl =0.0; tp =0.0; //--- if(LipsTeethDiff(-2)<=LipsTeethDiff(-1) && LipsTeethDiff(-1)<=LipsTeethDiff(0) && LipsTeethDiff(0)<=0.0 && TeethJawDiff(-2) <=TeethJawDiff(-1) && TeethJawDiff(-1) <=TeethJawDiff(0) && TeethJawDiff(0) <=0.0) m_crossed=true; //--- return(m_crossed); }
4. Fechar posição vendida
Condições para fechar posição vendida:
- LipsTeethDiff(-1)>0; a linha dos Lábios da barra seguinte (por causa da deslocamento) é maior do que a linha dos Dentes;
- LipsTeethDiff(0)<=0; a linha dos Lábios da barra atual é menor/igual do que a linha dos Dentes;
- LipsTeethDiff(1)<0; a linha dos Lábios da barra anterior (concluída) é menor do que a linha dos Dentes.
//+------------------------------------------------------------------+ //| Verifica as condições para fechar posição vendida | //+------------------------------------------------------------------+ bool CSignalAlligator::CheckCloseShort(double& price) { price=0.0; //--- return(LipsTeethDiff(-1)>0 && LipsTeethDiff(0)<=0 && LipsTeethDiff(1)<0); }
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 no Alligator" na opção "Criando Expert Advisors Úteis" do Assistente MQL5:
Figura 2. Selecione "Sinais baseados no Alligator" 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 os resultados anteriores do Expert Advisor em dados históricos (EURUSD H1, período de testes: 1.1.2010-05.01.2011, JawPeriod=13, JawShift=8, TeethPeriod=8, TeethShift=5, LipsPeriod=5, LipsShift=3, MaMethod=2, Applied=5, CrossMeasure=5).
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 do Teste do Expert Advisor com sinais de negociação baseado no indicador Alligator
O lucro pode ser aumentado se você souber filtrar seus negócios e ter em conta as características do mercado, dependendo do tempo. A classe CSignalITF permitir que você adicione o filtro de tempo intraday. Os melhores momentos podem ser encontrados usando o Testador de Estratégias do terminal do cliente MetaTrader 5. Veja o exemplo no Assistente MQL5 - Sinais de Negociação Baseados no Cruzamento de Duas EMA com filtro de tempo intraday.
Anexos: O SignalAlligator.mqh com a classe CSignalAlligator fica localizado na pasta terminal_data_folder\MQL5\Include\Expert\Signal.
O expert_alligator.mq5 contém o código do Expert Advisor criado com o Assistente MQL5.
Traduzido do russo pela MetaQuotes Ltd.
Publicação original: https://www.mql5.com/ru/code/267

Versão melhorada do indicador ZigZag.

Nova versão do sript sChartsSynchroScroll.

Os Sinais de Negociação Baseados no cruzamento da linha Principal e das linhas de Sinais do indicador MACD (CSignalMACD da Biblioteca Padrão MQL5) serão utilizados aqui. O código do Expert Advisor com base nesta estratégia pode ser gerado automaticamente usando o Assistente MQL5.

O seno e o indicador tick.