![Como desenvolver um sistema de negociação baseado no indicador ADX](https://c.mql5.com/i/articles/overlay.png)
Como desenvolver um sistema de negociação baseado no indicador ADX
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:
- Definição do ADX
- Estratégia do ADX
- Esquema da estratégia do ADX
- Sistema de negociação do ADX
- 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:
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:
- Um avanço ou declínio (movimento direcional positivo ou movimento direcional negativo).
- Sem avanço ou declínio.
- Avanço e declínio.
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:
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:
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:
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:
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:
- (+DM) refere-se ao movimento direcional positivo se houver um movimento ascendente.
Ele será calculado por (+DM = alta atual - alta anterior)
- (-DM) refere-se ao movimento direcional negativo se houver um movimento descendente.
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.
- Se nós tivermos +DM, então:
+DM=n
-DM = 0
- Se nós tivermos -DM, então:
-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:
- Se nós não tivermos (+DM e -DM), então:
+DM = 0
-DM = 0
- Se nós tivermos ambos (+DM e -DM), então, nós vamos comparar entre +DM e -DM e levar em consideração o maior valor ou será ignorado se houver valores iguais entre si:
+DM>-DM = +DM que será considerado somente,
2- Calcular o True Range (TR):+DM<-DM = -DM que será considerado somente
![]()
+DM=-DM = ambos serão ignorados
![]()
Nesta etapa e após calcular o DM, nós calcularemos o (TR) e será o maior valor dentre os seguintes:
- A diferença entre a máxima e mínima atual.
- A diferença entre a máxima atual e o fechamento anterior.
- A diferença entre a mínima atual e o fechamento anterior.
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:
4- Calcular os 14 períodos de +DI e-DI+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
+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
2- Calculamos o TR:
Ele será o maior valor entre o seguinte:
- A diferença entre a máxima e mínima atual.
- A diferença entre a máxima atual e o fechamento anterior.
- A diferença entre a mínima atual e o fechamento anterior.
A imagem a seguir é para o TR após calculá-lo:
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)
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)
7- Calculamos o DX:
DX = 100*((diferença entre +DI e -DI)/(soma de +DI e -DI))
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)
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:
Depois de escolher "Índice de Movimento Direcional Médio" - ADX, aparecerá a seguinte janela:
- para determinar o período desejado.
- para determinar a cor da linha do ADX.
- para determinar o tipo da linha do ADX.
- para determinar a espessura da linha do ADX.
- para determinar a cor da linha de +DI.
- para determinar o tipo de linha de +DI.
- para determinar a espessura da linha de +DI.
- para determinar a cor da linha de -DI.
- para determinar o tipo da linha de -DI.
- 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:
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:
A imagem a seguir é um exemplo do mercado para a 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:
A imagem a seguir é um exemplo da tendência de baixa no mercado:
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:
Segue um exemplo de lateralização do mercado:
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.
- Estratégia um: Sistema ADX Simples - movimento 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.
- Estratégia dois: Sistema ADX Simples - Tendência de alta:
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
- Estratégia três: Sistema ADX simples - tendência de baixa:
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.
- Estratégia um: Sistema ADX Simples - movimento ADX:
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:
- Estratégia dois: Sistema ADX Simples - Tendência de alta:
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:
- Estratégia três: Sistema ADX simples - tendência de baixa:
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:
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:
Ou você pode pressionar o botão IDE:
Em seguida, a seguinte janela será aberta para o Editor de Linguagem MetaQuotes:
Em seguida, nós abriremos um novo arquivo para criar o nosso sistema de negociação clicando em "Novo":
Em seguida, a seguinte janela será aberta:
A seguir estão as opções para o tipo do novo arquivo:
- Expert Advisor: O EA é um programa na plataforma para automatizar os processos de negociação de acordo com as condições predeterminadas.
- Indicador personalizado: este é um código de programa para nos ajudar a ler o gráfico para melhorar as decisões de negociação.
- 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:
- Criamos uma matriz de preços e nós usaremos a função do tipo "double" que representa os valores com uma parte fracionária:
double PriceArray[];
- Ordenamos esta matriz de preços criada a partir dos dados atuais e nós usaremos a função "ArraySetAsSeries", ela retorna true em caso de sucesso ou false em caso de falha (bool). Seus parâmetros necessários são:
array[] por referência e flag
ArraySetAsSeries(PriceArray,true);
- Uma vez identificado o indicador ADX, utilizaremos a função “iADX”, que retorna o manipulador do indicador técnico ADX. Seus parâmetros são:
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:
- _Symbol: para o símbolo atual
- _Period: para o período de tempo atual
- 14: para o período
int ADXDef = iADX(_Symbol,_Period,14);
- Após preencher os dados de acordo com o indicador ADX criado nós usaremos a função "CopyBuffer", que retorna a contagem dos dados copiados ou retorna -1 em caso de erro. Seus parâmetros são:
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);
- Obter o valor do ADX, após a criação de uma variável para "ADXValue" com a função "double" então nós usaremos a função "NormalizeDouble" e ela retornará um valor do tipo double com a precisão predefinida, seus parâmetros são:
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);
- Aparecerá um comentário com o valor atual do ADX e nós usaremos a função "comment", os seus parâmetros são:
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:
Após clicar duas vezes no arquivo ou arrastar e soltar no gráfico, aparecerá a seguinte janela:
Após marcar "Permitir a Negociação Automatizada" e pressionar o botão OK, o arquivo será anexado ao gráfico:
Assim, o resultado de acordo com este sistema de negociação aparecerá e a imagem a seguir é um exemplo disso:
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:
- Criar uma matriz de preços para cada valor (valor ADX, +DI e -DI) e criando variáveis para elas usando a função do tipo "double":
- ADXArray: para o valor de ADX
- PDIarray: para o valor de +DI
- NDIarray: para o valor de -DI
double ADXArray[]; double PDIArray[]; double NDIArray[];
- Ordenar cada matriz de preços para cada valor dos dados atuais usando a função "ArraySetAsSeries":
ArraySetAsSeries(ADXArray,true); ArraySetAsSeries(PDIArray,true); ArraySetAsSeries(NDIArray,true);
- Identificar o indicador ADX usando a função "iADX":
int ADXDef = iADX(_Symbol,_Period,14);
- Preencher os dados de acordo com o ADX identificado usando a função "CopyBuffer":
CopyBuffer(ADXDef,0,0,3,ADXArray); CopyBuffer(ADXDef,1,0,3,PDIArray); CopyBuffer(ADXDef,2,0,3,NDIArray);
- Obter os valores dos dados atuais, após a criação das variáveis para cada valor usando a função do tipo "double", nós usaremos a função "NormalizeDouble::
double ADXValue=NormalizeDouble(ADXArray[0],2); double PDIValue=NormalizeDouble(PDIArray[0],2); double NDIValue=NormalizeDouble(NDIArray[0],2);
- Mostrar os comentários com cada valor em uma nova linha usando a função "comment":
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:
Após clicar duas vezes no arquivo ou arrastá-lo e soltá-lo no gráfico, a seguinte janela será exibida:
Após marcar "Permitir a Negociação Automatizada" e pressionar o botão OK, o programa será anexado ao gráfico:
Depois disso, os valores aparecerão no gráfico conforme este expert advisor:
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).
- Estratégia um: Sistema ADX Simples - movimento ADX:
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:
- Criamos a matriz de preços para os valores do ADX (atual, anterior):
- ADXArray0: para o valor atual do ADX.
- ADXArray1: para o valor anterior do ADX.
double ADXArray0[]; double ADXArray1[];
- Ordenar a matriz de preços dos dados atuais:
ArraySetAsSeries(ADXArray0,true); ArraySetAsSeries(ADXArray1,true);
- Identificamos o ADX:
int ADXDef = iADX(_Symbol,_Period,14);
- Preenchemos os dados de acordo com o ADX:
CopyBuffer(ADXDef,0,0,3,ADXArray0); CopyBuffer(ADXDef,0,0,2,ADXArray1);
- Obtemos os valores depois de criar as variáveis para eles:
double ADXValue=NormalizeDouble(ADXArray0[0],2); double ADXValuelast=NormalizeDouble(ADXArray1[1],2);
- Configuamos as condições do movimento do ADX de acordo com o valor do ADX:
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:
Após clicar duas vezes ou arrastá-lo e soltá-lo no gráfico, a seguinte janela será exibida:
Após marcar "Permitir a Negociação Automatizada" e pressionar o botão OK, o arquivo será anexado ao gráfico:
Após isso, ele pode funcionar de acordo com as suas condições e a seguir encontramos exemplos dos resultados dos testes:
- Quando o ADX está subindo, nós podemos ver o expert advisor mostrar valores como comentários como os da imagem a seguir:
- Quando o ADX está caindo, nós podemos ver o Expert Advisor mostrar os valores como comentários como os da imagem a seguir:
- Estratégia dois: Sistema ADX Simples - 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
Veja a seguir como criar um expert advisor para executar essa estratégia:
- Criamos uma variável para "signal" com uma atribuição vazia pois ela será calculada depois disso, nós usaremos a função "string":
string signal="";
- Criando as matrizes para o valor atual do ADX, valor anterior do ADX, valor +DI e valor -DI:
- ADXArray0: para o valor atual do ADX
- ADXArray1: para o valor anterior do ADX
- PDIarray: para o valor de +DI
- NDIarray: para o valor de -DI
double ADXArray0[]; double ADXArray1[]; double PDIArray[]; double NDIArray[];
- Ordenamos as matrizes de preços dos dados atuais:
ArraySetAsSeries(ADXArray0,true); ArraySetAsSeries(ADXArray1,true); ArraySetAsSeries(PDIArray,true); ArraySetAsSeries(NDIArray,true);
- Identificamos o indicador ADX:
int ADXDef = iADX(_Symbol,_Period,14);
- Preenchemos os dados de acordo com o ADX criado:
CopyBuffer(ADXDef,0,0,3,ADXArray0); CopyBuffer(ADXDef,0,0,2,ADXArray1); CopyBuffer(ADXDef,1,0,3,PDIArray); CopyBuffer(ADXDef,2,0,3,NDIArray);
- Obtemos os valores dos dados atuais:
double ADXValue=NormalizeDouble(ADXArray0[0],2); double ADXValueLast=NormalizeDouble(ADXArray1[1],2); double PDIValue=NormalizeDouble(PDIArray[0],2); double NDIValue=NormalizeDouble(NDIArray[0],2);
- Definimos as condições da estratégia de tendência de alta:
if (ADXValue>25&&ADXValue>ADXValueLast) if(PDIValue>NDIValue) { signal = "BUY"; }
- Comentamos com o sinal de compra e seus valores, cada um em uma nova linha:
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:
Após clicar duas vezes ou arrastá-lo e soltá-lo no gráfico, a seguinte janela aparecerá,
Após marcar "Permitir a Negociação Automatizada" e pressionar o botão OK, o expert advisor será anexado ao gráfico:
Depois disso nós podemos encontrar os sinais que aparecem de acordo com a estratégia:
- O sinal de compra.
- Nova linha com valor atual do ADX.
- Nova linha com o valor anterior do ADX.
- Nova linha com o valor +DI.
- Nova linha com o valor -DI.
- Estratégia três: Sistema ADX simples - 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
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:
- Condições da estratégia de tendência de baixa:
if (ADXValue>25&&ADXValue>ADXValueLast) if(PDIValue<NDIValue) { signal = "SELL"; }
- Comentário pelo sinal:
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:
Após clicar duas vezes ou arrastá-lo e soltá-lo no gráfico, a seguinte janela será exibida:
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:
Então, nós podemos encontrar sinais que aparecem de acordo com a estratégia de tendência de baixa:
- Sinal de venda.
- Nova linha com valor atual do ADX.
- Nova linha com o valor anterior do ADX.
- Nova linha com o valor +DI.
- Nova linha com o valor -DI.
A figura a seguir é um exemplo do sinal gerado de acordo com esta estratégia de teste:
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.
Traduzido do Inglês pela MetaQuotes Ltd.
Artigo original: https://www.mql5.com/en/articles/10715
![Como desenvolver um sistema de negociação baseado no indicador ATR](https://c.mql5.com/2/46/why-and-how__4.png)
![DoEasy. Controles (Parte 4): Controle "Painel", parâmetros Padding e Dock](https://c.mql5.com/2/46/MQL5-avatar-doeasy-library-2__3.png)
![Redes neurais de maneira fácil (Parte 14): Agrupamento de dados](https://c.mql5.com/2/48/Neural_networks_made_easy_014.png)
![DoEasy. Controles (Parte 3): Criando controles vinculados](https://c.mql5.com/2/46/MQL5-avatar-doeasy-library-2__2.png)
![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso