English Русский 中文 Español Deutsch 日本語 한국어 Français Italiano Türkçe
preview
Como desenvolver um sistema de negociação baseado no indicador Acumulação/Distribuição (AD)

Como desenvolver um sistema de negociação baseado no indicador Acumulação/Distribuição (AD)

MetaTrader 5Negociação | 7 setembro 2022, 10:05
523 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

Introdução

Nossa série de artigos se dedica em aprender detalhadamente os indicadores técnicos mais populares e aplicá-los na forma de estratégias simples. Os sistemas de negociação dessas estratégias são desenvolvidos usando a linguagem MQL5 e são executadas na plataforma de negociação MetaTrader 5. No artigo atual, nós aprenderemos sobre o Acumulação/Distribuição (AD), um novo indicador técnico baseado em volume que pode nos mostrar outra perspectiva sobre o instrumento. Nós abordaremos este indicador através dos seguintes tópicos:

  1. Definição do AD
  2. Estratégia do AD
  3. Esquema da estratégia do AD
  4. Sistema de negociação do AD
  5. Conclusão

Primeiro, nós aprenderemos em detalhes sobre esse novo indicador técnico e o que ele mede, além de como nós podemos usá-lo e calculá-lo manualmente para conhecer o principal conceito por trás dele. Então, vamos desenvolver um sistema de negociação baseado nele. Nós vamos aplicar este cálculo a um exemplo para entender melhor o seu conceito. Depois de aprender detalhadamente sobre os fundamentos do indicador AD, aprenderemos como nós podemos usá-lo em estratégias simples. Em seguida, nós desenvolvemos um esquema para cada estratégia mencionada para nos ajudar a escrever o código de cada estratégia e criar um sistema de negociação para elas. Depois de desenvolver todos os esquemas para todas as estratégias simples mencionadas, nós chegaremos à parte mais interessante deste artigo, pois aprenderemos como criar ou escrever nosso código em MQL5 para criar um sistema de negociação que pode ser executado na plataforma de negociação MetaTrader 5.

A essa altura, nós abordaremos o indicador AD em detalhes, aprendendo como usá-lo. Depois disso, nós criaremos um sistema de negociação para as estratégias simples mencionadas. Eu aconselho você a tentar aplicar o que aprendeu escrevendo os códigos mencionados sozinho, pois isso o ajudará a aprofundar sua compreensão, pois o objetivo principal deste artigo (assim como os outros desta série) é fornecer insights para programadores iniciantes sobre como programar ou desenvolver sistemas de negociação com base nos indicadores mais populares. Além disso, nós usaremos a linguagem MetaQuotes (MQL5) para escrever nossos códigos no MetaEditor embutido na MetaTrader 5. Se você quiser saber como instalar a MetaTrader 5 ou como usar o MetaEditor, leia o tópico Escrevendo o código em MQL5 no MetaEditor do meu artigo anterior.

Ressalva: Qualquer informação fornecida aqui é apenas para fins educacionais e sem fins comerciais ou de aconselhamento. As informações não garantem nenhum tipo de resultado. Se você optar por usar esses materiais em qualquer uma de suas contas de negociação, você fará isso por sua conta e risco, sendo o único responsável.

Agora, vamos passar por nossos tópicos para dar um novo passo em nossa jornada de aprendizado sobre negociação e MQL5.

Definição do AD

Aqui, eu vou falar sobre o indicador de Acumulação/Distribuição (AD) em detalhes e definir o que ele é, o que ele mede, como nós podemos calculá-lo e qual conceito está por trás dele. O indicador de linha AD foi desenvolvido por Marc Chaikin. Ele é um indicador baseado em volume, o que significa que o volume é usado em seu cálculo e nos fornece informações sobre o volume, o que é uma perspectiva importante na negociação em geral, pois mede o fluxo cumulativo de dinheiro que entra e sai do instrumento. Além disso, ele utiliza o volume para confirmar a tendência ou alertar sobre a reversão. Se quiser saber mais sobre a tendência, seus tipos e como podemos identificá-la, leia a subseção definição de tendência do artigo anterior.

Assim como qualquer indicador cumulativo, a linha AD é o total atual para o Volume do Fluxo de Dinheiro de cada período. Este fato fica muito claro durante o cálculo do indicador. Vamos ver como nós podemos calcular a linha AD através dos seguintes passos.

Existem três etapas para calcular a linha AD:

  1. Calculando o multiplicador do fluxo de dinheiro = ((fechamento-mínima)-(máxima-fechamento))/(máxima-mínima)
  2. Calculando o volume do fluxo de dinheiro = multiplicador do fluxo de dinheiro * volume do período
  3. Linha AD = valor da linha AD anterior + volume do fluxo de dinheiro atual

Agora nós precisamos considerar um exemplo para aplicar essas etapas para calcular a linha AD se tivermos os seguintes dados para um instrumento:

Dia Máxima Mínima Fechamento Volume
1 55 53 54 12000
2 56 54 55 10000
3 61 59 60 15000
4 67 64 65 20000
5 63 58 60 10000
6 58 52 55 5000
7 64 58 60 7000
8 52 47 50 7500
9 52 48 48 8000
10 50 48 49 5000
11 49 47 48 6000
12 48 47 47 7500
13 50 46 48 9000
14 52 45 47 10000
15 55 46 49 7000
16 53 45 47 7500
17 51 43 46 6000
18 50 42 44 5000
19 50 43 45 15000

Agora nós precisamos calcular a linha AD com base nos dados fornecidos anteriormente. O cálculo será o mesmo que o seguinte:

Primeiro, nós vamos calcular o multiplicador do fluxo de dinheiro = ((fechamento-mínima)-(máxima-fechamento))/(máxima-mínima), então vamos encontrá-lo da mesma forma que na figura a seguir:

Ad calc

Em segundo lugar, nós calcularemos o volume do fluxo de dinheiro = multiplicador do fluxo de dinheiro * volume do período, então nós podemos encontrá-lo igual à figura a seguir:

Ad calc1

Em terceiro lugar, nós calcularemos a linha AD = valor da linha AD anterior + volume de fluxo de dinheiro atual, então nós encontraremos o mesmo que a figura a seguir:

AD calc2

Agora que nós calculamos a linha AD manualmente, nós não precisamos fazer isso, mas nós fizemos isso para entender o conceito por trás do indicador AD. Atualmente, se nós quisermos ver o indicador AD, tudo o que nós precisamos fazer é escolhê-lo entre os indicadores disponíveis na plataforma MetaTrader 5.

Primeiro, ao abrir a MetaTrader 5, clicamos na guia Inserir --> Indicadores --> Volumes --> Acumulação/Distribuição

Inserção do AD

Após a escolha do indicador, a seguinte janela é aberta para os parâmetros do indicador AD:

Janela de inserção do AD

1. Tipo do volume: Tick ou Real.

2. Cor da linha do AD.

3. Tipos da linha do AD.

4. Espessura da linha do AD.

Depois de determinar o que você precisa usar e pressionar OK, a seguinte figura será mostrada para o indicador AD:

AD anexado

Agora, nós precisamos saber como nós podemos usar o indicador AD.


Estratégia do AD

Nesta seção, nós aprenderemos como nós podemos usar o indicador AD a nosso favor para aprimorar as nossas negociações por meio de estratégias simples. Eu espero que você possa obter mais ideias novas que possam ser benéficas para a sua negociação.

Você pode achar que essas estratégias precisam ser otimizadas. Isso é bom porque o objetivo principal aqui é compartilhar estratégias simples que podem ser úteis para nos permitir entender o conceito básico por trás do indicador AD e como nós podemos criar um sistema de negociação para eles por meio da MQL5. Portanto, você deve testar todas as estratégias antes de usá-las em sua conta real, pois ela pode precisar ser otimizada ou editada. Além disso, você pode editar a duração dos períodos utilizáveis para ser mais significativo ou adequado para a sua negociação.

Agora, nós veremos as estratégias simples que podem ser usadas pelo indicador AD.

  • Estratégia um: movimento simples do AD:

De acordo com essa estratégia, nós precisamos conhecer o movimento da linha AD – se está subindo ou descendo. Nós faremos uma comparação simples entre o valor do AD atual e o valor AD anterior. Se o valor atual do AD for maior que o anterior, a linha do AD está subindo e vice-versa. Se o valor atual for menor que o anterior, a linha do AD está diminuindo.

De forma simples, nós podemos dizer:

AD atual > AD anterior --> a linha do AD está subindo

AD atual < AD anterior --> a linha do AD está diminuindo

  • Estratégia dois: força simples do AD:

De acordo com essa estratégia, nós precisamos saber se o movimento atual da linha do AD é forte ou fraco e nós faremos isso por simples comparação entre o valor atual do AD e o valor máximo ou mínimo dos últimos dez valores do AD. Se o valor atual for maior que o valor máximo dos 10 valores anteriores do AD, então o valor do AD atual é forte e vice-versa. Se o valor atual for menor que o valor mínimo dos 10 valores anteriores do AD, o valor do AD atual é fraco.

De forma simples, ele será o mesmo que o seguinte:

AD atual > Valor máximo dos 10 valores anteriores de AD --> o valor atual de AD é forte

AD atual < valor mínimo dos 10 valores anteriores do AD --> o valor atual do AD é fraco

  • Estratégia três: AD simples - tendência de alta:

De acordo com essa estratégia, nós precisamos saber se o movimento de alta atual durante a tendência de alta é forte ou se há uma divergência de baixa em sua forma simples. A divergência de baixa é simplesmente quando nós vemos que o preço cria uma nova alta, mas o indicador não confirma esse movimento à medida que ele se move para baixo. Nós verificaremos isso comparando os dois últimos valores consecutivos do AD e os dois últimos valores consecutivos da máxima apenas para fins de simplicidade, mas você pode editar o período da avaliação para obter informações mais significativas. Portanto, nós precisamos aqui nos beneficiar do conceito de que é melhor ver o volume acompanhando a tendência: durante a tendência de alta, o volume aumenta com movimentos ascendentes e diminui em caso de correção.

Nós compararemos o valor atual do AD com o anterior e o preço da máxima atual com o preço da máxima anterior. Se o valor do AD atual for maior que o valor do AD anterior e a máxima atual for maior que a máxima anterior, haverá um forte movimento de alta durante a tendência de alta. Ou, se o valor do AD atual for menor que o valor do AD anterior e a máxima atual for maior que a máxima anterior, haverá uma divergência de baixa.

De forma simples, ele será o mesmo que o seguinte:

O AD atual > o AD anterior e a máxima atual > a máxima anterior --> Forte movimento de alta durante a tendência de alta

O AD atual < o AD anterior e a máxima atual > a máxima anterior --> divergência de baixa

  • Estratégia quatro: AD simples - tendência de baixa:

Esta estratégia será o oposto do AD simples - estratégia de tendência de alta, nós precisamos saber se o movimento de baixa atual durante a tendência de baixa é forte ou se há uma divergência de alta em sua forma simples. A divergência de alta é quando nós vemos que o preço cria uma nova baixa, mas o indicador não confirma esse movimento e se move mais alto. Nós verificaremos isso ao comparar com os dois últimos valores consecutivos do indicador AD e os dois últimos valores consecutivos da mínima. Se o valor do AD atual for menor que o valor do AD anterior e a baixa atual for menor que a baixa anterior, haverá um forte movimento de baixa durante a tendência de baixa. Ou, se o valor do AD atual for maior que o valor do AD anterior e a baixa atual for menor que a baixa anterior, haverá uma divergência de alta.

Ela será tão simples quanto o seguinte:

O AD atual < o AD anterior e a mínima atual < a mínima anterior --> Forte movimento de baixa durante a tendência de baixa

O AD atual > o AD anterior e a mínima atual < a mínima anterior --> divergência de alta 


Esquema da estratégia do AD

Agora, está na hora de organizar nossas etapas para criar o nosso sistema de negociação, porque nesta parte nós criaremos um esquema passo a passo para cada estratégia para nos ajudar a criar o nosso sistema de negociação sem problemas. Eu acredito que esta etapa seja muito importante em qualquer processo de criação de um sistema de negociação. Então, nós vamos desenhar um esquema para cada estratégia para saber o que nós precisamos fazer e eles serão os mesmos que a seguir.

Primeiro, nós precisamos projetar um esquema para uma estratégia simples que apresente o valor atual do AD como um comentário no gráfico para ser a base das próximas estratégias. Nós vamos chamá-lo de AD simples e tudo o que nós precisamos fazer deste sistema é exibir o valor atual do AD no gráfico como um comentário, a seguir vemos como fazer isso:

Esquema simples do AD 

Agora, nós precisamos projetar um esquema para cada estratégia mencionada.

  • Estratégia um: movimento simples do AD:

Para cada tick, nós precisamos que o sistema de negociação verifique os valores do AD atual e do anterior continuamente, e decida se o atual é maior que o anterior. Nós precisamos retornar um comentário no gráfico com a linha do AD crescente, o valor atual do AD e o valor anterior do AD. Cada valor estará em uma linha separada. Por outro lado, se o valor atual for menor que o anterior, nós precisamos retornar um comentário no gráfico com a linha do AD em declínio, o valor atual do AD e valor anterior do AD. Cada valor está em uma linha separada e a seguir se encontra o esquema para criar este sistema de negociação:

Esquema simples do movimento do AD

  • Estratégia dois: força simples do AD:

De acordo com essa estratégia, nós precisamos projetar um sistema de negociação que possa verificar a cada tick os três valores de forma contínua. Os três valores são o valor atual do AD, o valor máximo dos últimos dez valores do AD e o valor mínimo dos últimos dez valores do AD. Se o valor do AD atual for maior que o valor máximo, nós precisamos que o sistema retorne a notificação apropriada, o valor atual do AD, valor do AD Max e valor do AD Min. Cada valor é definido em uma linha separada. Se o valor do AD atual estiver abaixo do valor mínimo, nós precisamos que o sistema retorne a notificação apropriada, o valor atual do AD, o valor do AD Max e valor do AD Min. Cada valor é definido em uma linha separada.

A seguir está o esquema para fazer isso:

Esquema simples da força do AD

  • Estratégia três: AD simples - tendência de alta:

Nós precisamos criar um sistema de negociação para esta estratégia que possa verificar quatro valores: o AD atual, o AD anterior, a máxima atual e a máxima anterior, e executá-lo a cada tick durante a tendência de alta. Então, nós precisamos que o sistema decida se o AD atual é maior que o AD anterior e se a máxima atual é maior que a máxima anterior. Nós precisamos que o sistema retorne os comentários no gráfico com um forte movimento de alta durante a tendência de alta, o AD atual, o AD anterior, a máxima atual e máxima anterior. Cada valor é definido em uma linha separada. Outro caso que nós precisamos sinalizar é se o AD atual for menor que o anterior e a máxima atual for maior que a máxima anterior. Nós precisamos que o sistema retorne a divergência de baixa, o AD atual, o AD anterior, a máxima atual e anterior e cada valor em uma linha separada.

A seguir está o esquema para criar este sistema de negociação:

Esquema simples de tendência de alta do AD

  • Estratégia quatro: AD simples - tendência de baixa:

Nós precisamos criar um sistema de negociação para esta estratégia que possa verificar quatro valores: o AD atual, o AD anterior, a mínima atual e a mínima anterior, e realizar isso a cada tick durante a tendência de baixa. Então, nós precisamos que o sistema decida se o AD atual é menor que o AD anterior e se a mínima atual é menor que a mínima anterior. Nós precisamos que o sistema retorne os comentários no gráfico com um forte movimento de baixa durante a tendência de baixa, o AD atual, o AD anterior, a mínima atual e a mínima anterior para cada valor em uma linha separada. Outro caso que nós precisamos sinalizar é se o AD atual for maior que o anterior e a mínima atual for menor que a mínima anterior. Nós precisamos que o sistema retorne um comentário com a divergência de alta, o AD atual, o AD anterior, a mínima atual e anterior e cada valor em uma linha separada.

A seguir está o esquema para criar este sistema de negociação:

Esquema simples da tendência de baixa do AD


Sistema de negociação da estratégia do AD

Nesta seção, nós aprenderemos como criar um sistema de negociação depois de entender e projetar o que nós precisamos fazer. Nós começaremos com a criação de um sistema AD simples, retornando apenas o valor atual do AD para ser a base de nossas estratégias. A seguir é como desenvolvê-lo:

  • Criamos uma matriz para o AD usando a função "double" para representar o valor em uma parte fracionária.
double ADArray[];
  • Ordenamos a matriz dos dados atuais usando a função ArraySetAsSeries.
ArraySetAsSeries(ADArray,true);
  • Definimos o AD usando a função iAD após criar uma variável inteira de ADDef. A função iAD retorna o manipulador do indicador de Acumulação/Distribuição e seus parâmetros são (símbolo, período e volume aplicado).
int ADDef=iAD(_Symbol,_Period,VOLUME_TICK);
  • Preenchemos o ADArray usando a função CopyBuffer para retornar a contagem dos dados copiados e os seus parâmetros são (manipulador do indicador, número do buffer, hora de início, hora de fim e buffer).
CopyBuffer(ADDef,0,0,3,ADArray);
  • Calculamos o valor atual do AD usando a função NormalizeDouble que retorna um valor de tipo double depois de criar uma variável inteira para o ADValue. 
int ADValue=NormalizeDouble(ADArray[0],5);
  • Criamos um comentário no gráfico usando a função Comment.
Comment("AD Value is: ",ADValue);

A seguir se encontra o código completo do AD simples:

//+------------------------------------------------------------------+
//|                                                    Simple AD.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {
   //create an array for AD
   double ADArray[];
   
   //sorting the array from the current data
   ArraySetAsSeries(ADArray,true);
   
   //defining AD
   int ADDef=iAD(_Symbol,_Period,VOLUME_TICK);
   
   //filling the ADArray with ADDef
   CopyBuffer(ADDef,0,0,3,ADArray);
   
   //calculating current AD value
   int ADValue=NormalizeDouble(ADArray[0],5);
   
   //creating a comment with AD value
   Comment("AD Value is: ",ADValue);  
  }
//+------------------------------------------------------------------+

Depois de compilar este código, nós podemos encontrá-lo na pasta Expert Advisors da janela do Navegador:

AD Nav

Nós podemos executá-lo ao arrastar e soltar o EA no gráfico. A seguinte janela irá aparecer:

Janela simples do AD

Após clicar em OK, ele será anexado ao gráfico conforme mostrado abaixo:

AD simples anexado

A seguir está um exemplo do comentário gerado de acordo com este EA de teste:

Sinal de teste do AD simples

Se nós precisarmos garantir que o EA gerará o mesmo valor que o indicador da MetaTrader 5 original, nós podemos inserir o indicador e anexar o EA simultaneamente. Nós podemos ver que são iguais:

AD Simples - Mesmo sinal

  • Estratégia um: movimento simples do AD:

Segue o código completo para criar um EA que pode ser executado e gerar os sinais desejados de acordo com esta estratégia:

//+------------------------------------------------------------------+
//|                                           Simple AD movement.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {
   //create array for AD
   double ADArray[];
   
   //sorting array from the current data
   ArraySetAsSeries(ADArray,true);
   
   //defining AD
   int ADDef=iAD(_Symbol,_Period,VOLUME_TICK);
   
   //filling the ADArray with ADDef
   CopyBuffer(ADDef,0,0,3,ADArray);
   
   //calculating current AD and previous values
   int ADCurrrentValue=NormalizeDouble(ADArray[0],5);
   int ADPrevValue=NormalizeDouble(ADArray[1],5);
   
   //Comparing two values and giving signal
   //Rising AD
   if(ADCurrrentValue>ADPrevValue)
   {
      Comment("AD line is rising","\n","AD current value is: ",ADCurrrentValue,
      "\n","AD previous value is: ",ADPrevValue);
   }
   
   //Declining AD
   if(ADCurrrentValue<ADPrevValue)
   {
      Comment("AD line is declining","\n","AD current value is: ",ADCurrrentValue,
      "\n","AD previous value is: ",ADPrevValue);
   }  
  }
//+------------------------------------------------------------------+

O código anterior é diferente do código base e as seguir estão as diferenças:

  • Calcular dois valores do AD atual e anterior:
int ADCurrrentValue=NormalizeDouble(ADArray[0],5);
int ADPrevValue=NormalizeDouble(ADArray[1],5);
  • Definir as condições e gerar os comentários de acordo com esta estratégia:
    • Linha ascendente do AD:
if(ADCurrrentValue>ADPrevValue)
{
 Comment("AD line is rising","\n","AD current value is: ",ADCurrrentValue,
 "\n","AD previous value is: ",ADPrevValue);
}
    • Linha do AD em declínio:
if(ADCurrrentValue<ADPrevValue)
{
 Comment("AD line is declining","\n","AD current value is: ",ADCurrrentValue,
 "\n","AD previous value is: ",ADPrevValue);
} 

Depois de compilar este código, nós podemos encontrar o EA na janela do Navegador:

AD Nav 2

Ao clicar duas vezes sobre ele, nós podemos encontrar a seguinte janela:

Janela do movimento do AD simples

Após pressionar OK, ele será anexado ao gráfico:

Movimento do AD simples anexado

A seguir está um exemplo dos sinais gerados com a apresentação da janela de dados dos dados atuais e anteriores:

Linha ascendente do AD,

Dados atuais: 

Movimento do AD simples - AD ascendente - atual 

Dados anteriores:

Movimento do AD simples - AD ascendente - anterior

Declínio do AD,

Dados atuais:

Movimento do AD simples - AD em declínio - atual

Dados anteriores:

 Movimento do AD simples - AD em declínio - anterior

  • Estratégia dois: força simples do AD:

A seguir está o código completo para criar um EA para executar a nossa estratégia de negociação:

//+------------------------------------------------------------------+
//|                                           Simple AD strength.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
void OnTick()
  {
   //Create array for AD
   double ADArray[];
   
   //sorting the array from the current data
   ArraySetAsSeries(ADArray,true);
  
   //defining AD
   int ADDef=iAD(_Symbol,_Period,VOLUME_TICK);
   
   //filling the ADArray with ADDef
   CopyBuffer(ADDef,0,0,10,ADArray);
 
   //calculating current AD and previous values
   int ADCurrrentValue=NormalizeDouble(ADArray[0],5);
  
   //Defining Max and Min values from the last 10 AD values
   int ADMax =ArrayMaximum(ADArray,1,10);
   int ADMin =ArrayMinimum(ADArray,1,10);
   
   //Calculating Max and Min values
   int ADMaxValue=ADArray[ADMax];
   int ADMinValue=ADArray[ADMin];

   //Comparing two values and giving signal
   //AD current is strong
   if(ADCurrrentValue>ADMaxValue)
   {
      Comment("AD Current value is strong","\n","AD current value is: ,",ADCurrrentValue,
   "\n","AD Max is: ",ADMaxValue,"\n","AD Min is: ",ADMinValue);
   }
   
   //AD current is weak
   if(ADCurrrentValue<ADMinValue)
   {
      Comment("AD Current value is weak","\n","AD current value is: ,",ADCurrrentValue,
   "\n","AD Max is: ",ADMaxValue,"\n","AD Min is: ",ADMinValue);
   }
  }
//+------------------------------------------------------------------+

O código anterior tem muitas diferenças em relação à estratégia e o que nós precisamos que o EA faça, a seguir está um esclarecimento dessas diferenças:

  • Definimos os valores das máximas e mínimas do AD usando as funções ArrayMaximum e ArrayMinimum após a criação das variáveis inteiras de ADMaxValue e ADMinValue. O ArrayMaximum retorna um índice de um elemento encontrado considerando a matriz serial e procura o maior elemento, enquanto os seus parâmetros são a matriz numérica, o índice a ser inicializado e o número de elementos a serem procurados. O ArrayMinimum é o mesmo que o ArrayMaximum, mas ele procura o elemento mais baixo.
int ADMax =ArrayMaximum(ADArray,1,10);
int ADMin =ArrayMinimum(ADArray,1,10);
  • Calculamos o ADMaxValue e o ADMinValue depois de criar as variáveis inteiras para eles:
int ADMaxValue=ADArray[ADMax];
int ADMinValue=ADArray[ADMin];
  • Definimos as condições da estratégia e os comentários com base em cada condição,
    • Valor forte do AD:
if(ADCurrrentValue>ADMaxValue)
{
 Comment("AD Current value is strong","\n","AD current value is: ,",ADCurrrentValue,
 "\n","AD Max is: ",ADMaxValue,"\n","AD Min is: ",ADMinValue);
}
    • Valor fraco do AD:
if(ADCurrrentValue<ADMinValue)
{
 Comment("AD Current value is weak","\n","AD current value is: ,",ADCurrrentValue,
 "\n","AD Max is: ",ADMaxValue,"\n","AD Min is: ",ADMinValue);
}

Após compilar este código, o EA estará disponível no Navegador:

AD Nav 3

 

Depois de arrastá-lo e soltá-lo no gráfico, sua janela aparecerá:

Janela da força do AD simples

Após pressionar OK, ele será anexado ao gráfico:

Força do AD simples anexada

A seguir está um exemplo de teste dos sinais gerados:

AD Forte:

Sinal de força do AD simples - forte

AD fraco:

Sinal de força do AD simples - fraco

  • Estratégia três: tendência de alta do AD simples:

Segue o código completo para criar esse tipo de estratégia:

//+------------------------------------------------------------------+
//|                                          Simple AD - uptrend.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {
   //Create two arrays for AD and price
   double ADArray[];
   MqlRates PriceArray[];
   
   //sorting the two arrays
   ArraySetAsSeries(ADArray,true);
   int Data=CopyRates(_Symbol,_Period,0,3,PriceArray);
   
   //defining AD
   int ADDef=iAD(_Symbol,_Period,VOLUME_TICK);
   
   //filling the ADArray with ADDef
   CopyBuffer(ADDef,0,0,3,ADArray);
   
   //calculating current AD and previous values
   int ADCurrrentValue=NormalizeDouble(ADArray[0],5);
   int ADPrevValue=NormalizeDouble(ADArray[1],5);
   
   //calculating current and previous highs
   double CurrentHighValue=NormalizeDouble(PriceArray[2].high,5);         
   double PrevHighValue=NormalizeDouble(PriceArray[1].high,5); 
   
   //Comparing two values and giving signal
   //Strong Up move
   if(ADCurrrentValue > ADPrevValue && CurrentHighValue>PrevHighValue)
   {
      Comment("Strong Up Move During The Uptrend","\n","AD current value is: ",ADCurrrentValue,
      "\n","AD previous value is: ",ADPrevValue,
      "\n","Current high value is: ",CurrentHighValue,
      "\n","Previous high value is: ",PrevHighValue);    
   }   
   
   //in case of divergence
   if(ADCurrrentValue < ADPrevValue && CurrentHighValue>PrevHighValue)
   {
      Comment("Bearish Divergence","\n","AD current value is: ",ADCurrrentValue,
      "\n","AD previous value is: ",ADPrevValue,
      "\n","Current low value is: ",CurrentHighValue,
      "\n","Previous low value is: ",PrevHighValue);      
   }   
  }
//+------------------------------------------------------------------+

Diferenças neste código:

  • Criamos duas matrizes: um para o AD usando a função 'double' e o outro para o preço usando a função MqlRates que armazena as informações sobre os preços.
double ADArray[];
MqlRates PriceArray[];
  • Ordenamos duas matrizes, um para o AD usando a função ArraySetAsSeries e outro para o preço usando a função CopyRates para obter os dados históricos da estrutura MqlRates após a criação de uma variável inteira para a Data.
ArraySetAsSeries(ADArray,true);
int Data=CopyRates(_Symbol,_Period,0,3,PriceArray);
  • Definimos o AD, preenchemos a matriz do AD:
int ADDef=iAD(_Symbol,_Period,VOLUME_TICK);

CopyBuffer(ADDef,0,0,3,ADArray);
  • Calculamos o AD atual, o AD anterior, a máxima atual e a máxima anterior:
int ADCurrrentValue=NormalizeDouble(ADArray[0],5);
int ADPrevValue=NormalizeDouble(ADArray[1],5);

double CurrentHighValue=NormalizeDouble(PriceArray[2].high,5);         
double PrevHighValue=NormalizeDouble(PriceArray[1].high,5); 
  • Definimos as condições da estratégia e os comentários desejados:
    • Movimento forte:
if(ADCurrrentValue > ADPrevValue && CurrentHighValue>PrevHighValue)
{
 Comment("Strong Up Move During The Uptrend","\n","AD current value is: ",ADCurrrentValue,
 "\n","AD previous value is: ",ADPrevValue,
 "\n","Current high value is: ",CurrentHighValue,
 "\n","Previous high value is: ",PrevHighValue);    
} 
    • Divergência de baixa:
if(ADCurrrentValue < ADPrevValue && CurrentHighValue>PrevHighValue)
{
 Comment("Bearish Divergence","\n","AD current value is: ",ADCurrrentValue,
 "\n","AD previous value is: ",ADPrevValue,
 "\n","Current low value is: ",CurrentHighValue,
 "\n","Previous low value is: ",PrevHighValue);      
} 

Depois de compilar este código, nós podemos encontrá-lo na janela do Navegador entre as pastas dos Expert Advisors:

AD Nav 4

Sua janela aparecerá ao clicar duas vezes para executá-lo:

Janela de tendência de alta do AD simples

Clicando em OK para anexá-lo ao gráfico:

Tendência de alta do AD simples anexada

A seguir é um exemplo dos sinais gerados com uma janela de dados de valores atuais e anteriores:

Movimento forte,

Dados atuais:

 Tendência de alta do AD simples - sinal forte do movimento para cima - atual

Dados anteriores:

Tendência de alta AD simples - sinal forte do movimento para cima - anterior

Divergência de baixa,

Dados atuais:

Tendência de alta do AD simples - sinal de baixa - atual

Dados anteriores:

Tendência de alta do AD simples - sinal de baixa - anterior

  • Estratégia quatro: AD simples - tendência de baixa:

Segue o código completo para criar esse tipo de estratégia:

//+------------------------------------------------------------------+
//|                                        Simple AD - downtrend.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {
   //creating a string variable for signal
   string signal="";
   
   //Create two arrays for AD and price
   double ADArray[];
   MqlRates PriceArray[];
   
   //sorting the two arrays
   ArraySetAsSeries(ADArray,true);
   int Data=CopyRates(_Symbol,_Period,0,3,PriceArray);
   
   //defining AD
   int ADDef=iAD(_Symbol,_Period,VOLUME_TICK);
   
   //filling the ADArray with ADDef
   CopyBuffer(ADDef,0,0,3,ADArray);
   
   //calculating current AD and previous values
   int ADCurrrentValue=NormalizeDouble(ADArray[0],5);
   int ADPrevValue=NormalizeDouble(ADArray[1],5);
   
   double CurrentLowValue=NormalizeDouble(PriceArray[2].low,5);         
   double PrevLowValue=NormalizeDouble(PriceArray[1].low,5); 
   
   //Comparing two values and giving signal
   //Strong down move
   if(ADCurrrentValue < ADPrevValue && CurrentLowValue<PrevLowValue)
   {
      Comment("Strong Down Move During The Downtrend","\n","AD current value is: ",ADCurrrentValue,
      "\n","AD previous value is: ",ADPrevValue,
      "\n","Current low value is: ",CurrentLowValue,
      "\n","Previous low value is: ",PrevLowValue);      
   }
   
   //in case of divergence
   if(ADCurrrentValue > ADPrevValue && CurrentLowValue<PrevLowValue)
   {
      Comment("Bullish Divergence","\n","AD current value is: ",ADCurrrentValue,
      "\n","AD previous value is: ",ADPrevValue,
      "\n","Current low value is: ",CurrentLowValue,
      "\n","Previous low value is: ",PrevLowValue);      
   }  
  }
//+------------------------------------------------------------------+

As diferenças neste código são as mesmas:

  • Definir as condições desta estratégia e os comentários necessários de acordo com esta estratégia:
    • Movimento forte para baixo:
if(ADCurrrentValue < ADPrevValue && CurrentLowValue<PrevLowValue)
{
 Comment("Strong Down Move During The Downtrend","\n","AD current value is: ",ADCurrrentValue,
 "\n","AD previous value is: ",ADPrevValue,
 "\n","Current low value is: ",CurrentLowValue,
 "\n","Previous low value is: ",PrevLowValue);      
}
    • Divergência de alta:
if(ADCurrrentValue > ADPrevValue && CurrentLowValue<PrevLowValue)
{
 Comment("Bullish Divergence","\n","AD current value is: ",ADCurrrentValue,
 "\n","AD previous value is: ",ADPrevValue,
 "\n","Current low value is: ",CurrentLowValue,
 "\n","Previous low value is: ",PrevLowValue);      
} 

Depois de compilar este código, nós podemos encontrar o EA na janela do Navegador:

 AD Nav 5

Depois de arrastá-lo e soltá-lo no gráfico, sua janela aparecerá:

Janela de tendência de baixa simples do AD

Clicamos em OK para anexar o EA ao gráfico:

Tendência de baixa AD simples anexada

A seguir está um exemplo dos sinais gerados com a janela de dados dos valores atuais e anteriores de acordo com esta estratégia,

Movimento forte para baixo,

Dados atuais:

Tendência de baixa do AD simples - sinal forte do movimento de baixa - atual

Dados anteriores:

Tendência de baixa do AD simples - sinal forte do movimento de baixo - anterior

Divergência de alta,

Dados atuais:

Tendência de baixa do AD simples - sinal de divergência de alta - atual

Dados anteriores:

Tendência de baixa do AD simples - sinal de divergência de alta - anterior\


Conclusão

No artigo atual, eu abordei o tópico do indicador de Acumulação/Distribuição (AD), que é um dos indicadores baseados em volume. Nós aprendemos o que é o indicador AD, o que ele mede e como nós podemos calculá-lo manualmente para aprender o conceito por trás dele. nós descobrimos como nós podemos usar o indicador AD em estratégias simples. Essas estratégias são: movimento do AD simples, força do AD simples, AD simples - tendência de alta e AD simples - tendência de baixa. Em seguida, nós projetamos um esquema para criar um sistema de negociação para cada uma das estratégias. Depois disso, nós aprendemos como implementar um sistema de negociação através da criação de um EA em MQL5 para cada estratégia e executá-las através da plataforma de negociação MetaTrader 5. Vimos também os exemplos dos sinais gerados para cada estratégia. A plataforma nos permite automatizar essas estratégias para a geração dos sinais. Este é um recurso magnífico, já que o computador negocia para nós ou, pelo menos, nos fornece "insights" claros, precisos e rápidos para nos ajudar a melhorar nossas decisões de negociação, sem envolver nossas emoções que podem ser prejudiciais.

É importante mencionar que você deve testar qualquer nova estratégia ou ferramenta antes de usá-la em sua conta real, pois ela pode não ser útil ou lucrativa para a sua negociação, pois não há algo adequado para todas as pessoas ou, pelo menos, você ache necessário realizar uma otimização para melhores resultados. O objetivo principal deste artigo e de outros desta série é aprender a codificar as estratégias simples usando a MQL5 para os indicadores técnicos mais populares. Espero que você aplique o conhecimento adquirido e tente desenvolvê-lo sozinho, pois a prática é um fator importante de qualquer processo de aprendizado.

Espero que você tenha achado este artigo útil e perspicaz em relação ao tópico ou mesmo a qualquer tópico relacionado. Se você quiser ler mais artigos semelhantes, dê uma olhada nos meus artigos anteriores desta série para aprender a projetar um sistema de negociação simples baseado nos indicadores técnicos mais populares.

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

Desenvolvendo um EA de negociação do zero (Parte 30): CHART TRADE agora como indicador ?! Desenvolvendo um EA de negociação do zero (Parte 30): CHART TRADE agora como indicador ?!
Trazendo o Chart Trade de volta a ativa ... mas agora ele será um indicador e poderá ou não estar presente no gráfico.
Experiências com redes neurais (Parte 1): Lembrando a geometria Experiências com redes neurais (Parte 1): Lembrando a geometria
As redes neurais são tudo para nós. Vamos ver se isso é verdade na prática. Para tal, vamos fazer experiências e adotar abordagens não-convencionais. Vamos escrever também um sistema de negociação lucrativo. A explicação vai ser simples.
Funcionalidades do assistente MQL5 que você precisa conhecer (Parte 1): Análise de regressão Funcionalidades do assistente MQL5 que você precisa conhecer (Parte 1): Análise de regressão
O trader moderno está quase sempre procurando novas ideias, consciente ou inconscientemente. Ele está constantemente tentando novas estratégias, modificando-as e descartando aquelas que não funcionam. Este processo de pesquisa é demorado e propenso a erros. Nesta série de artigos, tentarei provar que o assistente MQL5 é um verdadeiro suporte para qualquer operador. Graças ao assistente, o trader economiza tempo ao implementar suas ideias. Também reduz a probabilidade de erros que ocorrem ao duplicar o código. Assim, em vez de perder tempo com codificação, os operadores colocam em prática sua filosofia de negociação.
Metamodelos em aprendizado de máquina e negociação: Tempo original das ordens de negociação Metamodelos em aprendizado de máquina e negociação: Tempo original das ordens de negociação
Metamodelos em aprendizado de máquina: Criação automática de sistemas de negociação com quase nenhum envolvimento humano, o próprio modelo decide como operar e quando operar.