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

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

MetaTrader 5Negociação | 26 setembro 2022, 09:28
1 144 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

Introdução

Bem-vindo a este novo artigo em nossa série sobre como desenvolver um sistema de negociação com base no indicador técnico mais popular. Aqui está um novo indicador técnico importante que nos dá "insights" sobre uma perspectiva diferente no mercado - o indicador Volumes. Nós abordaremos este indicador através dos seguintes tópicos:

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

Aqui nós vamos aprender o que é o volume e o que ele mede. Nós descobriremos como nós podemos usá-lo em nossas negociações e como ele pode ser útil para nós compartilhando algumas estratégias simples baseadas no conceito principal por trás dele. Depois disso, nós aprenderemos como desenvolver um esquema passo a passo para cada estratégia mencionada para nos ajudar a desenvolver um sistema de negociação baseado nas estratégias mencionadas. Esta etapa é muito importante para desenvolver qualquer sistema de negociação. Então, nós chegaremos à parte mais interessante que é o sistema de negociação de Volumes, pois nós aprenderemos como transformar tudo o que nós mencionamos em um sistema de negociação em MQL5 para gerar o que nós precisamos com base nessas estratégias para facilitar, melhorar ou aprimorar a nossa jornada de negociação.

Portanto, nós usaremos a MQL5 (MetaQuotes Language) que está embutido na plataforma de negociação MetaTrader 5. Se você quiser saber mais sobre como baixar e usá-la, leia o tópico Escrevendo o código em MQL5 no MetaEditor do artigo anterior. Além disso, é muito útil para o seu aprendizado aplicar o que você aprendeu, pois isso aprimorará e aprofundará sua compreensão no tópico. A prática é um fator muito importante em qualquer processo de aprendizagem.

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.

Vamos pular para os tópicos para aprender uma nova ferramenta que pode ser útil para a nossa negociação.


Definição de Volumes

O indicador de volumes no mercado Forex indica o número de mudanças de preços durante um período específico, ou seja, o volume negociado por contrato, dinheiro, unidade, etc. O indicador de volume pode nos dar uma indicação da oferta e demanda ou é uma indicação da liquidez do mercado. Então, se houver um volume alto, isso será uma indicação do auge da demanda em caso de alta ou do auge da oferta em caso de queda. Nós podemos dizer que o volume pode ser muito útil, pois será uma confirmação da tendência. Se você quiser saber mais sobre a tendência, você pode ler o tópico da definição de tendência do artigo anterior.

O volume acompanha a tendência. Esta é uma ferramenta muito útil para ser usada para confirmar se o movimento atual será forte ou fraco. É melhor ver que durante a tendência de alta, o volume aumentará com movimentos ascendentes e diminuirá com uma correção descendente. Durante a tendência de baixa, o volume aumentará com os movimentos de baixa e será um sinal significativo, mas às vezes nós podemos encontrar esses movimentos de baixa sem um volume alto, pois os preços podem cair sem volume. Em outras palavras, não é necessário ver um volume alto com movimentos de baixa na tendência de baixa. No caso de uma correção de alta durante a tendência de baixa, o volume diminuirá.

O volume pode nos dar uma indicação de que há uma fraqueza na tendência atual em caso de divergências. As divergências significam que nós descobrimos que o volume se move na direção oposta do preço, não confirmando essa direção de preço.

O mesmo que nós mencionamos sobre seu cálculo antes:

No mercado Forex:

Volumes = número de alterações no preço dentro de um período de tempo específico

No mercado de ações:

Volume = volume de negociação * preço

Exemplo: se nós temos 1000 ações em volume de negociação de uma ação a um preço de $10. Assim, o volume será o mesmo que o seguinte:

Volume = 1000 * $10 = $10.000

Há uma diferença aqui por causa da descentralização no mercado Forex, ao contrário do mercado de ações.

Nós não precisamos calculá-lo manualmente, pois nós podemos encontrá-lo na MetaTrader 5. Tudo o que você precisa fazer é escolhê-lo entre os indicadores disponíveis:

Inserir --> Indicadores --> Volumes --> Volumes

Inserção do Vol

Depois de escolher o indicador Volumes igual ao passo quatro na figura anterior, a janela do indicador de volumes é aberta:

Parâmetro de volume

1. Cor da barra do volume de alta.

2. Cor da barra do volume de baixa.

3. Volume aplicado (Tick ou Real).

4. Espessura da barra. 

Depois de determinar os parâmetros anteriores, ele é anexado ao gráfico:

Vol em anexo

Verde significa que a barra atual é maior que a barra anterior, mas a vermelha significa que a barra atual é menor que a anterior.


Estratégia de Volumes

Nesta parte, nós mencionaremos estratégias simples de volume para entender como o indicador de volumes pode ser usado. Com certeza, você pode descobrir que essas estratégias precisam de otimização e isso é normal, pois o objetivo principal delas é entender como o indicador de volumes pode ser usado com base em seu conceito e como projetar um sistema de negociação com base em seus fundamentos. Portanto, você deve testar qualquer uma dessas estratégias antes de as usar em sua conta real.

  • Estratégia um: Vol - Movimento:

Com base nessa estratégia, nós precisamos comparar entre o valor do volume atual e o anterior para decidir o sinal adequado com base nisso. Se o atual for maior que a anterior, isso será um sinal de que o volume está aumentando. Se o atual for menor que o anterior, isso será um sinal de que o volume está diminuindo.

Simplesmente,

Volume atual > Volume anterior --> aumento do Volume.

Volume atual < Volume anterior --> diminuição do Volume.

  • Estratégia dois: Vol - Força:

Com base nessa estratégia, nós precisamos comparar entre o valor do volume atual e a média dos cinco valores anteriores para decidir a força desse indicador de volume. Se o valor atual estiver acima da média, será um sinal de volume forte. Se o valor atual estiver abaixo da média, será um sinal de volume fraco.

Então,

Atual > AVG --> volume forte

Atual < AVG --> volume fraco

  • Estratégia três: Preço & Vol - Tendência de alta:

De acordo com essa estratégia, durante a tendência de alta, nós vamos comparar a máxima atual e anterior com o valor do volume atual e anterior para decidir se há sinal de compra ou não. Se a máxima atual estiver acima da anterior e o volume atual estiver acima do anterior, será um sinal de compra, mas se a máxima atual estiver acima da anterior e o volume atual estiver abaixo do volume anterior, não haverá sinal.

Máxima atual > máxima anterior e volume atual > volume anterior --> sinal de compra durante a tendência de alta

  • Estratégia quatro: Price & Vol - Tendência de baixa:

Esta estratégia será o oposto da anterior, durante a tendência de baixa, vamos comparar a mínima atual e anterior com o valor do volume atual e anterior para decidir se há um sinal de venda ou se não há sinal. Se a mínima atual estiver abaixo da anterior e o volume atual estiver acima do anterior, será um sinal de venda, mas se a mínima atual estiver abaixo da anterior e o volume atual estiver abaixo do volume anterior, não haverá sinal .

Mínima atual < mínima anterior && volume atual > volume anterior --> Sinal de venda durante a tendência de baixa

  • Estratégia cinco: estratégia MA & Vol:

De acordo com esta estratégia, vamos comparar duas médias móveis, um curta e o outra longa e os valores do volume atual e anterior para decidir se há um sinal de compra ou venda. Se a MA mais curta for menor que a MA mais longa, então a menor ficará acima da maior e, ao mesmo tempo, o volume atual estiver acima do volume anterior, será um sinal de compra. Se a MA mais curta estiver acima da mais longo, então a mais curta ficará abaixo da mais longa e, ao mesmo tempo, o volume atual estiver acima do volume anterior, será um sinal de venda.

MA curta < MA longa, e depois MA curta > MA longa && volume atual > volume anterior --> Sinal de compra

MA curta > MA longa, e depois MA curta < MA longa && volume atual > volume anterior --> Sinal de venda


Esquema da estratégia de Volumes

Nesta parte, nós vamos desenvolver um esquema para cada estratégia, o motivo do design do esquema é nos ajudar a organizar o que nós queremos fazer para criar um sistema de negociação. Este passo é muito importante e essencial para organizar as nossas ideias, além de identificar o que nós queremos fazer passo a passo.

Primeiro, nós criaremos um esquema para um sistema de negociação simples que gerará o valor atual do indicador de Volumes apenas como um comentário no gráfico. Precisamos que o sistema verifique os valores do indicador de volumes em cada tick e, em seguida, retorne o valor atual no gráfico como um comentário. A seguir encontramos um esquema passo a passo para criar este sistema de negociação.

Esquema de vol simples


  • Estratégia um: Vol - Movimento:

De acordo com essa estratégia, nós precisamos criar um sistema de negociação simples que gere sinais para nos informar sobre o movimento do volume (se ele está aumentando ou diminuindo) comparando com os dois valores do indicador de volume atual e anterior. Então, nós precisamos que o sistema verifique esses dois valores a cada tick, depois informar que o volume está aumentando se o volume atual for maior que o volume anterior ou informar que o volume está diminuindo se o volume atual for menor que o anterior. A seguir encontramos um esquema passo a passo para criar este sistema de negociação.

Vol - Esquema do movimento


  • Estratégia dois: Vol - Força:

De acordo com essa estratégia, nós precisamos criar um sistema de negociação simples para gerar os sinais para nos informar sobre a força do Volume com base em uma comparação entre o valor atual do indicador de volume e a média dos cinco valores anteriores. Portanto, nós precisamos deixar o sistema verificar todos esses valores e, em seguida, calcular a média dos cinco valores de Vol anteriores a cada tick. Depois disso, um sinal adequado é gerado, se o valor de Vol atual for maior que o valor médio do volume, o sinal gerado será um volume forte, volume atual, os cinco valores anteriores do volume e o valor médio como um comentário com cada valor em uma linha separada no gráfico. Se o valor atual for menor que o valor médio, o valor gerado será um volume fraco, o valor do volume atual, os cinco valores anteriores de volume e o valor médio como um comentário com cada valor em uma linha separada no gráfico. A seguir nós encontramos um esquema passo a passo para criar este sistema de negociação:

Vol - Esquema de força


  • Estratégia três: Preço & Vol - Tendência de alta:

De acordo com essa estratégia, nós precisamos criar um sistema de negociação simples que funcione durante a tendência de alta para gerar um sinal de compra após a verificação tick a tick da máxima atual e anterior, além dos valores dos indicadores de volumes atuais e anteriores. Com base nessa estratégia, nós precisamos gerar um sinal de compra, máxima atual, máxima anterior, volume atual e comentário do volume anterior com cada valor em uma linha separada no gráfico, se o valor da máxima atual for maior que a anterior e o valor do volume atual é maior que o anterior ou para gerar apenas todos os tipos de valores anteriores sem nenhum sinal para compra, se a máxima atual for maior que a anterior e o valor do volume atual for menor que a anterior. A seguir nós encontramos um esquema passo a passo para criar este sistema de negociação:

Price_Vol - Esquema da tendência de alta

  • Estratégia quatro: Price & Vol - Tendência de baixa:

Esta estratégia será o oposto da anterior. Nós precisamos criar um sistema de negociação simples que funcione durante a tendência de baixa para gerar um sinal de venda após a verificação tick a tick da mínima atual e anterior, além dos valores dos indicadores de volumes atuais e anteriores. Então, nós precisamos que o sistema gere um sinal de venda, mínima atual, mínima anterior, volume atual e volume anterior como um comentário com cada valor em uma linha separada no gráfico, se o valor da mínima atual for menor que a anterior e o valor do volume atual for maior que o anterior ou para gerar apenas todos os tipos de valores anteriores sem nenhum sinal para venda, se a mínima atual for menor que a anterior e ao mesmo tempo o valor do volume atual for menor que o anterior. Podemos ver um esquema passo a passo para criar este sistema de negociação da mesma forma que o seguinte:

Price_Vol - esquema da tendência de baixa


  • Estratégia cinco: estratégia MA & Vol:

De acordo com essa estratégia, nós precisamos criar um sistema de negociação que possa verificar dois indicadores, o volume e a média móvel. Verificaremos tick a tick para decidir se há um sinal de compra ou venda com base na comparação entre as duas médias móveis, uma delas é a curta e a outro é a longa. Se a média curta cruza a longa de baixo para cima e ao mesmo tempo o volume atual é maior que o anterior, o sistema deve gerar um sinal de compra. O segundo cenário, a MA mais curta cruza a mais longa de baixo para cima e o volume atual é maior que o anterior, neste caso o sistema deve gerar um sinal de venda. Veja a seguir, um esquema passo a passo para criar esse tipo de estratégia:

Esquema MA_Vol


Sistema de negociação de Volumes

Nós chegamos à parte mais interessante deste artigo sobre como traduzir todos os anteriores para um sistema de negociação para nos dar sinais de forma automática e precisa. Vamos desenvolver um sistema de negociação para cada estratégia, mas primeiro vamos desenvolver um sistema de negociação para gerar o valor atual do volume para ser a base de cada estratégia.

  • Criaremos uma matriz para o volume usando a função "double".
double VolArray[];
  • Ordenamos a matriz usando a função ArraySetAsSeries que retorna um booleano (true ou false).
ArraySetAsSeries(VolArray,true);
  • Definimos o volume usando o iVolumes após criarmos uma variável para o VolDef. A função iVolumes retorna o manipulador do indicador Volumes e seus parâmetros são (símbolo, período, volume aplicado). Usamos (_Symbol) para ser aplicável ao símbolo atual e (_period) para ser aplicável ao período de tempo atual.
int VolDef=iVolumes(_Symbol,_Period,VOLUME_TICK);
  • Preenchemos a matriz usando a função CopyBuffer para obter os dados do indicador de volumes.
CopyBuffer(VolDef,0,0,3,VolArray);
  • Calculamos o valor do volume usando a função NormalizeDouble após a criação de uma variável para o VolValue. A função NormalizeDouble retorna o valor do tipo double.
int VolValue=NormalizeDouble(VolArray[0],5);
  • Criamos a função do comentário do valor do indicador Volumes usando a função Comment.
Comment("Volumes Value is: ",VolValue);

A seguir está o código completo do sistema de negociação anterior:

//+------------------------------------------------------------------+
//|                                               Simple Volumes.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 Volume
   double VolArray[];

//sorting the array from the current data
   ArraySetAsSeries(VolArray,true);

//defining Volume
   int VolDef=iVolumes(_Symbol,_Period,VOLUME_TICK);

//filling the array
   CopyBuffer(VolDef,0,0,3,VolArray);

//calculating current vol value
   int VolValue=NormalizeDouble(VolArray[0],5);

//creating a comment with current vol value
   Comment("Volumes Value is: ",VolValue);
  }
//+------------------------------------------------------------------+

Depois de compilar este código para poder executá-lo na MetaTrader 5, nós o encontraremos na janela do Navegador:

 Nav1

Ao clicar duas vezes no arquivo ou arrastá-lo e soltá-lo no gráfico, a janela do EA aparecerá:

Janela do Simple vol

Então, nós encontraremos o EA anexado ao gráfico:

 Simple vol anexado

Segue um exemplo dos sinais de teste gerados:

Sinal do Simple vol

  • Estratégia um: Movimento Vol:

A seguir, desenvolveremos um código para criar um sistema de negociação que nos alerte por um comentário no gráfico com o movimento do indicador de volumes com base na comparação entre o valor do volume atual e o anterior:

//+------------------------------------------------------------------+
//|                                               Vol - 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 an array for Volume
   double VolArray[];

//sorting the array from the current data
   ArraySetAsSeries(VolArray,true);

//defining Volume
   int VolDef=iVolumes(_Symbol,_Period,VOLUME_TICK);

//filling the array
   CopyBuffer(VolDef,0,0,3,VolArray);

//calculating current vol value
   double VolCurrentValue=NormalizeDouble(VolArray[0],5);
   double VolPrevValue=NormalizeDouble(VolArray[1],5);

//Conditions of vol movements
//Volume increasing
   if(VolCurrentValue>VolPrevValue)
     {
      Comment("Volumes increased","\n","Volumes current value is: ",VolCurrentValue,
              "\n","Volumes previous value is: ",VolPrevValue);
     }

//Volume decreasing
   if(VolCurrentValue<VolPrevValue)
     {
      Comment("Volumes decreased","\n","Volumes current value is: ",VolCurrentValue,
              "\n","Volumes previous value is: ",VolPrevValue);
     }
  }
//+------------------------------------------------------------------+

Diferenças no código:

Calculando os valores atuais e anteriores de Volumes:

   double VolCurrentValue=NormalizeDouble(VolArray[0],5);
   double VolPrevValue=NormalizeDouble(VolArray[1],5);

Condições da estratégia:

O indicador de volumes está aumentando:

   if(VolCurrentValue>VolPrevValue)
     {
      Comment("Volumes increased","\n","Volumes current value is: ",VolCurrentValue,
              "\n","Volumes previous value is: ",VolPrevValue);
     }

O indicador de volumes está em declínio:

   if(VolCurrentValue<VolPrevValue)
     {
      Comment("Volumes decreased","\n","Volumes current value is: ",VolCurrentValue,
              "\n","Volumes previous value is: ",VolPrevValue);
     }

Após compilar este código, nós encontraremos o EA na janela do Navegador:

Vol Nav2

Ao clicar duas vezes, a janela aparecerá:

Janela Vol - Movement

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

 Vol - Movement anexado

A seguir, um exemplo dos sinais gerados da estratégia Movimento - Vol com a janela de dados contendo os dados atuais e anteriores:

O aumento dos volumes:

Janela de dados atual:

 Vol - Sinal de aumento do movimento - atual

Janela de dados anterior:

 Vol - Sinal de aumento do movimento - anterior

A diminuição dos volumes:

Janela de dados atual:

Vol - Sinal de diminuição do movimento - atual

Janela de dados anterior:

 Vol - Sinal de diminuição do movimento - anterior

  • Estratégia dois: Vol - Força:

A seguir está o código completo para criar um sistema de negociação com base nessa estratégia para gerar automaticamente os sinais da força do indicador de Volumes através da comparação entre o valor do indicador de volumes atual e o anterior:

//+------------------------------------------------------------------+
//|                                               Vol - Strength.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 Volume
   double VolArray[];

//sorting the array from the current data
   ArraySetAsSeries(VolArray,true);

//defining Volume
   int VolDef=iVolumes(_Symbol,_Period,VOLUME_TICK);

//filling the array
   CopyBuffer(VolDef,0,0,11,VolArray);

//calculating current vol && 5 previous volume values
   double VolCurrentValue=NormalizeDouble(VolArray[0],5);
   double VolPrevValue1=NormalizeDouble(VolArray[1],5);
   double VolPrevValue2=NormalizeDouble(VolArray[2],5);
   double VolPrevValue3=NormalizeDouble(VolArray[3],5);
   double VolPrevValue4=NormalizeDouble(VolArray[4],5);
   double VolPrevValue5=NormalizeDouble(VolArray[5],5);


//calculating AVG of 5 previous volume values
   double VolAVGVal=((VolPrevValue1+VolPrevValue2+VolPrevValue3+VolPrevValue4+VolPrevValue5)/5);

//conditions of Volume strength based on comparing current to AVG
//strong volume
   if(VolCurrentValue>VolAVGVal)
     {
      Comment("Strong volume","\n","Current volume is : ",VolCurrentValue,"\n",
              "Volume prev 1 is : ",VolPrevValue1,"\n",
              "Volume prev 2 is : ",VolPrevValue2,"\n",
              "Volume prev 3 is : ",VolPrevValue3,"\n",
              "Volume prev 4 is : ",VolPrevValue4,"\n",
              "Volume prev 5 is : ",VolPrevValue5,"\n",
              "AVG volume is : ",VolAVGVal);
     }

//weak volume
   if(VolCurrentValue<VolAVGVal)
     {
      Comment("Weak volume","\n","Current volume is : ",VolCurrentValue,"\n",
              "Volume prev 1 is : ",VolPrevValue1,"\n",
              "Volume prev 2 is : ",VolPrevValue2,"\n",
              "Volume prev 3 is : ",VolPrevValue3,"\n",
              "Volume prev 4 is : ",VolPrevValue4,"\n",
              "Volume prev 5 is : ",VolPrevValue5,"\n",
              "AVG volume is : ",VolAVGVal);
     }
  }
//+------------------------------------------------------------------+

Diferenças no código:

Cálculo dos cinco valores atuais e anteriores do indicador de Volumes:

   double VolCurrentValue=NormalizeDouble(VolArray[0],5);
   double VolPrevValue1=NormalizeDouble(VolArray[1],5);
   double VolPrevValue2=NormalizeDouble(VolArray[2],5);
   double VolPrevValue3=NormalizeDouble(VolArray[3],5);
   double VolPrevValue4=NormalizeDouble(VolArray[4],5);
   double VolPrevValue5=NormalizeDouble(VolArray[5],5);

 Cálculo da média dos cinco indicadores de Volumes anteriores:

double VolAVGVal=((VolPrevValue1+VolPrevValue2+VolPrevValue3+VolPrevValue4+VolPrevValue5)/5);

Condições da estratégia:

Volume forte:

   if(VolCurrentValue>VolAVGVal)
     {
      Comment("Strong volume","\n","Current volume is : ",VolCurrentValue,"\n",
              "Volume prev 1 is : ",VolPrevValue1,"\n",
              "Volume prev 2 is : ",VolPrevValue2,"\n",
              "Volume prev 3 is : ",VolPrevValue3,"\n",
              "Volume prev 4 is : ",VolPrevValue4,"\n",
              "Volume prev 5 is : ",VolPrevValue5,"\n",
              "AVG volume is : ",VolAVGVal);
     }

Volume fraco:

   if(VolCurrentValue<VolAVGVal)
     {
      Comment("Weak volume","\n","Current volume is : ",VolCurrentValue,"\n",
              "Volume prev 1 is : ",VolPrevValue1,"\n",
              "Volume prev 2 is : ",VolPrevValue2,"\n",
              "Volume prev 3 is : ",VolPrevValue3,"\n",
              "Volume prev 4 is : ",VolPrevValue4,"\n",
              "Volume prev 5 is : ",VolPrevValue5,"\n",
              "AVG volume is : ",VolAVGVal);
     }

Depois de compilar essa estratégia, nós encontraremos o EA na janela do Navegador:

 Vol Nav3

Ao arrastar e soltar o arquivo no gráfico, a janela do EA será aberta:

 Janela do Vol - Strength

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

Vol - Strength anexado

A seguir está um exemplo dos sinais gerados com base na força do volume:

Volume forte:

Vol - Strength - sinal forte

Volume fraco:

Vol - Strength - sinal fraco

  • Estratégia três: Preço & Vol - tendência de alta:

A seguir está o código completo para criar um sistema de negociação para esta estratégia:

//+------------------------------------------------------------------+
//|                                          Price&Vol - 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 arrays for price & Volume
   MqlRates PriceArray[];
   double VolArray[];

//filling price array with data
   int Data=CopyRates(_Symbol,_Period,0,3,PriceArray);

//sorting arrays from the current data
   ArraySetAsSeries(VolArray,true);

//defining Volume
   int VolDef=iVolumes(_Symbol,_Period,VOLUME_TICK);

//filling the array
   CopyBuffer(VolDef,0,0,3,VolArray);

//calculating the current and previous values of highs and volume
   double CurrentHighValue=NormalizeDouble(PriceArray[2].high,5);
   double PrevHighValue=NormalizeDouble(PriceArray[1].high,5);
   double VolCurrentValue=NormalizeDouble(VolArray[0],5);
   double VolPrevValue=NormalizeDouble(VolArray[1],5);

//Conditions of buy signal
//Buy signal
   if(CurrentHighValue>PrevHighValue&&VolCurrentValue>VolPrevValue)
     {
      Comment("Buy Signal during uptrend",
              "\n","Current high is: ",CurrentHighValue,"\n","Previous high is: ",PrevHighValue,
              "\n","Volume current value is: ",VolCurrentValue,"\n","Volumes previous value is: ",VolPrevValue);
     }

//no signal
   if(CurrentHighValue>PrevHighValue&&VolCurrentValue<VolPrevValue)
     {
      Comment("Current high is: ",CurrentHighValue,"\n","Previous high is: ",PrevHighValue,
              "\n","Volume current value is: ",VolCurrentValue,"\n","Volumes previous value is: ",VolPrevValue);
     }
  }
//+------------------------------------------------------------------+

Diferenças no código:

Para criar matrizes de volume e preços, nós usaremos a função do tipo "double" para a matriz de volume da mesma forma que nós fizemos antes, e o MqlRates para a matriz de preços que armazena o preço, volume e spread.

   MqlRates PriceArray[];
   double VolArray[];

Preenchimento da matriz de preços usando a função CopyRates após criar uma variável inteira para Data:

   int Data=CopyRates(_Symbol,_Period,0,3,PriceArray);

Cálculo dos valores atuais e anteriores das máximas e volume:

   double CurrentHighValue=NormalizeDouble(PriceArray[2].high,5);
   double PrevHighValue=NormalizeDouble(PriceArray[1].high,5);
   double VolCurrentValue=NormalizeDouble(VolArray[0],5);
   double VolPrevValue=NormalizeDouble(VolArray[1],5);

Condições da estratégia baseada em valores das máximas e do volume:

Sinal de compra:

   if(CurrentHighValue>PrevHighValue&&VolCurrentValue>VolPrevValue)
     {
      Comment("Buy Signal during uptrend",
              "\n","Current high is: ",CurrentHighValue,"\n","Previous high is: ",PrevHighValue,
              "\n","Volume current value is: ",VolCurrentValue,"\n","Volumes previous value is: ",VolPrevValue);
     }

Sem sinal:

   if(CurrentHighValue>PrevHighValue&&VolCurrentValue<VolPrevValue)
     {
      Comment("Current high is: ",CurrentHighValue,"\n","Previous high is: ",PrevHighValue,
              "\n","Volume current value is: ",VolCurrentValue,"\n","Volumes previous value is: ",VolPrevValue);
     }

Após nós compilarmos este código, nós encontraremos o EA na janela do Navegador:

Vol Nav4

Se nós quisermos executar este EA para gerar sinais de acordo com a estratégia acima, nós clicaremos duas vezes no arquivo para abrir a sua janela:

Janela do Price_Vol - Uptrend

Após clicar em OK, o EA será anexado ao gráfico:

Price_Vol - Uptrend anexado

A seguir está um exemplo dos sinais gerados com base na estratégia Price and Vol - uptrend com a janela de dados:

Sinal de compra:

Dados atuais:

Price_Vol - uptrend buy - atual

Dados anteriores:

Price_Vol - uptrend buy - anterior

Sem sinal:

Dados atuais:

Price_Vol - uptrend no signal - atual

Dados anteriores:

Price_Vol - uptrend no signal - anterior

  • Estratégia quatro: Preço & Vol - tendência de baixa:

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

//+------------------------------------------------------------------+
//|                                        Price&Vol - 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()
  {
//Create arrays for price & Volume
   MqlRates PriceArray[];
   double VolArray[];

//filling price array with data
   int Data=CopyRates(_Symbol,_Period,0,3,PriceArray);

//sorting arrays from the current data
   ArraySetAsSeries(VolArray,true);

//defining Volume
   int VolDef=iVolumes(_Symbol,_Period,VOLUME_TICK);

//filling the array
   CopyBuffer(VolDef,0,0,3,VolArray);

//calculating current and previous of lows and volume
   double CurrentLowValue=NormalizeDouble(PriceArray[2].low,5);
   double PrevLowValue=NormalizeDouble(PriceArray[1].low,5);
   double VolCurrentValue=NormalizeDouble(VolArray[0],5);
   double VolPrevValue=NormalizeDouble(VolArray[1],5);

//Conditions of short signal
//short signal
   if(CurrentLowValue<PrevLowValue&&VolCurrentValue>VolPrevValue)
     {
      Comment("Short Signal during downtrend",
              "\n","Current low is: ",CurrentLowValue,"\n","Previous low is: ",PrevLowValue,
              "\n","Volume current value is: ",VolCurrentValue,"\n","Volumes previous value is: ",VolPrevValue);
     }

//no signal
   if(CurrentLowValue<PrevLowValue&&VolCurrentValue<VolPrevValue)
     {
      Comment("Current low is: ",CurrentLowValue,"\n","Previous low is: ",PrevLowValue,
              "\n","Volume current value is: ",VolCurrentValue,"\n","Volumes previous value is: ",VolPrevValue);
     }
  }
//+------------------------------------------------------------------+

Diferença no código:

Condições dos sinais gerados com base na estratégia Price & Vol - tendência de baixa:

Sinal de venda:

   if(CurrentLowValue<PrevLowValue&&VolCurrentValue>VolPrevValue)
     {
      Comment("Short Signal during downtrend",
              "\n","Current low is: ",CurrentLowValue,"\n","Previous low is: ",PrevLowValue,
              "\n","Volume current value is: ",VolCurrentValue,"\n","Volumes previous value is: ",VolPrevValue);
     }

 Sem sinal:

   if(CurrentLowValue<PrevLowValue&&VolCurrentValue<VolPrevValue)
     {
      Comment("Current low is: ",CurrentLowValue,"\n","Previous low is: ",PrevLowValue,
              "\n","Volume current value is: ",VolCurrentValue,"\n","Volumes previous value is: ",VolPrevValue);
     }

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

Vol Nav5

Após clicar duas vezes no arquivo, a janela do EA aparecerá:

Janela Price_Vol - Downtrend

Após clicar em OK, o EA será anexado ao gráfico:

Price_Vol - Downtrend anexado

A seguir está um exemplo dos sinais gerados com a janela de dados dos dados atuais e anteriores:

Sinal de venda:

Dados atuais:

Price&Vol - Downtrend short signal - atual

Dados anteriores:

Price&Vol - Downtrend short signal - anterior

Sem sinal:

Dados atuais:

Price&Vol - Downtrend no signal - atual

Dados anteriores:

Price&Vol - Downtrend no signal - anterior

  • Estratégia cinco: estratégia MA & Vol:

Com base nessa estratégia, nós podemos criar um sistema de negociação com o seguinte código:

//+------------------------------------------------------------------+
//|                                              MA&Vol 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()
  {
//Create arrays for MA & Volume
   double MAShortArray[],MALongArray[];
   double VolArray[];

//sorting arrays from the current data
   ArraySetAsSeries(MAShortArray,true);
   ArraySetAsSeries(MALongArray,true);
   ArraySetAsSeries(VolArray,true);

//defining MA & Volume
   int MAShortDef = iMA(_Symbol, _Period, 10, 0, MODE_SMA, PRICE_CLOSE);
   int MALongDef = iMA(_Symbol, _Period, 24, 0, MODE_SMA, PRICE_CLOSE);
   int VolDef=iVolumes(_Symbol,_Period,VOLUME_TICK);

//filling arrays
   CopyBuffer(MAShortDef,0,0,3,MAShortArray);
   CopyBuffer(MALongDef,0,0,3,MALongArray);
   CopyBuffer(VolDef,0,0,3,VolArray);

//calculating MA && current volume values
   double MAShortCurrentValue=NormalizeDouble(MAShortArray[0],6);
   double MAShortPrevValue=NormalizeDouble(MAShortArray[1],6);
   double MALongCurrentValue=NormalizeDouble(MALongArray[0],6);
   double MALongPrevValue=NormalizeDouble(MALongArray[1],6);
   double VolCurrentValue=NormalizeDouble(VolArray[0],5);
   double VolPrevValue=NormalizeDouble(VolArray[1],5);

//conditions of buy and short signals
//buy signal
   if(MAShortCurrentValue>MALongCurrentValue&&MAShortPrevValue<MALongPrevValue
      &&VolCurrentValue>VolPrevValue)
     {
      Comment("Buy signal");
     }

//short signal
   if(MAShortCurrentValue<MALongCurrentValue&&MAShortPrevValue>MALongPrevValue
      &&VolCurrentValue>VolPrevValue)
     {
      Comment("Short signal");
     }
  }
//+------------------------------------------------------------------+

Diferença no código:

Criação da matriz para a média móvel curta, média móvel longa e volume:

   double MAShortArray[],MALongArray[];
   double VolArray[];

Ordenação dessas matrizes:

   ArraySetAsSeries(MAShortArray,true);
   ArraySetAsSeries(MALongArray,true);
   ArraySetAsSeries(VolArray,true);

Definição da MA curta e a MA longa usando a função iMA que retorna o manipulador do indicador de média móvel, seus parâmetros são (símbolo, período, período médio, deslocamento horizontal, tipo de suavização que é o tipo da MA, preço aplicado), e definição do volume pela função iVolumes da mesma forma que mencionamos antes:

   int MAShortDef = iMA(_Symbol, _Period, 10, 0, MODE_SMA, PRICE_CLOSE);
   int MALongDef = iMA(_Symbol, _Period, 24, 0, MODE_SMA, PRICE_CLOSE);
   int VolDef=iVolumes(_Symbol,_Period,VOLUME_TICK);

Preenchimento das matrizes:

   CopyBuffer(MAShortDef,0,0,3,MAShortArray);
   CopyBuffer(MALongDef,0,0,3,MALongArray);
   CopyBuffer(VolDef,0,0,3,VolArray);

Cálculo dos valores atuais da MA curta, MA longa e volumes, além dos valores anteriores da MA curta, MA longa e volumes:

   double MAShortCurrentValue=NormalizeDouble(MAShortArray[0],6);
   double MAShortPrevValue=NormalizeDouble(MAShortArray[1],6);
   double MALongCurrentValue=NormalizeDouble(MALongArray[0],6);
   double MALongPrevValue=NormalizeDouble(MALongArray[1],6);
   double VolCurrentValue=NormalizeDouble(VolArray[0],5);
   double VolPrevValue=NormalizeDouble(VolArray[1],5);

Condições dos sinais gerados da estratégia:

Sinal de compra:

   if(MAShortCurrentValue>MALongCurrentValue&&MAShortPrevValue<MALongPrevValue
      &&VolCurrentValue>VolPrevValue)
     {
      Comment("Buy signal");
     }

Sinal de venda:

   if(MAShortCurrentValue<MALongCurrentValue&&MAShortPrevValue>MALongPrevValue
      &&VolCurrentValue>VolPrevValue)
     {
      Comment("Short signal");
     }

Ao compilar este código, nós encontraremos o EA no Navegador:

Vol Nav6

Ao arrastá-lo e soltá-lo no gráfico, o EA será anexado:

MA_Vol anexado

Veja a seguir um exemplo dos sinais gerados com base nessa estratégia:

Sinal de compra:

MA_Vol sinal de compra

Sinal de venda:

 MA_Vol sinal de venda

 


Conclusão

Espero ter abordado bem o tópico deste indicador técnico útil e que você tenha aprendido como usar o indicador de volume adequadamente para aprimorar a sua negociação. Nós aprendemos o que é o indicador de volume, o que ele mede, como nós podemos lê-lo e como podemos usá-lo. Identificamos a diferença entre o volume nos mercados de câmbio e de ações através do tópico Definição do volume. Nós aprendemos também algumas estratégias simples de volume:

  • Vol - movimento: para nos informar sobre o movimento do volume se for aumentado ou diminuído.
  • Vol - força: para nos informar a força do movimento do volume atual em comparação com a média do volume.
  • Preço e Vol - tendência de alta: para obter um sinal de compra durante a tendência de alta com base no movimento dos preços e no volume que o acompanha.
  • Preço e Vol - tendência de baixa: para obter um sinal de venda durante a tendência de baixa com base no movimento dos preços e no volume que o acompanha.
  • Estratégia MA e Vol: para obter sinais de compra e venda com base no cruzamento entre as médias móveis e o volume de acompanhamento.

Essas estratégias mencionadas podem ser usadas mesmo após testes e otimização, se necessário, com base no conceito básico do indicador. Nós aprendemos tudo isso através do tópico da estratégia de Volumes. Nós aprendemos como criar um esquema passo a passo para cada estratégia para nos ajudar a organizar nossas ideias e criar um sistema de negociação para cada estratégia mencionada através do tópico esquema da estratégia de Volumes. Então, nós aprendemos a parte mais interessante deste artigo, ou seja, como criar um sistema de negociação em MQL5 para cada estratégia e gerar sinais de forma automática e precisa para poder usá-los na plataforma de negociação MetaTrader 5.

É importante confirmar novamente que você deve testar qualquer estratégia antes de usá-la em sua conta real, pois isso pode não ser útil para você, pois não há nada adequado para todas as pessoas. Espero que você ache este artigo útil e encontre novas ideias relacionadas ao tópico do artigo ou a qualquer outro tópico relacionado. Você também pode tentar pensar em como combinar esse indicador com outras ferramentas técnicas para ser mais significativo da mesma forma que fizemos no artigo, combinando o volume com as médias móveis, pois essa é uma abordagem muito perspicaz. Se você quiser ler mais artigos semelhantes, leia meus outros artigos da série sobre como projetar um sistema de negociação com base nos indicadores técnicos mais populares. Espero que sejam úteis a você.

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

Letreiro de Cotação — Versão Básica Letreiro de Cotação — Versão Básica
Aqui irei mostrar como criar aquelas faixas, normalmente usadas para mostrar cotações no caso das plataformas, mas usando pura e simplesmente MQL5, nada de programação externa complicada ou cheia de frescura.
Gráfico de montanha ou gráfico Iceberg Gráfico de montanha ou gráfico Iceberg
Que tal adicionar um novo tipo de gráfico ao MetaTrader 5 ? Muita gente diz, que ele carece de algumas coisas, que já estão presentes em outras plataformas, mas a verdade, é que o MetaTrader 5, é uma plataforma muito prática, que nos permite fazer coisas, que em muitas das outras, não é possível de ser feita, pelo menos, não com tanta facilidade.
Ciência de Dados e Aprendizado de Máquina (Parte 05): Árvores de Decisão Ciência de Dados e Aprendizado de Máquina (Parte 05): Árvores de Decisão
As árvores de decisão imitam a maneira como os humanos pensam para classificar os dados. Vamos ver como construir árvores e usá-las para classificar e prever alguns dados. O principal objetivo do algoritmo de árvores de decisão é separar os dados impuros em puros ou próximos a nós.
Como desenvolver um sistema de negociação baseado no indicador MFI Como desenvolver um sistema de negociação baseado no indicador MFI
O novo artigo de nossa série sobre como projetar um sistema de negociação baseado nos indicadores técnicos mais populares considera um novo indicador técnico - o Índice de Fluxo de Dinheiro (MFI). Estudaremos este indicador em detalhes e aprenderemos a desenvolver um sistema de negociação simples utilizando a linguagem MQL5 para, posteriormente, executá-lo na MetaTrader 5.