English Русский 中文 Español Deutsch 日本語
preview
Recursos do Assistente MQL5 que você precisa conhecer (Parte 42): Oscilador ADX

Recursos do Assistente MQL5 que você precisa conhecer (Parte 42): Oscilador ADX

MetaTrader 5Sistemas de negociação |
41 0
Stephen Njuki
Stephen Njuki

Introdução

O indicador ADX é um oscilador que mede a força da tendência de um determinado título financeiro. Como nas partes anteriores, aqui também serão analisados diversos padrões apresentados por esse indicador no arquivo de classe de sinais personalizados para EAs, montados com o Assistente. Vamos examinar um modelo por vez, da mesma forma que fizemos nos artigos anteriores sobre RSI, Bandas de Bollinger e RSI, e depois finalizaremos com um teste que inclui todos os modelos para avaliar qual deles tem mais peso.

No entanto, antes disso, vamos concluir a análise do Parabolic SAR.


Divergência entre SAR e volume

Como já mencionado, o Parabolic SAR é usado principalmente para identificar possíveis pontos de reversão e acompanhar os níveis de stop-loss em mercados com tendência. São "possíveis pontos de reversão" porque, se o preço os ultrapassa, o indicador inverte sua posição, colocando os pontos no extremo oposto da faixa de máximas e mínimas. Assim, os pontos gerados no gráfico de preços são níveis potenciais de reversão da ação do preço. Esses pontos seguem o preço, seja abaixo (em uma tendência de alta), seja acima (em uma tendência de baixa), o que permite que os traders acompanhem essas reversões.

A divergência de volumes ocorre quando o preço e o volume se movimentam em direções opostas. Para traders de forex, os dados de "volumes" não são um conceito prático, considerando sua fragmentação entre diferentes corretoras e plataformas. Um indicador de compromisso é a faixa de preços ou a volatilidade. Dessa forma, um movimento de preço em qualquer direção acompanhado de queda na volatilidade pode servir como sinal de continuação.

Por exemplo, se o Parabolic SAR inverte de um ponto inferior do preço para um superior (indicando um sinal de venda) e isso é acompanhado de uma diminuição na faixa das barras de preço, isso pode ser interpretado como um sinal fraco de venda e, na verdade, como um prenúncio de continuação da tendência anterior de compra. Da mesma forma, quando o preço atinge um ponto superior do SAR (acima do preço em uma tendência de baixa) e observa-se uma divergência de volatilidade (diminuição da faixa da barra de preço), isso sinaliza uma possível continuação ou fortalecimento da tendência de baixa. No código, essa lógica se apresenta da seguinte forma:

//+------------------------------------------------------------------+
//| Check for Pattern 7.                                             |
//+------------------------------------------------------------------+
bool CSignalSAR::IsPattern_7(ENUM_POSITION_TYPE T)
{  m_sar.Refresh(-1);
   m_sar_alt.Refresh(-1);
   if(T == POSITION_TYPE_BUY && Base(StartIndex() + 1) < Low(StartIndex() + 1) && Base(StartIndex()) > High(StartIndex()))
   {  return(Range(StartIndex()) < Range(StartIndex() + 1) && Range(StartIndex() + 1) < Range(StartIndex() + 2));
   }
   else if(T == POSITION_TYPE_SELL && Base(StartIndex() + 1) > High(StartIndex() + 1) && Base(StartIndex()) < Low(StartIndex()))
   {  return(Range(StartIndex()) < Range(StartIndex() + 1) && Range(StartIndex() + 1) < Range(StartIndex() + 2));
   }
   return(false);
}

É interessante notar que, com base na nossa fonte acima, agora estamos focando em uma tendência anterior mais ampla e não utilizamos o sinal da mesma forma simples que em modelos como o primeiro (modelo zero). Na essência, este é um sinal contra a tendência, já que buscamos padrões de continuação durante um fraco movimento de reversão. Essa reversão "fraca" é confirmada pela queda da faixa de preço da barra por mais de 3 barras. Esse número pode ser ajustado, mas manteremos esse valor para fins de teste.

Por outro lado, se o preço atinge qualquer um dos níveis limite do SAR com aumento da volatilidade, isso deve ser considerado um sinal de confirmação da reversão do SAR. Esse sinal, que também se baseia na tese da divergência de volume, será basicamente semelhante ao padrão 0, que analisamos neste artigo sobre o SAR, e também representa uma verificação do aumento da faixa de preços. Esse padrão específico não foi implementado no código nem testado, mas, como sempre, o leitor pode explorá-lo por conta própria.

Além disso, com esse padrão, os traders podem usar a divergência de volume em conjunto com o Parabolic SAR para fazer ajustes estratégicos nos níveis de stop-loss. Retornando à nossa primeira configuração de divergência de volume mencionada anteriormente, onde buscamos reversões fracas que indicam forte continuação, esses sinais implicam em uma pausa na tendência e podem indicar níveis importantes de suporte ou resistência. Ao identificá-los por meio de um fraco sinal de reversão do SAR e queda na volatilidade, os traders podem posicionar ou ajustar seus níveis de stop-loss nas posições abertas a favor da tendência dominante, colocando-os um pouco acima dessas zonas, se a posição for de venda, ou um pouco abaixo, se for de compra.

O Parabolic SAR pode gerar muitos sinais falsos em mercados instáveis, portanto, em teoria, a verificação de divergência de volume pode ser útil. Em especial, nos casos de aumento de volatilidade, isso pode ajudar a evitar entradas prematuras no mercado, já que a volatilidade crescente ao romper os marcadores do SAR muitas vezes indica um impulso de tendência significativo. O indicador pode ser combinado com outras ferramentas.

Essas combinações poderiam ser mais apropriadas para indicadores osciladores como o RSI e, como só implementamos no código a primeira variação da divergência de volume no SAR, que confirma a continuação e não a reversão, o leitor terá que implementar essas verificações adicionais de indicadores nos momentos de reversão. O teste com o padrão 7 para o par de moedas EURUSD no ano de 2022, em time frame diário, nos fornece os seguintes resultados:

sar_r7

O número inteiro do padrão em formato de bit que usamos para o padrão 7 é 0x80, o que corresponde ao valor decimal e ao número inteiro de entrada 128. Depois de configurado, o EA executa operações apenas utilizando o padrão 7.


SAR invertido em time frame maior

O Parabolic SAR em um time frame maior pode ser muito útil para fornecer uma perspectiva mais ampla da tendência e ajudar a filtrar o ruído causado por falsos sinais de reversão, que são comuns em time frames menores. Se o SAR em um gráfico semanal sinaliza uma forte tendência de alta, um trader que utiliza o gráfico de 4 horas pode priorizar posições longas e ignorar sinais de venda no time frame inferior por considerá-los ruídos ou recuos de curto prazo.

A coincidência de sinais em dois time frames realmente representa um sinal ainda mais forte. Se o time frame de 4 horas estiver em alta e o de 15 minutos indicar uma reversão, com o SAR tocando o limite inferior da faixa de preços, esse ponto específico pode representar não apenas um sinal forte, mas também uma entrada "mais agressiva". Existem também estratégias que utilizam operações contra a tendência, mas essas podem ser arriscadas, já que o ditado "a tendência é sua amiga" tem servido bem a muitos traders. Apoiar-se na confirmação do SAR em múltiplos time frames pode ajudar a evitar entradas arriscadas e pouco confiáveis contra a tendência.

O SAR serve não apenas como um sinal de entrada, mas também como um indicador de saída. Utilizando os EAs montados com o Assistente e suas classes associadas, que usam limites de abertura e fechamento, estamos mais bem preparados para a implementação prática sem necessidade de código adicional. O uso do código incluído ao final do artigo e a montagem do EA com base nele são abordados aqui e aqui. Os arquivos com extensão MQ5 estão incluídos apenas para mostrar como o arquivo final ficará após a execução do Assistente, bem como para fazer referência correta a todos os arquivos necessários que devem estar presentes na montagem do EA. Dessa forma, as verificações em múltiplos time frames tornam as saídas mais precisas, o que, em teoria, deve proporcionar melhor desempenho. 

Traders também podem utilizar os níveis do SAR em um time frame maior para definir níveis de stop-loss em posições abertas em time frames menores. Essa abordagem garante que o stop seja colocado em um nível significativo, o que reduz a chance de fechamento prematuro por conta da volatilidade de curto prazo. As tendências do SAR em time frames maiores podem apontar para tendências de mercado mais longas, enquanto os time frames menores servem para identificar os pontos de entrada e aproveitar esses movimentos maiores. Em MQL5, o padrão é implementado da seguinte forma:

//+------------------------------------------------------------------+
//| Check for Pattern 8.                                             |
//+------------------------------------------------------------------+
bool CSignalSAR::IsPattern_8(ENUM_POSITION_TYPE T)
{  m_sar.Refresh(-1);
   m_sar_alt.Refresh(-1);
   if(T == POSITION_TYPE_BUY && Base(StartIndex() + 1) > High(StartIndex() + 1) && Base(StartIndex()) < Low(StartIndex()))
   {  return(Alt(StartIndex()) < LowAlt(StartIndex()));
   }
   else if(T == POSITION_TYPE_SELL && Base(StartIndex() + 1) < Low(StartIndex() + 1) && Base(StartIndex()) > High(StartIndex()))
   {  return(Alt(StartIndex()) > HighAlt(StartIndex()));
   }
   return(false);
}

Executamos os testes com configurações semelhantes às indicadas anteriormente, utilizando o padrão 7, mas empregando o time frame semanal como alternativo, e obtemos os seguintes resultados:

sar_r8

Usamos a bitmap de entrada 256 para representar o nono padrão (8). Dessa forma, o SAR de time frame maior ajuda os traders a enxergar um contexto de mercado mais amplo no qual os sinais de time frame menor estão operando. Essa visão contextual ajuda a evitar excesso de operações ou reações a sinais menores que não estão em sintonia com uma tendência mais forte.


Cruzamento entre SAR e RSI

Como destacado em um artigo recente desta série, o RSI é um oscilador que mede a velocidade e a variação dos movimentos de preço, geralmente usado para detectar condições de sobrecompra e sobrevenda. Ele opera numa escala de 0 a 100, onde valores acima de 70 indicam sobrecompra e abaixo de 30 indicam sobrevenda. A combinação com o SAR pode ajudar a identificar tendências.

O Parabolic SAR é eficaz na identificação da tendência atual ou possíveis reversões, mas também pode gerar sinais falsos em mercados instáveis ou laterais. O RSI pode adicionar uma camada de análise de impulso, ajudando a confirmar se o mercado está de fato sobrecomprado ou sobrevendido, reforçando assim a força ou fraqueza da tendência identificada pelo SAR. Assim, quando o Parabolic SAR está abaixo do preço, sinalizando uma tendência de alta, e o RSI apresenta um valor próximo de 30 (indicando sobrevenda), isso fortalece o sinal de que a reversão de tendência provavelmente é real e com impulso ascendente.

No entanto, a combinação com o SAR pode ter um efeito ambíguo. Lembre-se de que o RSI é um indicador de impulso, e no mercado muitas vezes ocorrem picos em que o impulso ou a tendência estabelecida podem ser sustentáveis. Para esse fim, mesmo que por padrão, como mencionado acima, utilizemos o SAR para confirmar situações de "sobrecompra", muitas vezes ele também pode servir para confirmar o impulso predominante, especialmente se observarmos os padrões de reversão do indicador SAR e analisarmos os espaçamentos entre os pontos e os preços, ou as mudanças dos pontos ao longo de cada tendência. Essa lógica claramente representa uma alternativa ao par SAR-RSI. Não a implementei no código, apenas menciono aqui como um tema para reflexão. Em vez disso, usamos a abordagem "tradicional", que implementamos em MQL5 da seguinte forma:

//+------------------------------------------------------------------+
//| Check for Pattern 9.                                             |
//+------------------------------------------------------------------+
bool CSignalSAR::IsPattern_9(ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY && Base(StartIndex()) < Low(StartIndex()))
   {  return(RSI(StartIndex()) <= 30.0);
   }
   else if(T == POSITION_TYPE_SELL && Base(StartIndex()) > High(StartIndex()))
   {  return(RSI(StartIndex()) >= 70.0);
   }
   return(false);
}

O teste utilizando a lista apresentada acima não gera uma grande quantidade de operações, já que o gráfico diário tende a manter uma estabilidade, o que em geral favorece a segunda maneira pela qual poderíamos implementar essa combinação SAR-RSI, conforme indicado anteriormente. Os resultados dos testes estão apresentados abaixo:

sar_r9

Como acontece na análise dos indicadores por diferentes padrões, o relatório de teste otimizado contém uma amostragem de vários padrões com limites personalizáveis para cada padrão durante o período da nossa janela de teste. Resultados de testes semelhantes para o Parabolic SAR são mostrados abaixo:

sar_rALL

sar_cALL

Na minha opinião, usar múltiplos padrões, cada um com seu limite ideal, faz sentido desde que esses limites não sejam escolhidos ou otimizados com base em um período muito curto e sem a realização de testes de propagação para frente. O melhor é utilizá-los ou testá-los com valores predefinidos, baseando-se em uma avaliação do desempenho em condições reais de utilização prática.



Visão geral do ADX

O oscilador ADX mede a força de uma tendência específica utilizando 3 buffers. Dentre eles, DI+ e DI- podem ser vistos como indicadores separados, já que medem a força do preço em uma determinada direção. O DI+ (índice direcional positivo) mede a força do movimento de alta, enquanto o DI- (índice direcional negativo) expressa a força do movimento de queda dos preços. Assim, quando o DI+ está acima do DI-, isso indica que os compradores têm mais influência que os vendedores, e o inverso também é verdadeiro.

O buffer DI+ é derivado de movimentos históricos de preço que superam a máxima anterior. Isso significa que, se a máxima de hoje for maior que a de ontem, um valor positivo de DI+ será registrado. Por outro lado, o DI- é calculado a partir da parte da mínima atual que está abaixo da mínima do dia anterior, de modo que o valor no buffer para o DI- será registrado quando obtivermos uma mínima inferior à mínima do dia anterior, assumindo que o intervalo de tempo usado é diário.

As fórmulas para DI+ e DI- são as seguintes:

DI+ = (Movimento direcional positivo suavizado / Média de Amplitude de Variação) × 100

DI- = (Movimento direcional negativo suavizado / Média de Amplitude de Variação) × 100

A Média de Amplitude de Variação (Average True Range, ATR) é parte fundamental desses buffers, pois ela normaliza os valores do indicador levando em consideração a volatilidade predominante no momento. Isso acontece porque, como é de se esperar, em condições instáveis geralmente ocorrem grandes variações entre máximas e mínimas, então ao normalizar pelo intervalo verdadeiro (TR), apenas os grandes movimentos (apesar do TR) recebem peso adequado nos buffers do indicador. O TR é calculado selecionando o maior entre três valores: a máxima atual menos a mínima atual, a máxima atual menos o fechamento anterior, e o fechamento anterior menos a mínima atual. Os sinais desses buffers são então observados por seus cruzamentos, além de serem combinados com outros indicadores, como veremos a seguir.



Cruzamento do ADX com DI+ e DI-

Para o nosso primeiro padrão (0), um sinal de alta surge quando o DI+ cruza o DI- de baixo para cima. Isso indica que a pressão compradora é maior que a vendedora, o que pode sinalizar o início de uma tendência de alta. Em contrapartida, temos um sinal de baixa (DI- > DI+). Quando o DI- cruza o DI+ de baixo para cima, isso sinaliza que a pressão vendedora é mais forte que a compradora, o que pode significar o início de uma tendência de baixa. Implementamos esse padrão em MQL5 da seguinte forma:

//+------------------------------------------------------------------+
//| Check for Pattern 0.                                             |
//+------------------------------------------------------------------+
bool CSignalADX::IsPattern_0(ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY && BasePlus(X() + 1) < BaseMinus(X() + 1) && BasePlus(X()) > BaseMinus(X()))
   {  return(true);
   }
   else if(T == POSITION_TYPE_SELL && BasePlus(X() + 1) > BaseMinus(X() + 1) && BasePlus(X()) < BaseMinus(X()))
   {  return(true);
   }
   return(false);
}

O buffer principal do ADX mede a força da tendência, e não sua direção. Ele varia de 0 a 100, sendo que valores acima de 25 indicam uma tendência forte, e valores abaixo de 25 indicam um mercado fraco ou sem tendência. É importante reforçar que o ADX não mostra se a tendência é de alta ou de baixa, ele apenas mede a força da tendência. Quando o ADX está subindo e o DI+ está acima do DI-, isso indica uma forte tendência de alta. Se o ADX estiver subindo e o DI- estiver acima do DI+, isso aponta para uma forte tendência de baixa.

A otimização desse padrão para limites de abertura e fechamento, bem como níveis de take profit, no time frame diário do par EURCHF no ano de 2022 nos dá os seguintes resultados em uma das configurações "ideais":

adx_r1



ADX acima de 25 — entrada em tendência forte

Acima, analisamos dois buffers do DMI, nomeadamente o DI+ e o DI-. O terceiro buffer, o ADX, é o principal. Ele também fornece leituras numa faixa de 0 a 100. Inicialmente, ele é calculado por meio da determinação do índice direcional, o qual é obtido pela seguinte fórmula:

onde:

  • DX — índice direcional procurado

  • +DI — o já determinado movimento direcional positivo, cuja fórmula foi apresentada acima

  • -DI — o análogo negativo, cuja fórmula também foi mostrada acima

Depois de obtermos o índice direcional (DX), calcular o índice direcional médio envolve simplesmente aplicar uma média móvel exponencial sobre os últimos 14 valores do índice direcional. Alternativamente, pode-se usar um método de suavização que segue a fórmula abaixo:

onde:

  • n é igual a 14 ou a qualquer período de suavização apropriado definido no indicador ADX.

Implementamos isso em MQL5 da seguinte maneira:

//+------------------------------------------------------------------+
//| Check for Pattern 1.                                             |
//+------------------------------------------------------------------+
bool CSignalADX::IsPattern_1(ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY && Base(X()) > 25.0 && BasePlus(X()) > BaseMinus(X()))
   {  return(true);
   }
   else if(T == POSITION_TYPE_SELL && Base(X()) > 25.0 && BasePlus(X()) < BaseMinus(X()))
   {  return(true);
   }
   return(false);
}

Ao otimizar com configurações semelhantes ao padrão 0, onde nosso símbolo é EURCHF no time frame diário durante o ano de 2022, obtemos os seguintes resultados:

adx_r2


ADX cai abaixo de 25 – Fraqueza na tendência

O padrão 2 é a contraparte espelhada do padrão 1, rastreando os casos em que o buffer principal do ADX cai abaixo de 25 para operar contra a tendência atual, conforme indicado pela diferença entre DI+ e DI-. Assim, sempre que o ADX cai abaixo de 25 e o DI- está acima do DI+, isso é interpretado como um sinal de alta, pois indica enfraquecimento do impulso de baixa. Da mesma forma, se o cruzamento do ADX ocorrer quando o DI+ estiver acima do DI-, isso é um sinal precoce de tendência de baixa. Implementamos isso em MQL5 da seguinte maneira:

//+------------------------------------------------------------------+
//| Check for Pattern 2.                                             |
//+------------------------------------------------------------------+
bool CSignalADX::IsPattern_2(ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY && Base(X()+1) > 25.0 && Base(X()) < 25.0 && BasePlus(X()) < BaseMinus(X()))
   {  return(true);
   }
   else if(T == POSITION_TYPE_SELL && Base(X()+1) > 25.0 && Base(X()) < 25.0 && BasePlus(X()) > BaseMinus(X()))
   {  return(true);
   }
   return(false);
}

Os testes de otimização com configurações similares às dos padrões acima nos fornecem os seguintes resultados para o padrão 2:

adx_r3



Cruzamento do ADX com média móvel

Para o padrão 3, a média móvel aplicada não é uma média comum baseada em preços, mas sim um segundo buffer de valores de média móvel sobre o buffer principal do ADX. Ela pode ser usada como um buffer paralelo do ADX, e quando o ADX o cruza — da mesma forma como o preço cruza buffers de médias móveis em gráficos de preço — isso frequentemente gera um sinal forte. Lembre-se de que o ADX, por si só, é neutro quanto à direção; ele apenas indica a força do sinal predominante, seja ele de compra ou venda, por meio desse tipo de cruzamento. Implementamos isso no código da seguinte forma:

//+------------------------------------------------------------------+
//| Check for Pattern 3.                                             |
//+------------------------------------------------------------------+
bool CSignalADX::IsPattern_3(ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY && Base(X()+1) < BaseAverage(X()+1) && Base(X()) > BaseAverage(X()) && BasePlus(X()) > BaseMinus(X()))
   {  return(true);
   }
   else if(T == POSITION_TYPE_SELL && Base(X()+1) < BaseAverage(X()+1) && Base(X()) > BaseAverage(X()) && BasePlus(X()) < BaseMinus(X()))
   {  return(true);
   }
   return(false);
}

Abaixo estão os resultados dos testes com otimizações selecionadas usando configurações semelhantes às dos padrões anteriores:

adx_r4



Divergência entre ADX e preço

A divergência com o ADX baseia-se no movimento predominante do preço no gráfico principal do ativo. No entanto, essa "divergência" é um pouco peculiar, pois frequentemente observamos a queda do buffer principal do ADX mesmo durante uma tendência forte no gráfico de preços, em qualquer direção. Assim, uma divergência de alta será marcada pela queda do preço no gráfico principal ocorrendo ao mesmo tempo em que o ADX também cai no buffer principal do oscilador. Já uma divergência de baixa será caracterizada por uma tendência de alta no gráfico de preços acompanhada por uma queda no oscilador ADX. Implementamos isso em MQL5 da seguinte maneira:

//+------------------------------------------------------------------+
//| Check for Pattern 4.                                             |
//+------------------------------------------------------------------+
bool CSignalADX::IsPattern_4(ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY && Close(X()+2) > Close(X()+1) && Close(X()+1) > Close(X()) && Base(X()+2) > Base(X()+1) && Base(X()+1) > Base(X()) && Base(X()) <= 25)
   {  return(true);
   }
   else if(T == POSITION_TYPE_SELL && Close(X()+2) < Close(X()+1) && Close(X()+1) < Close(X()) && Base(X()+2) > Base(X()+1) && Base(X()+1) > Base(X()) && Base(X()) <= 25)
   {  return(true);
   }
   return(false);
}

O teste com algumas configurações ideais nos fornece os seguintes resultados:

adx_r5


Rompimento do ADX e da faixa

O padrão 5, assim como o padrão 4 acima, depende da ação do preço no gráfico do ativo para formar e confirmar seu sinal. No entanto, neste caso, esperamos rompimentos de preço após longos períodos de consolidação, acompanhados por saltos no ADX acima do valor-limite de 25. Um sinal de alta ocorre quando há um rompimento da resistência ao mesmo tempo em que o ADX sobe para além de 25. Da mesma forma, um sinal de baixa acontece quando o preço cai abaixo do nível de suporte, também acompanhado por uma elevação do ADX acima de 25. Implementamos isso em MQL5 da seguinte maneira:

//+------------------------------------------------------------------+
//| Check for Pattern 5.                                             |
//+------------------------------------------------------------------+
bool CSignalADX::IsPattern_5(ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY && ATRAverage(X()+1) > ATR(X()+1) && ATRAverage(X()) < ATR(X()) && ATR(X()) < High(X())-Low(X()) && Base(X()+1) < 25 && Base(X()) > 25 && Close(X()+1) < Close(X()))
   {  return(true);
   }
   else if(T == POSITION_TYPE_SELL && ATRAverage(X()+1) > ATR(X()+1) && ATRAverage(X()) < ATR(X()) && ATR(X()) < High(X())-Low(X()) && Base(X()+1) < 25 && Base(X()) > 25 && Close(X()+1) > Close(X()))
   {  return(true);
   }
   return(false);
}

Uma definição precisa de consolidações e rompimentos no código é um processo bastante trabalhoso, embora para traders que operam manualmente isso não represente nenhuma dificuldade. Nossa abordagem para resolver esse problema se baseará no uso do indicador ATR e na coleta de suas leituras ao longo de um período significativo, e então na comparação com a faixa das últimas barras de preço. Se o ATR permaneceu suprimido por um período razoável de tempo e ficou abaixo da faixa recente das barras de preço, isso pode sugerir a ocorrência de um rompimento. Naturalmente, isso é apenas uma observação aproximada, e estou certo de que podem ser feitas implementações mais refinadas, mas para os propósitos deste artigo, isso será suficiente! Os testes realizados com configurações semelhantes às dos padrões já discutidos acima nos fornecem os seguintes relatórios:

adx_r6

Apesar de nossa intenção de manter ambientes e configurações de teste semelhantes para todos os modelos, este modelo específico praticamente não gerou operações quando testado com o time frame diário. Por isso, foi feita uma exceção e utilizou-se o time frame de uma hora. Assim, os resultados apresentados acima foram obtidos com o time frame horário, e não diário como nas outras estratégias mencionadas.


Considerações finais

Aqui encerramos a análise do ADX. Há ainda três padrões que serão tratados junto com o próximo indicador. Analisamos o ADX com base em padrões. Isso foi possível porque a classe de sinais dos EAs montados com o Assistente permite isso, graças ao código da classe Expert Signal. As classes do Assistente, utilizadas na montagem dos EAs, fornecem uma ampla variedade de funções e métodos que eliminam a necessidade de escrever código do zero, especialmente na fase de estudo ou teste de ideias preliminares. Além do uso de padrões, nesta série ainda abordaremos outras áreas, como o uso de ordens pendentes, a configuração do fluxo de ordens ou da quantidade de posições simultâneas que podem ser abertas a qualquer momento, a aplicação de indicadores como o ATR para controlar os parâmetros de entrada em gaps de preço — não apenas para trailing stop, mas também para níveis iniciais de stop-loss e take profit — entre muitos outros temas. Espero que possamos explorar tudo isso e muito mais em algum momento futuro, mas por enquanto, vamos focar no essencial — os padrões e os indicadores tradicionais.

Traduzido do Inglês pela MetaQuotes Ltd.
Artigo original: https://www.mql5.com/en/articles/16085

Arquivos anexados |
SignalWZ_40.mqh (26.64 KB)
SignalWZ_42.mqh (23.87 KB)
wz_40.mq5 (8.39 KB)
wz_42.mq5 (8.39 KB)
Corpo em Connexus (Parte 4): Adicionando suporte ao corpo de requisições HTTP Corpo em Connexus (Parte 4): Adicionando suporte ao corpo de requisições HTTP
Neste artigo, abordamos o conceito de corpo nas requisições HTTP, que é necessário para o envio de dados como JSON e texto simples. Discutimos e explicamos como usá-lo corretamente junto com os cabeçalhos apropriados. Também introduzimos a classe ChttpBody, que faz parte da biblioteca Connexus e que irá simplificar o trabalho com o corpo das requisições.
Codificação ordinal de variáveis nominais Codificação ordinal de variáveis nominais
Neste artigo, discutiremos e demonstraremos como transformar variáveis nominais em formatos numéricos adequados para algoritmos de aprendizado de máquina, utilizando tanto Python quanto MQL5.
Ciência de dados e aprendizado de máquina (Parte 31): Aplicação de modelos CatBoost no trading Ciência de dados e aprendizado de máquina (Parte 31): Aplicação de modelos CatBoost no trading
Os modelos de inteligência artificial CatBoost ganharam enorme popularidade na comunidade de aprendizado de máquina graças à sua precisão nas previsões, eficiência e resistência a conjuntos de dados fragmentados e complexos. Este artigo trata de como usar esses modelos no mercado Forex.
Criação de um EA em MQL5 com base na estratégia PIRANHA utilizando Bandas de Bollinger Criação de um EA em MQL5 com base na estratégia PIRANHA utilizando Bandas de Bollinger
Neste artigo, criamos um EA (Expert Advisor) em MQL5 com base na estratégia PIRANHA, utilizando as Bandas de Bollinger para aumentar a eficiência da negociação. Discutimos os princípios-chave da estratégia, a implementação do código, bem como os métodos de teste e otimização. Esse conhecimento permitirá usar o EA com eficácia em seus cenários de trading.