Como desenvolver um sistema de negociação baseado no indicador ADX

Mohamed Abdelmaaboud | 8 agosto, 2022

Introdução

Este artigo apresentará uma nova ferramenta técnica de negociação, que é uma das ferramentas mais úteis e significativas que podem nos ajudar a negociar melhor e entender o movimento do mercado. Uma das características mais úteis dos indicadores técnicos é que eles podem nos mostrar o que os preços não podem mostrar e isso será baseado no cálculo para cada indicador, um desses indicadores úteis é o indicador índice direcional médio (ADX). Vamos aprender este indicador em detalhes para entendê-lo bem e aprender como nós podemos usá-lo através de uma estratégia simples, porque quando aprendemos algo profundamente nós podemos obter mais "insights" e podemos usá-lo melhor.

Nós aprenderemos isso através dos seguintes tópicos:

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

Através do tópico da definição do ADX, nós discutiremos em detalhes o que é o indicador índice direcional médio (ADX) e o que ele mede, e como nós podemos calculá-lo manualmente para poder entendê-lo profundamente e poder usá-lo de forma lucrativa. Então, depois de entender bem o indicador e como ele funciona, nós aprenderemos uma estratégia simples que pode ser usada em nossas negociações e isso será conhecido após o tópico da estratégia do ADX. E então, no tópico do esquema da estratégia do ADX, nós aprenderemos como projetar um esquema para nos ajudar a escrevê-lo em código para projetar um sistema de negociação para essa estratégia. Em seguida, nós aprenderemos a escrever um sistema de negociação usando essa estratégia e isso será através do tópico do sistema de negociação do ADX.

Nós usaremos a plataforma de negociação MetaTrader 5 e o editor de linguagem MetaQuotes integrado ao MetaTrader 5 e você pode baixá-lo no seguinte link: https://www.metatrader5.com/pt/download

Depois de baixar e instalar a MetaTrader 5, você o encontrará igual à imagem a seguir para a plataforma de negociação:

MT5 

Eu aconselho que você aplique tudo neste artigo sozinho, pois ele desenvolverá suas habilidades rapidamente e lhe fornecerá uma compreensão profunda do tópico. A prática é uma chave importante para qualquer desenvolvimento. Portanto, será melhor tentar aplicar todos os conceitos e testá-los sozinho, porque nós aprenderemos como projetar um sistema de negociação usando uma ferramenta técnica e faremos isso escrevendo alguns códigos em MQL5 para criar um expert advisor ou programa para nos ajudar a negociar bem. Será essencial também ter uma conta de demonstração para testar e aplicar, você pode fazer isso abrindo uma conta demo através da própria MetaTrader 5 pressionando a guia Arquivo da plataforma MetaTrader 5 --> Abrir uma conta --> você pode inserir o nome da sua corretora para abrir esta conta demo através dela ou escolher a MetaQuotes --> Avançar --> Escolher Abrir uma conta demo para negociar com dinheiro virtual sem risco --> Avançar --> inserir os seus dados, determinar os requisitos da conta e marcar Concordo --> Avançar --> então, você encontrará as credenciais da sua conta de demonstração --> Concluir.

Agora você pode usar esta conta para negociar virtualmente abrindo-a e clicando na guia Arquivo --> Login para Conta de Negociação --> inserir as credenciais da sua conta demo e pressionar OK.

Ressalva: Qualquer informação fornecida aqui é apenas para fins educacionais e sem fins comerciais ou de aconselhamento. Todas 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 começar a aprender uma nova ferramenta que pode fazer a diferença em nossos resultados de negociação para melhor.


Definição do ADX

Nesta parte, nós falaremos detalhadamente sobre um dos indicadores mais populares no mundo da negociação técnica para saber o que ele é, o que ele mede e como nós podemos calculá-lo para poder entendê-lo e usá-lo bem pelas estratégias disponíveis ou mesmo com novas ideias em torno dela. Este indicador é o índice direcional médio (ADX), ele foi desenvolvido por Welles Wilder e ele mede a tendência e confirma se há tendência ou não, pois de acordo com o seu cálculo, ele compara a faixa de negociação de um período com a faixa de negociação do período anterior.

Como resultado dessa comparação, nós podemos descobrir o que temos:

Se houver um movimento direcional positivo, significa que a máxima de um período ultrapassou a máxima do período anterior e seu símbolo é (+DM).

A imagem a seguir nos mostra como isso pode ocorrer em um gráfico dependendo da ação do preço:

+DM

E vice-versa, se houver um movimento direcional negativo, significa que a mínima de um período ultrapassou a mínima do período anterior e seu símbolo é (-DM).

A imagem a seguir nos mostra como isso pode ocorrer em um gráfico dependendo da ação do preço:

-DM

Se nós não tivermos um movimento direcional positivo e não tivermos um movimento direcional negativo, isso significa que a máxima não excedeu a máxima anterior e a mínima não excedeu a mínima anterior.

A imagem a seguir nos mostra como isso pode ocorrer em um gráfico dependendo da ação do preço:

Sem +DM-DM

Se nós tivermos um movimento direcional Positivo e um movimento direcional Negativo, significará que a máxima ultrapassou a máxima anterior e a mínima ultrapassou a mínima anterior.

A imagem a seguir nos mostra como isso pode ocorrer em um gráfico dependendo da ação do preço: 

 +DM-DM

Vejamos como nós podemos calculá-lo, pois isso nos dará mais informações. A seguir estão as etapas para calcular o ADX, você deve observar que todos os valores devem ser absolutos:

1- Calculamos o +DM e -DM:

Nesta etapa, nós precisamos determinar se há um movimento de alta ou baixa para o movimento atual em comparação com o anterior. Então, vamos calcular duas coisas:

Ele será calculado por (+DM = alta atual - alta anterior)
Ele será calculado por (-DM = baixa atual - baixa anterior)

Então, nós vamos verificar cada período calculado e verificar se é +DM, -DM ou qualquer outra coisa.

+DM=n
-DM = 0

-DM = n

+DM = 0

Em alguns casos, nós podemos encontrar outros cenários onde não há valores para (+DM e -DM) ou nós podemos encontrar valores para ambos (+DM e -DM), a seguir é como nós podemos lidar com isso:

+DM = 0

-DM = 0

sem DM

+DM>-DM = +DM que será considerado somente,

 +DM maior

+DM<-DM = -DM que será considerado somente

-DM maior

+DM=-DM = ambos serão ignorados

+DM igual a -DM

2- Calcular o True Range (TR):

Nesta etapa e após calcular o DM, nós calcularemos o (TR) e será o maior valor dentre os seguintes:

3- Calcular a soma dos 14 períodos calculados (+DM, -DM e TR)

Após calcular os primeiros 14 períodos calculados (+DM, -DM e TR), nós usaremos as seguintes fórmulas para calcular os seguintes valores após 14:

+DM 15 = (+DM anterior - (+DM/14 anterior)) + +DM atual

-DM 15 = (-DM anterior - (-DM/14 anterior)) + -DM atual

TR 15 = (TR anterior - (TR/14 anterior)) + TR atual

4- Calcular os 14 períodos de +DI e-DI
+DI 14 = 100*(+DM14/TR14)
-DI 14 = 100*(-DM14/TR14)

5- Calculamos a diferença entre +DI e -DI

DI 14 Diff = (+DI 14) - (-DI 14)

6- Calculamos a soma de +DI e -DI

Soma DI 14 = (+DI 14) + (-DI 14)

7- Calcular DX

DX = 100*((diferença entre +DI e -DI)/(soma de +DI e -DI))
8- Calcular ADX
ADX = média de 14 períodos de DX

Pelas etapas anteriores nós podemos calcular o ADX e agora vamos ver um exemplo para aplicar essas etapas, se nós tivermos os seguintes dados:

Dia Máxima Mínima Fechamento
1 110 90 100
2 140 120 130
3 160 120 140
4 150 110 130
5 140 100 130
6 150 130 140
7 170 150 160
8 180 160 170
9 170 150 155
10 170 130 140
11 180 155 160
12 190 175 180
13 220 190 190
14 230 200 200
15 215 205 210
16 200 190 200
17 195 180 190
18 195 180 185
19 210 185 195
20 220 190 200
21 233 195 208
22 246 200 216
23 258 205 223
24 271 210 231
25 283 215 238
26 296 220 246
27 308 225 253
28 321 230 261
29 333 235 268
30 346 240 276

Vamos calcular o ADX para os dados anteriores:

1- Calculamos o +DM e -DM:

+DM = máxima atual - máxima anterior

-DM = mínima atual - mínima anterior

Exemplo - DM

2- Calculamos o TR:

Ele será o maior valor entre o seguinte:

A imagem a seguir é para o TR após calculá-lo:

Exemplo - TR

3- Calculamos a soma dos 14 períodos calculados +DM, -DM e TR:

+DM 14 = Soma +DM 1(dia 2: dia 15)

-DM 14 = Soma -DM 1(dia 2: dia 15)

TR 14 = Soma TR (dia 2: dia 15)

Exemplo - 14 DM-TR

4- Calculamos os 14 períodos de +DI e-DI e o primeiro cálculo será a partir do 15º dia pois nós precisamos de 14 DM para calcular o 14 DI:

+DI14 = 100*(+DM14/TR14)

-DI14 = 100*(-DM14/TR14)


5- Calculamos a diferença entre +DI e -DI

DI 14 Diff = (+DI 14) - (-DI 14)

6- Calculamos a soma de +DI e -DI

Soma DI 14 = (+DI 14) + (-DI 14)

DI14 - diff e soma

7- Calculamos o DX:

DX = 100*((diferença entre +DI e -DI)/(soma de +DI e -DI))


DX

8- Calculamos o ADX e o primeiro cálculo será o de 28, pois nós precisamos de mais 14 dias para calcular o ADX:

ADX = média de 14 períodos de DX --> DI médio (dia 15: dia 28)


ADX

Agora, nós calculamos o indicador ADX manualmente, mas não precisamos fazer isso, pois ele está embutido na MetaTrader 5, apenas aprendemos como nós podemos calculá-lo para aprofundar a nossa compreensão do indicador ADX e como ele funciona. Se nós precisarmos inseri-lo no gráfico, tudo o que precisamos fazer é escolhê-lo entre os indicadores disponíveis na plataforma de negociação, por (Inserir --> Indicador --> Tendência --> Índice de Movimento Direcional Médio - ADX ) e a seguir é para você saber como nós podemos fazer isso:

Inserção do ADX

Depois de escolher "Índice de Movimento Direcional Médio" - ADX, aparecerá a seguinte janela:

Janela do ADX

Esta janela é para os parâmetros do indicador ADX e eles são o seguinte:
  1. para determinar o período desejado.
  2. para determinar a cor da linha do ADX.
  3. para determinar o tipo da linha do ADX.
  4. para determinar a espessura da linha do ADX.
  5. para determinar a cor da linha de +DI.
  6. para determinar o tipo de linha de +DI.
  7. para determinar a espessura da linha de +DI.
  8. para determinar a cor da linha de -DI.
  9. para determinar o tipo da linha de -DI.
  10. para determinar a espessura da linha de -DI.

Após determinar os parâmetros do ADX e pressionar OK, ele será anexado ao gráfico e a imagem a seguir é um exemplo para isso:

ADX anexado

Estratégia do ADX

Nesta parte, nós veremos estratégias simples que podem ser usadas pelo indicador ADX e eu gostaria de mencionar aqui que nós apresentamos apenas algumas estratégias simples para o indicador ADX e você deve saber que existem muitas estratégias que podem ser usadas com o ADX, desde estratégias simples até complicadas, mas neste artigo, nós apenas mencionamos estratégias simples para entender o conceito por trás do indicador e aprender a projetar um sistema de negociação com base no conceito por trás dele.

Baseado no conceito por trás do cálculo do indicador ADX, ele mostra se há uma tendência ou não, qualquer que seja esse tipo de tendência (de alta ou de baixa), se a curva do ADX está subindo, significa que há tendência e vice-versa se a curva do ADX estiver se movendo para baixo, isso significa que não há tendência. Mas primeiro nós precisamos definir a tendência e ela será o mesmo que o seguinte:

Definição da tendência:

Para a sua informação, a ação do preço é muito importante pois ela nos mostra o tipo da tendência, da mesma forma que nós sabemos que temos três tipos de tendências (tendência de alta, tendência de baixa e lateralizações).

Tendência de alta: É a direção do mercado ou a tendência que nós podemos ver os preços criarem máximas e mínimas ascendentes, os preços subam e os compradores controlarem o mercado nesse movimento de mercado.

A imagem a seguir é a formação dessa direção ou tendência de mercado:

Formação de tendência de alta

A imagem a seguir é um exemplo do mercado para a tendência de alta:

Exemplo de tendência de alta

Tendência de baixa: É a direção ou a tendência do mercado, pois nós podemos ver os preços criando mínimas e máximas descendentes, os preços caem e os vendedores controlam o mercado nesse movimento de mercado.

A seguir está a formação desta direção de mercado ou forma de tendência:

Formação da tendência de baixa

A imagem a seguir é um exemplo da tendência de baixa no mercado:

Exemplo de tendência de baixa

Lateralização: É qualquer direção de mercado, exceto tendência de alta e tendência de baixa, onde não há uma direção clara e há um equilíbrio entre compradores e vendedores.

A seguir estão algumas formações dessa direção de mercado:

Forma lateral 1

Forma lateral 2

Forma lateral 3

Forma lateral 4

Segue um exemplo de lateralização do mercado:

Exemplo vivo de lateralização

Após a identificação das tendências, nós veremos as estratégias simples que podem ser utilizadas de acordo com o conceito do ADX.

A estratégia é baseada no movimento da curva do ADX,

valor atual do ADX > valor anterior do ADX = ADX está aumentando.

valor atual do ADX < valor anterior do ADX = ADX está caindo.

De acordo com essa estratégia, durante a tendência de alta,

valor do ADX > 25 e valor atual do ADX > valor anterior do ADX --> quando o valor de +DI > valor de -DI = compra

De acordo com essa estratégia, durante a tendência de baixa,

Valor do ADX > 25 e valor atual do ADX > valor anterior do ADX --> quando o valor de +DI < valor de -DI = venda


Esquema da estratégia do ADX

Nesta parte, nós projetaremos um esquema para cada estratégia para nos ajudar a criar o sistema de negociação, e esse esquema organizará e definirá o que nós precisamos que o programa ou o sistema faça passo a passo.

De acordo com essa estratégia, nós precisamos que o programa verifique o valor atual do ADX e o valor anterior do ADX a cada tick e, em seguida, decida se o valor atual do ADX é maior que o valor anterior do ADX ou não, se o valor atual do ADX é maior que o valor anterior então nós precisamos que o sistema mostre um comentário no gráfico com "O ADX está subindo", "O Valor do ADX é (n)" em uma nova linha e "O último Valor do ADX é (n)" em outra nova linha. Se o valor atual do ADX for menor que o ADX anterior, nós precisamos que o sistema mostre um comentário no gráfico com "O ADX está caindo" Se o ADX atual for igual ao anterior, nós precisamos que o sistema não faça nada.

A imagem a seguir é um modelo para essa estratégia:

Esquema do movimento ADX

De acordo com essa estratégia, nós precisamos que o sistema verifique a cada tick o valor atual do ADX, o valor anterior do ADX, o valor +DI e o valor -DI, então, nós precisamos decidir se o valor atual do ADX é realmente maior que 25 e o valor anterior do ADX. Se não for maior que ambos, nós precisamos que o sistema não faça nada, se ele for maior que ambos, nós precisamos que o sistema verifique +DI e -DI, se +DI for maior que -DI ou não, se +DI for maior que -DI, nós precisamos que o sistema comente com um sinal de compra, o valor do ADX é (n), o último valor do ADX é (n), o valor de +DI é (n) e o valor de -DI é (n) ou se +DI não é maior que -DI, nós precisamos que o sistema não faça nada.

A imagem a seguir é um modelo para essa estratégia:

ADX - Esquema do sinal de compra

De acordo com essa estratégia, nós precisamos que o sistema verifique a cada tick o valor atual do ADX, o valor anterior do ADX, o valor +DI e o valor -DI, então, nós precisamos decidir se o valor atual do ADX é realmente menor que 25 e o valor anterior do ADX. Se não for menor que ambos, nós precisamos que o sistema não faça nada, se ele for menor que ambos, nós precisamos que o sistema verifique +DI e -DI, se +DI for menor que -DI ou não, se +DI for menor que -DI, nós precisamos que o sistema comente com um sinal de venda, o valor do ADX é (n), o último valor do ADX é (n), o valor de +DI é (n) e o valor de -DI é (n) ou se +DI não é menor que -DI, nós precisamos que o sistema não faça nada.

A imagem a seguir é um modelo para essa estratégia:

ADX - Esquema do sinal de venda

Sistema de negociação do ADX

Nesta parte mais interessante, nós saberemos como criar um sistema de negociação para essas estratégias simples que foram mencionadas para usá-las na plataforma de negociação MetaTrader 5. Nós usaremos o Editor de Linguagem MetaQuotes (MQL5) integrado para escrever o código desse sistema de negociação. Para abrir o Editor de Linguagem MetaQuotes ao abrir a plataforma de negociação MetaTrader 5, você pode pressionar F4 para abri-lo ou clicar na guia Ferramentas da MetaTrader 5 --> selecionar Editor de Linguagem MetaQuotes.

A imagem a seguir é para mostrar como fazer isso:

Abrindo o Metaeditor 1

Ou você pode pressionar o botão IDE:

Abrindo o MetaEditor 2

Em seguida, a seguinte janela será aberta para o Editor de Linguagem MetaQuotes:

Janela do MetaEditor

Em seguida, nós abriremos um novo arquivo para criar o nosso sistema de negociação clicando em "Novo":

Janela do Metaeditor 2

Em seguida, a seguinte janela será aberta:

MetaEditor - Novo Arquivo

A seguir estão as opções para o tipo do novo arquivo:

  1. Expert Advisor: O EA é um programa na plataforma para automatizar os processos de negociação de acordo com as condições predeterminadas.
  2. Indicador personalizado: este é um código de programa para nos ajudar a ler o gráfico para melhorar as decisões de negociação.
  3. Script: é um programa que pode executar uma tarefa apenas uma vez após a sua execução.

Agora, nós escolheremos criar um arquivo EA do Expert Advisor para criar o nosso sistema de negociação.

Primeiro, nós criaremos um programa que pode mostrar um comentário no gráfico com o valor ADX atual e as etapas a seguir são:

double PriceArray[];
array[] por referência e flag

ArraySetAsSeries(PriceArray,true);

símbolo como uma string, período para o período de tempo e período para o período do ADX e eles serão iguais ao seguinte:
int ADXDef = iADX(_Symbol,_Period,14);
indicator handle, buffer_num of indicator buffer number, start_time (data e hora de início), stop_time (data e hora de fim), e buffer[] (target array).
CopyBuffer(ADXDef,0,0,3,PriceArray);
valor do tipo double (número normalizado) e dígitos como um inteiro (número de dígitos após o ponto decimal)
double ADXValue=NormalizeDouble(PriceArray[0],2);
Qualquer valor que separamos por vírgulas entre eles e quando nós precisarmos mostrar alguns deles em uma nova linha, nós usaremos um símbolo de quebra de linha "\n" 
Comment("ADX Value is ", ADXValue);

Se você quiser ver o código completo deste programa, você pode vê-lo através do seguinte:

//+------------------------------------------------------------------+
//|                                            Simple ADX System.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 an array for prices
   double PriceArray[];

//sort price array from current data
   ArraySetAsSeries(PriceArray,true);

//identify ADX
   int ADXDef = iADX(_Symbol,_Period,14);

//Filling data according to created ADX
   CopyBuffer(ADXDef,0,0,3,PriceArray);

//Getting value of current data
   double ADXValue=NormalizeDouble(PriceArray[0],2);

//Comment with ADX value
   Comment("ADX Value is ", ADXValue);
  }
//+------------------------------------------------------------------+

Depois de escrever este programa, nós podemos ver este arquivo de programa na janela do navegador da plataforma de negociação da MetaTrader 5, segue uma imagem para mostrar isso:

Nav

Após clicar duas vezes no arquivo ou arrastar e soltar no gráfico, aparecerá a seguinte janela:

Janela do Simple ADX

Após marcar "Permitir a Negociação Automatizada" e pressionar o botão OK, o arquivo será anexado ao gráfico:

Simple ADX anexado

Assim, o resultado de acordo com este sistema de negociação aparecerá e a imagem a seguir é um exemplo disso:

Simple ADX

Agora, que nós criamos o necessário para mostrar o valor atual do ADX, nós precisamos adicionar algo que nos ajude a desenvolver o nosso sistema de negociação, nós precisamos codificar um programa que mostre outros valores do indicador ADX (valor +DI , e valor -DI) e veja a seguir como fazer isso:

double ADXArray[];
double PDIArray[];
double NDIArray[];
ArraySetAsSeries(ADXArray,true);
ArraySetAsSeries(PDIArray,true);
ArraySetAsSeries(NDIArray,true);

int ADXDef = iADX(_Symbol,_Period,14);
CopyBuffer(ADXDef,0,0,3,ADXArray);
CopyBuffer(ADXDef,1,0,3,PDIArray);
CopyBuffer(ADXDef,2,0,3,NDIArray);
double ADXValue=NormalizeDouble(ADXArray[0],2);
double PDIValue=NormalizeDouble(PDIArray[0],2);
double NDIValue=NormalizeDouble(NDIArray[0],2);
Comment("ADX Value is ", ADXValue,"\n""+DI Value is ", 
PDIValue,"\n""-DI Value is ", NDIValue);

A seguir está o código completo para este Expert Advisor:

//+------------------------------------------------------------------+
//|                                  Simple ADX System - 3 lines.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 an array for prices
   double ADXArray[];
   double PDIArray[];
   double NDIArray[];
   
   //sort price array from current data
   ArraySetAsSeries(ADXArray,true);
   ArraySetAsSeries(PDIArray,true);
   ArraySetAsSeries(NDIArray,true);

   //identify ADX
   int ADXDef = iADX(_Symbol,_Period,14);
   
   
   //Filling data according to created ADX
   CopyBuffer(ADXDef,0,0,3,ADXArray);
   CopyBuffer(ADXDef,1,0,3,PDIArray);
   CopyBuffer(ADXDef,2,0,3,NDIArray);
   
   //Getting value of current data
   double ADXValue=NormalizeDouble(ADXArray[0],2);
   double PDIValue=NormalizeDouble(PDIArray[0],2);
   double NDIValue=NormalizeDouble(NDIArray[0],2);
   
   //Comment with ADX value
   Comment("ADX Value is ", ADXValue,"\n""+DI Value is ", 
   PDIValue,"\n""-DI Value is ", NDIValue);
  }
//+------------------------------------------------------------------+

Depois de escrever este programa, nós podemos encontrar o seu arquivo na janela do Navegador:

 Nav 2

Após clicar duas vezes no arquivo ou arrastá-lo e soltá-lo no gráfico, a seguinte janela será exibida:

Janela do Simple ADX - 3 lines

Após marcar "Permitir a Negociação Automatizada" e pressionar o botão OK, o programa será anexado ao gráfico:

Simple ADX - 3 lines anexado

Depois disso, os valores aparecerão no gráfico conforme este expert advisor:

Simple ADX - 3 lines

Agora, nós criaremos o nosso sistema de negociação para as estratégias mencionadas (movimento do ADX, tendência de alta e tendência de baixa).

Valor atual do ADX > valor anterior do ADX = ADX está subindo.

Valor atual do ADX < valor anterior do ADX = ADX está caindo.

A seguir será escrito o código do programa ou do expert advisor que poderá fazer isso:

double ADXArray0[];
double ADXArray1[];

ArraySetAsSeries(ADXArray0,true);
ArraySetAsSeries(ADXArray1,true);

int ADXDef = iADX(_Symbol,_Period,14);
CopyBuffer(ADXDef,0,0,3,ADXArray0);
CopyBuffer(ADXDef,0,0,2,ADXArray1);
double ADXValue=NormalizeDouble(ADXArray0[0],2);
double ADXValuelast=NormalizeDouble(ADXArray1[1],2);
if (ADXValue>ADXValuelast)
      {
       Comment("ADX is rising","\n""ADX Value is ", ADXValue,"\n""ADX Value last is ", 
   ADXValuelast);
      }
   
if (ADXValue<ADXValuelast)
     {
      Comment("ADX is falling","\n""ADX Value is ", ADXValue,"\n""ADX Value last is ", 
   ADXValuelast);
      }

A seguir encontramos o código completo para esta estratégia para criar o expert advisor:

//+------------------------------------------------------------------+
//|                             Simple ADX System - ADX 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()
  {
   //creating an array for prices
   double ADXArray0[];
   double ADXArray1[];

   //sort price array from current data
   ArraySetAsSeries(ADXArray0,true);
   ArraySetAsSeries(ADXArray1,true);
      
   //identify ADX
   int ADXDef = iADX(_Symbol,_Period,14);
   
   //Filling data according to created ADX
   CopyBuffer(ADXDef,0,0,3,ADXArray0);
   CopyBuffer(ADXDef,0,0,2,ADXArray1);
   
   //Getting value of current data
   double ADXValue=NormalizeDouble(ADXArray0[0],2);
   double ADXValuelast=NormalizeDouble(ADXArray1[1],2);
   
   //ADX movement signal
   if (ADXValue>ADXValuelast)
      {
         Comment("ADX is rising","\n""ADX Value is ", ADXValue,"\n""ADX Value last is ", 
   ADXValuelast);
      }
   
   if (ADXValue<ADXValuelast)
     {
         Comment("ADX is falling","\n""ADX Value is ", ADXValue,"\n""ADX Value last is ", 
   ADXValuelast);
      }
  }
//+------------------------------------------------------------------+

Após a criação do expert advisor, nós podemos encontrá-lo na janela do Navegador:

Nav - adx3

Após clicar duas vezes ou arrastá-lo e soltá-lo no gráfico, a seguinte janela será exibida:

Janelado do ADX movement 

Após marcar "Permitir a Negociação Automatizada" e pressionar o botão OK, o arquivo será anexado ao gráfico:

ADX movement anexado

Após isso, ele pode funcionar de acordo com as suas condições e a seguir encontramos exemplos dos resultados dos testes:

ADX movement - subindo 


ADX movement2.png

valor do ADX > 25 e valor atual do ADX > valor anterior do ADX --> quando o valor de +DI > valor de -DI = compra

Veja a seguir como criar um expert advisor para executar essa estratégia:

string signal="";
double ADXArray0[];
double ADXArray1[];
double PDIArray[];
double NDIArray[];
ArraySetAsSeries(ADXArray0,true);
ArraySetAsSeries(ADXArray1,true);
ArraySetAsSeries(PDIArray,true);
ArraySetAsSeries(NDIArray,true);
int ADXDef = iADX(_Symbol,_Period,14);
CopyBuffer(ADXDef,0,0,3,ADXArray0);
CopyBuffer(ADXDef,0,0,2,ADXArray1);
CopyBuffer(ADXDef,1,0,3,PDIArray);
CopyBuffer(ADXDef,2,0,3,NDIArray);
double ADXValue=NormalizeDouble(ADXArray0[0],2);
double ADXValueLast=NormalizeDouble(ADXArray1[1],2);
double PDIValue=NormalizeDouble(PDIArray[0],2);
double NDIValue=NormalizeDouble(NDIArray[0],2);
if (ADXValue>25&&ADXValue>ADXValueLast)
   if(PDIValue>NDIValue)
   {
    signal = "BUY";
   }
Comment("Simple ADX System - Signal is ",signal,"\n""ADX Value is ", ADXValue,
"\n""ADX Value Last is ", ADXValueLast, "\n""+DI Value is ", PDIValue,
"\n""-DI Value is ", NDIValue);

A seguir encontramos o código completo para esta estratégia para criar o expert advisor:

//+------------------------------------------------------------------+
//|                     Simple ADX System - Uptrend - Buy Signal.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 variable for signal
   string signal="";
   
   //creating an array for prices
   double ADXArray0[];
   double ADXArray1[];
   double PDIArray[];
   double NDIArray[];
   
   //identify ADX, positive DI, negative DI
   int ADXDef = iADX(_Symbol,_Period,14);
   
   
   //sort price array from current data
   ArraySetAsSeries(ADXArray0,true);
   ArraySetAsSeries(ADXArray1,true);
   ArraySetAsSeries(PDIArray,true);
   ArraySetAsSeries(NDIArray,true);
   
   //Filling data according to created ADX
   CopyBuffer(ADXDef,0,0,3,ADXArray0);
   CopyBuffer(ADXDef,0,0,2,ADXArray1);
   CopyBuffer(ADXDef,1,0,3,PDIArray);
   CopyBuffer(ADXDef,2,0,3,NDIArray);
   
   //Getting value of current data
   double ADXValue=NormalizeDouble(ADXArray0[0],2);
   double ADXValueLast=NormalizeDouble(ADXArray1[1],2);
   double PDIValue=NormalizeDouble(PDIArray[0],2);
   double NDIValue=NormalizeDouble(NDIArray[0],2);
   
   //Comment with Buy signal according to Buy Strategy
    if (ADXValue>25&&ADXValue>ADXValueLast)
      if(PDIValue>NDIValue)
      {
         signal = "BUY";
      }
      
   Comment("Simple ADX System - Signal is ",signal,"\n""ADX Value is ", ADXValue,
   "\n""ADX Value Last is ", ADXValueLast, "\n""+DI Value is ", PDIValue,
   "\n""-DI Value is ", NDIValue);
  }
//+------------------------------------------------------------------+

Após isso, nós podemos encontrar o expert advisor na janela do Navegador:

Nav - ADX4

Após clicar duas vezes ou arrastá-lo e soltá-lo no gráfico, a seguinte janela aparecerá,

Janela do ADX - uptrend

Após marcar "Permitir a Negociação Automatizada" e pressionar o botão OK, o expert advisor será anexado ao gráfico:

ADX - uptrend anexado

Depois disso nós podemos encontrar os sinais que aparecem de acordo com a estratégia:

A imagem a seguir é um exemplo dessa estratégia ou dos resultados do expert advisor dos testes:


ADX - sinal de Compra

Valor do ADX > 25 e valor atual do ADX > valor anterior do ADX --> quando o valor de +DI < valor de -DI = venda

Veja a seguir como criar um expert advisor que executará essa estratégia:

//+------------------------------------------------------------------+
//|                Simple ADX System - Downtrend - Sell Strategy.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 variable for signal
   string signal="";
   
   //creating an array for prices
   double ADXArray0[];
   double ADXArray1[];
   double PDIArray[];
   double NDIArray[];
   
   //identify ADX, positive DI, negative DI
   int ADXDef = iADX(_Symbol,_Period,14);
   
   
   //sort price array from current data
   ArraySetAsSeries(ADXArray0,true);
   ArraySetAsSeries(ADXArray1,true);
   ArraySetAsSeries(PDIArray,true);
   ArraySetAsSeries(NDIArray,true);
   
   //Filling data according to created ADX
   CopyBuffer(ADXDef,0,0,3,ADXArray0);
   CopyBuffer(ADXDef,0,0,2,ADXArray1);
   CopyBuffer(ADXDef,1,0,3,PDIArray);
   CopyBuffer(ADXDef,2,0,3,NDIArray);
   
   //Getting value of current data
   double ADXValue=NormalizeDouble(ADXArray0[0],2);
   double ADXValueLast=NormalizeDouble(ADXArray1[1],2);
   double PDIValue=NormalizeDouble(PDIArray[0],2);
   double NDIValue=NormalizeDouble(NDIArray[0],2);
   
   //Comment with Buy signal according to Buy Strategy
    if (ADXValue>25&&ADXValue>ADXValueLast)
      if(PDIValue<NDIValue)
      {
         signal = "SELL";
      }
      
   Comment("Simple ADX System - Signal is ",signal,"\n""ADX Value is ", ADXValue,
   "\n""ADX Value Last is ", ADXValueLast, "\n""+DI Value is ", PDIValue,
   "\n""-DI Value is ", NDIValue);
  }
//+------------------------------------------------------------------+

São os mesmos passos da estratégia de tendência de alta com as seguintes diferenças:

    if (ADXValue>25&&ADXValue>ADXValueLast)
      if(PDIValue<NDIValue)
      {
         signal = "SELL";
      }
   Comment("Simple ADX System - Signal is ",signal,"\n""ADX Value is ", ADXValue,
   "\n""ADX Value Last is ", ADXValueLast, "\n""+DI Value is ", PDIValue,
   "\n""-DI Value is ", NDIValue);

Depois de escrever o código desta estratégia, nós podemos encontrar o arquivo do expert advisor na janela do Navegador:

Nav - ADX 5

Após clicar duas vezes ou arrastá-lo e soltá-lo no gráfico, a seguinte janela será exibida:

Janela do ADX - downtrend 

Após marcar "Permitir a Negociação Automatizada" e pressionar o botão OK, o expert advisor será anexado ao gráfico e a imagem a seguir mostra um exemplo disso:

ADX - downtrend anexado

Então, nós podemos encontrar sinais que aparecem de acordo com a estratégia de tendência de baixa:

A figura a seguir é um exemplo do sinal gerado de acordo com esta estratégia de teste:

ADX - Sinal de venda

Conclusão

Após estudar os tópicos mencionados neste artigo, supõe-se que você já tenha um conhecimento profundo de um dos indicadores populares e úteis, o indicador ADX, e como projetar um sistema de negociação usando-o, já que nós estudamos o que é o ADX, o que ele mede e como ele é calculado manualmente. Nós conhecemos as estratégias simples baseadas no indicador ADX, durante a tendência de alta e de baixa, desenvolvemos um esquema para essas estratégias para nos ajudar a desenvolver o sistema de negociação passo a passo para entender o que devemos informar ao programa para que ele cumpra sua missão. Além disso, vimos como projetar um sistema de negociação para funcionar automaticamente com base nas estratégias ADX e discutimos como escrever o código para essas estratégias de negociação usando a MQL5 (MetaQuotes Language).

O indicador ADX tem muitas estratégias que podem ser usadas para a negociação de estratégias desde as mais simples até as mais complicadas, mas aqui nós mencionamos apenas algumas estratégias simples para aprender o conceito básico do indicador e o conceito básico do artigo; o objetivo principal é aprender estratégias de negociação baseadas na abordagem técnica e desenvolver um sistema de negociação usando a linguagem MQL5 para ser usado na plataforma de negociação MetaTrader 5.

Eu preciso mencionar também, que existem muitas ferramentas e estratégias úteis que podem ser usadas para a nossa negociação. Essas ferramentas podem ser usadas individualmente ou podemos combiná-las o que é válido para ser combinado para obter melhores resultados e esse é um dos recursos mais úteis da análise técnica, pois ela possui muitas ferramentas baseadas em diferentes conceitos que podem aprimorar nossas decisões de negociação, isso retornará melhores resultados da negociação. Eu recomendo ler meus artigos anteriores sobre os outros indicadores populares que podem ser usados por algumas estratégias simples e como projetar um sistema de negociação simples baseado nessas estratégias via MQL5 para ser usado pela MetaTrader 5. Portanto, nossa missão é aprender esses conceitos e ferramentas e ver o que é adequado para o nosso estilo e plano de negociação, pois você pode encontrar muitas estratégias que podem ser úteis para alguém, mas não para o outro. Cada pessoa deve ter um plano de negociação baseado em sua estratégia de negociação e podemos descobrir isso testando cada nova estratégia ou ferramenta para confirmar se ela será lucrativa antes de usá-las em contas reais.

A programação pode ser muito útil nesta fase por vários motivos, ela nos ajuda a fazer isso de forma fácil, suave e precisa. Uma vez que encontramos uma estratégia lucrativa, nós também podemos projetar um sistema de negociação para permitir que o computador trabalhe para nós de forma automática de acordo com as condições do programa projetado. Isso nos fará evitar emoções prejudiciais que também podem estar envolvidas em nosso processo de negociação, portanto, a programação nos ajuda a negociar com disciplina, que é uma das chaves mais importantes para a negociação com sucesso. Portanto, é bom aprender programação e MQL5, pois eles podem ser úteis para atingir esses objetivos.

Eu espero que você tenha achado este artigo útil para a sua negociação, mesmo que ele tenha aberto seus olhos para novas ideias sobre ele ou qualquer outro tópico relacionado, ajudando você a melhorar os seus resultados de negociação, pois esse é o principal objetivo da negociação: obter bons resultados e de forma consistente, eu espero que este artigo contribua para ajudá-lo a atingir esse objetivo valioso.