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

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

MetaTrader 5Negociação | 17 outubro 2022, 10:19
606 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 nos indicadores técnicos mais populares. Nós aprenderemos neste novo artigo uma nova ferramenta em detalhes que pode ser usada para aprimorar nossa negociação e nós aprenderemos como criar um sistema de negociação baseado no conceito básico por trás dele. Este novo indicador é o indicador Desvio Padrão. Nós abordaremos esse indicador em detalhes através dos seguintes tópicos:

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

Através do tópico da definição do Desvio Padrão, nós aprenderemos com mais detalhes o que é Desvio Padrão, o que ele mede e como nós podemos calculá-lo manualmente para aprender o conceito básico por trás dele, depois aplicaremos isso a um exemplo para calcular o valor do desvio padrão. Passaremos depois para o próximo tópico que é a estratégia do desvio padrão para aprender como nós podemos usar o indicador de desvio padrão através das estratégias simples baseadas no conceito básico do indicador. Em seguida, nós passaremos para o próximo tópico, que é o esquema da estratégia utilizando o Desvio Padrão para desenvolver um esquema para cada estratégia para nos ajudar a criar um sistema de negociação, pois este esquema será um plano passo a passo para organizar as ideias para criar esse sistema de negociação suavemente. Depois disso, nós passaremos para o tópico mais interessante deste artigo que é o sistema de negociação utilizando o Desvio Padrão para criar um sistema de negociação para cada estratégia mencionada e usá-la na MetaTrader 5 para gerar os sinais automaticamente.

Usaremos o MetaTrader 5 e o MetaEditor para escrever os códigos em MQL5 (MetaQuotes Language) para criar o nosso sistema de negociação, se você não sabe como baixar e usar o MetaEditor, você pode ler o tópico Escrevendo o código em MQL5 no MetaEditor de um artigo anterior para saber mais sobre isso.

Eu aconselho que você aplique o que você aprendeu sozinho para aprofundar a sua compreensão e obter mais informações sobre o tópico ou qualquer tópico relacionado para obter o máximo benefício das informações do artigo. Além disso, você deve testar qualquer estratégia antes de usá-la em sua conta real para ter certeza de que ela será útil para você, pois não há nada adequado para todas as pessoas.

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 começar os nossos tópicos para aprender a nossa nova ferramenta.


Definição do Desvio Padrão

Neste tópico, nós aprenderemos o que é o indicador Desvio Padrão com mais detalhes, definindo-o, aprendendo o que ele mede e como nós podemos calculá-lo manualmente para aprender o conceito básico por trás dele. Em seguida, nós aplicaremos esse cálculo em um exemplo.

O Desvio Padrão é um termo em estatística. este termo estatístico mede a dispersão em torno da média. Mas o que é dispersão, simplesmente, é a diferença entre qualquer valor real e a média. quanto maior a dispersão, maior o Desvio Padrão. Quanto menor a dispersão, menor o Desvio Padrão. O indicador de desvio padrão mede a volatilidade.

Agora, nós precisamos aprender como nós podemos calcular o Desvio Padrão. Nós podemos fazer isso facilmente através dos seguintes passos:

1- Calcular a média do período desejado.

2- Calcular o desvio subtraindo cada preço de fechamento da sua média.

3- Elevar ao quadrado cada desvio calculado.

4- Somar o desvio ao quadrado e dividir pelo número de observações.

5- Calcular o desvio padrão que é igual à raiz quadrada do resultado do passo quatro.

A seguir está um exemplo para aplicar este cálculo para aprofundar a nossa compreensão. Se nós tivermos os seguintes dados de um instrumento.

# Preço de fechamento
1 1.05535
2 1.05829
3 1.0518
4 1.04411
5 1.04827
6 1.04261
7 1.04221
8 1.02656
9 1.01810
10 1.01587
11 1.01831

Primeiro passo: nós calcularemos a média móvel de 10 períodos e consideraremos que toda MA até o décimo valor terá a mesma média móvel. Então, temos o seguinte resultado após calcular isso.

Passo 1

Passo dois: Calcular o desvio. A seguir está o resultado após o cálculo.

Passo 2

Passo três: Calcular o desvio ao quadrado.

Passo três

Passo quatro: Calcular a média de 10 períodos do desvio ao quadrado.

Passo 4

Passo 5: Calcular o desvio padrão = Raiz quadrada do resultado da etapa quatro.

Passo 5

Repetindos estes passos, nós podemos calculamos o valor do Desvio Padrão. Hoje em dia, temos muita sorte, pois não precisamos calculá-lo manualmente, pois é um indicador embutido na plataforma de negociação MetaTrader 5. Tudo o que nós precisamos fazer é selecioná-lo entre os indicadores disponíveis na plataforma de negociação. A seguir encontramos como nós pode fazer isso.

Ao abrir a plataforma de negociação MetaTrader 5, pressionaremos a guia Inserir --> Indicadores --> Tendência --> Desvio Padrão.

 Inserção do Std Dev

Depois disso, nós encontraremos a seguinte janela para os parâmetros do indicador.

 Parâmetros Std Dev

1- Determina o período que nós utilizaremos.

2- Determina a quantidade do deslocamento horizontal para a linha do indicador se nós quisermos fazer isso.

3- Seleciona o tipo da média móvel.

4- Seleciona os tipos de preço que utilizaremos no cálculo.

5- Determina a cor da linha do indicador.

6- Determina o estilo da linha.

7- Determina a espessura da linha.

Após determinar os parâmetros desejados, nós podemos encontrar o indicador inserido no gráfico como a seguir.

 Indicador Std Dev anexado

Como nós podemos ver na imagem anterior, o Desvio Padrão está inserido e nós podemos encontrá-lo na janela inferior como uma linha de oscilação baseada no valor do Desvio Padrão.

Por meio deste tópico, nós aprendemos com mais detalhes sobre o indicador de Desvio Padrão, pois aprendemos o que ele é, o que ele mede e como nós podemos calculá-lo manualmente para entender o conceito básico por trás dele e aplicar esse cálculo em um exemplo.


Estratégia do Desvio Padrão

Após conhecermos detalhadamente o indicador de Desvio Padrão e o seu conceito principal, nós aprenderemos como usar o indicador de Desvio Padrão com base no conceito básico por trás dele. Nós aprenderemos como usar o indicador de Desvio Padrão por meio das três estratégias simples. O primeiro, Std Dev simples - Volatilidade, ele será usado para saber se há volatilidade ou não. Para o segundo, Std Dev simples - Std e MA, nós vamos usá-lo acompanhado da média móvel para obter os sinais de compra ou venda. O terceiro, Std Dev simples - Std, AVG e MA, será usado acompanhado de uma média móvel após ver alta volatilidade para obter os sinais de compra ou venda.

  • Estratégia um: Std Dev simples - Volatilidade:

Com base nessa estratégia, nós precisamos medir a volatilidade com base na comparação entre o Std Dev atual e a média dos cinco valores anteriores de Std. Se o Std Dev atual for maior que a média de 5 períodos do Std Dev, este será um sinal de alta volatilidade. Se o Std atual for menor que a média de 5 períodos do Std Dev, este será um sinal de baixa volatilidade.

Std atual > Std AVG --> alta volatilidade

Std atual < Std AVG --> baixa volatilidade

  • Estratégia dois: Std Dev simples - Std e MA:

Com base nessa estratégia, nós precisamos obter os sinais de compra e venda com base nas condições específicas. Se o Std Dev atual for maior que o Std Dev anterior e o valor de Ask for maior que a média móvel, isso será um sinal de compra. Se o Std Dev atual for maior que o Std Dev anterior e o valor de Bid for menor que a média móvel, isso será um sinal de venda.

Std atual > Prev. Std e Ask > MA --> Sinal de compra

Std atual > Prev. Std e Bid < MA --> Sinal de venda

  • Estratégia três: Std Dev simples - Std, Std AVG e MA:

Com base nessa estratégia, nós precisamos obter os sinais de compra e venda com base em outras condições. Se o Std Dev atual for maior que Std Dev Avg e Ask for maior que a média móvel, isso será um sinal de compra. Se o Std Dev atual for maior que Std Dev Avg e Bid for menor que a média móvel, isso será um sinal de venda.

Std atual > Std Avg e Ask > MA --> Sinal de compra

Std atual > Std Avg e Bid < Ma --> Sinal de venda

Através da estratégia anterior, nós aprendemos como usar o indicador de desvio padrão por meio de três estratégias simples para medir a volatilidade e obter sinais os de compra e venda com base em dois conjuntos diferentes de condições. Você também pode tentar mesclar outros indicadores técnicos para obter mais informações sobre mais de uma perspectiva do instrumento financeiro com base em seu plano e estratégia de negociação.


Esquema da estratégia do Desvio Padrão

Neste tópico, nós aprenderemos como criar um esquema passo a passo para cada estratégia e nos ajudar a criar um sistema de negociação com base em cada estratégia mencionada. Na minha opinião, esta etapa é muito importante, pois nos ajudará a organizar nossas ideias de uma maneira que nos ajude a criar o nosso sistema de negociação de maneira suave e fácil. Agora eu vou apresentar um esquema que pode ser útil para informar ao computador o que nós precisamos fazer exatamente.

  • Estratégia um: Std Dev simples - Volatilidade:

De acordo com essa estratégia, nós precisamos que o sistema de negociação verifique dois valores e faça uma comparação entre eles continuamente. Esses dois valores são os Std Dev atual e o Std Dev Average dos cinco valores anteriores. Depois disso, nós precisamos que o sistema de negociação decida qual é maior que o outro. Se o Std Dev atual for maior que a média, nós precisamos ver um comentário no gráfico com,

  • Alta Volatilidade.
  • Valor Std Dev atual.
  • Valor da média de 5 períodos do Std Dev.

Se o Std Dev atual for menor que a média, nós precisamos ver um comentário no gráfico com,

  • Baixa Volatilidade.
  • Valor Std Dev atual.
  • Valor da média de 5 períodos do Std Dev.
Encontramos na imagem a seguir o esquema passo a passo da estratégia Std Dev simples - Volatilidade.

Esquema Std Dev simples - Volatilidade

  • Estratégia dois: Std Dev simples - Std e MA:

De acordo com essa estratégia, nós precisamos que o sistema de negociação verifique os quatro valores e faça uma comparação continuamente. Esses quatro valores são o Std Dev atual, Std Dev anterior, Ask e o valor da média móvel. Após verificar esses valores, nós precisamos que o sistema de negociação tome uma decisão e mostre um sinal adequado com base nisso.

Se o Std Dev atual for maior que o Std Dev anterior e o valor de Ask for maior que a média móvel, nós precisamos que o sistema de negociação gere um comentário no gráfico com os seguintes valores:

  • Sinal de compra.
  • Valor Std Dev atual.
  • Valor do Std Dev anterior.
  • Valor de Ask.
  • Valor da média móvel.

Se o Std Dev atual for maior que o Std Dev anterior e o valor de Bid for menor que a média móvel, nós precisamos que o sistema de negociação gere um comentário no gráfico com os seguintes valores:

  • Sinal de venda.
  • Valor Std Dev atual.
  • Valor do Std Dev anterior.
  • Valor de Bid.
  • Valor da média móvel.
Encontramos na imagem a seguir o esquema passo a passo da estratégia Std Dev simples - Std e MA.

 Esquema Std Dev simples - Std _ MA

  • Estratégia três: Std Dev simples - Std, Avg e MA:

De acordo com essa estratégia, precisamos que o sistema de negociação verifique quatro valores continuamente para decidir qual sinal precisamos ver com base na comparação entre esses valores. Esses valores são o Std Dev atual, Std Dev Avg, Ask e a média móvel.

Se o valor do Std atual for maior que o Std Dev Avg e Ask for maior que a média móvel, nós precisamos que o sistema de negociação gere um sinal como um comentário no gráfico com os seguintes valores:

  • Sinal de compra.
  • Valor Std Dev atual.
  • Valor da média de Std Dev.
  • Valor de Ask.
  • Valor da média móvel.

Se o Std Dev atual for maior que a média do Std Dev e Bid for menor que a média móvel, nós precisamos que o sistema de negociação gere um sinal como um comentário no gráfico com os seguintes valores:

  • Sinal de venda.
  • Valor Std Dev atual.
  • Valor da média de Std Dev.
  • Valor de Bid.
  • Valor da média móvel.
Encontramos na imagem a seguir o esquema passo a passo da estratégia Std Dev simples - Std e MA.

Esquema Std Dev simples - Std Dev _ AVG _ MA

Neste tópico, nós aprenderemos como criar um esquema passo a passo para cada estratégia e nos ajudar a criar um sistema de negociação com base em cada estratégia mencionada. 


Sistema de negociação utilizando o Desvio Padrão

Neste tópico, nós aprendemos como desenvolver um sistema de negociação para cada estratégia mencionada pelo MQL5 e como aplicar na MetaTrader 5. Primeiro, nós desenvolveremos um sistema de negociação simples para o Desvio Padrão que exibirá um comentário no gráfico com o valor do indicador Desvio Padrão. Isso servirá de base para todos os outros sistemas.  

  • Criando uma matriz do Std Dev usando a função "double" que representa os valores fracionários. O tipo de dado double é um dos tipos de ponto flutuante.
double StdDevArray[];
  • Ordenaremos essa matriz com os dados atuais e faremos isso usando a função "ArraySetAsSeries" para retornar um valor booleano igual a true ou false. Os parâmetros do "ArraySetAsSeries" são:
    • Uma matriz[]
    • Sinalizador
ArraySetAsSeries(StdDevArray,true);
  • Criaremos uma variável inteira do StdDevDef para definir o Desvio Padrão usando a função "iStdDev" que retorna o identificador do indicador de Desvio Padrão. Os parâmetros desta função são:
    • símbolo, para definir o nome do símbolo, nós especificaremos "_Symbol" a ser aplicado no gráfico atual.
    • period, para definir o período de tempo, especificaremos "_Period" a ser aplicado aos períodos atuais.
    • ma_period, para definir o período da média móvel, nós definiremos 20 como padrão.
    • ma_shift, para definir o deslocamento horizontal, caso desejar, definiremos um valor igual a 0.
    • ma_method, para determinar o tipo da média móvel, nós usaremos a média móvel simples(MODE_SMA).
    • applied_price, para determinar o tipo do preço a ser utilizado, nós utilizaremos o preço de fechamento (PRICE_CLOSE).
int StdDevDef = iStdDev(_Symbol,_Period,20,0,MODE_SMA,PRICE_CLOSE);
  • Copiamos os dados de preço para a matriz StdDev usando a função "CopyBuffer" para retornar a contagem de dados copiados ou -1 se houver um erro. Os parâmetros desta função são:
    • indicador_handle, manipulador do indicador "StdDevDef".
    • buffer_num, para definir o número do buffer do indicador, definiremos um valor igual a 0.
    • start_pos, para definir a posição inicial, definiremos um valor igual a 0.
    • count, para definir a quantidade a ser copiada, definiremos um valor igual a 3.
    • buffer[], para determinar a matriz de destino a ser copiada, nós determinaremos a "StdDevArray".
CopyBuffer(StdDevDef,0,0,3,StdDevArray);
  • Obtemos o valor de StdDev usando a função "NormalizeDouble" do tipo double após criar uma variável do tipo double de "StdDevVal". Os parâmetros do "Normalizeddouble" são:
    • value, para determinar o número normalizado, nós especificaremos "StdDevArray[0]"
    • dígitos, para determinar o número de dígitos após o ponto decimal, determinaremos 6.
double StdDevVal = NormalizeDouble(StdDevArray[0],6);
  • Exibir um comentário no gráfico com o valor de StdDev atual usando a função "Comment", não há valor de retorno, mas ele gerará um comentário no gráfico.
Comment("StdDev Value is",StdDevVal);

 Após compilar esse código, nós descobriremos que não há erros ou avisos. Em seguida, nós encontraremos o expert deste sistema de negociação na janela do navegador da seguinte forma:

Std Dev n1

Ao arrastar e soltar no gráfico desejado para executá-lo, a janela deste sistema de negociação aparecerá da seguinte forma:

Janela Std Dev simples

Após marcar "Permitir a Negociação Automatizada" pressionando o botão "OK", é possível encontrar o expert advisor anexado ao gráfico igual à imagem a seguir:

 Std Dev simples anexado

É possível visualizar no canto direito da imagem anterior que o expert está anexado ao gráfico.

A imagem a seguir é um exemplo de teste exibindo o sinal gerado de acordo com este sistema de negociação.

Sinal Std Dev simples

A imagem a seguir é outro exemplo depois de anexar o expert deste sistema de negociação para gerar os sinais automaticamente e, ao mesmo tempo, inseriremos o indicador de desvio padrão integrado para garantir que ambos os valores de StdDev sejam os mesmos.

 Mesmo sinal de Std Dev simples 

  • Estratégia um: Std Dev simples - Volatilidade:

Agora, nós vamos criar um sistema de negociação para a estratégia Std Dev simples - Volatilidade. Segue o código completo para criar um sistema de negociação baseado nesta estratégia:

//+------------------------------------------------------------------+
//|                                  Simple Std Dev - Volatility.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()
  {
   double StdDevArray[];

   ArraySetAsSeries(StdDevArray,true);

   int StdDevDef = iStdDev(_Symbol,_Period,20,0,MODE_SMA,PRICE_CLOSE);

   CopyBuffer(StdDevDef,0,0,6,StdDevArray);

   double StdDevVal = NormalizeDouble(StdDevArray[0],6);
   double StdDevVal1 = NormalizeDouble(StdDevArray[1],6);
   double StdDevVal2 = NormalizeDouble(StdDevArray[2],6);
   double StdDevVal3 = NormalizeDouble(StdDevArray[3],6);
   double StdDevVal4 = NormalizeDouble(StdDevArray[4],6);
   double StdDevVal5 = NormalizeDouble(StdDevArray[5],6);
   double StdDevAVGVal = ((StdDevVal1+StdDevVal2+StdDevVal3+StdDevVal4+StdDevVal5)/5);

   if(StdDevVal>StdDevAVGVal)
     {
      Comment("High volatility","\n",
              "Current Std Dev value is ",StdDevVal,"\n",
              "Std Dev Avg value is ",StdDevAVGVal);
     }

   if(StdDevVal<StdDevAVGVal)
     {
      Comment("Low volatility","\n",
              "Current Std Dev value is ",StdDevVal,"\n",
              "Std Dev Avg value is ",StdDevAVGVal);
     }

  }
//+------------------------------------------------------------------+

A seguir estão as diferenças neste código:

Definimos não apenas o valor atual de Std Dev, mas definiremos os cinco valores anteriores usando a mesma função que define o valor atual, mas nós usaremos um número diferente no número normalizado para fornecer o valor desejado.

double StdDevVal1 = NormalizeDouble(StdDevArray[1],6);
double StdDevVal2 = NormalizeDouble(StdDevArray[2],6);
double StdDevVal3 = NormalizeDouble(StdDevArray[3],6);
double StdDevVal4 = NormalizeDouble(StdDevArray[4],6);
double StdDevVal5 = NormalizeDouble(StdDevArray[5],6);

Calculamos a média dos cinco valores anteriores.

double StdDevAVGVal = ((StdDevVal1+StdDevVal2+StdDevVal3+StdDevVal4+StdDevVal5)/5);

Condições da estratégia:

No caso de alta volatilidade,

   if(StdDevVal>StdDevAVGVal)
     {
      Comment("High volatility","\n",
              "Current Std Dev value is ",StdDevVal,"\n",
              "Std Dev Avg value is ",StdDevAVGVal);
     }

No caso de baixa volatilidade,

   if(StdDevVal<StdDevAVGVal)
     {
      Comment("Low volatility","\n",
              "Current Std Dev value is ",StdDevVal,"\n",
              "Std Dev Avg value is ",StdDevAVGVal);
     }

Depois de compilar este código, nós vamos encontrá-lo no navegador da mesma forma que a seguir:

 Std Dev n2

Ao arrastá-lo e soltá-lo no gráfico desejado, encontraremos a janela desse sistema de negociação igual ao seguinte.

 Janela Std Dev simples - Volatilidade

Após pressionar "OK", nós podemos encontrar o expert advisor anexado ao gráfico igual à imagem a seguir:

Std Dev simples - Volatilidade anexado

Podemos ver o expert do sistema de negociação Std Dev simples - Volatilidade está anexado da mesma forma que podemos ver no canto superior direito da imagem anterior.

Podemos ver os exemplos dos sinais gerados de acordo com este sistema de negociação testando da mesma forma que as imagens a seguir:

Em caso de alta volatilidade de acordo com esta estratégia,

 Std Dev simples - Volatilidade - sinal de alta volatilidade

Na imagem anterior, nós encontramos no canto superior esquerdo do gráfico três linhas de comentários:

  • A exibição de alta volatilidade.
  • Valor Std Dev atual.
  • A média anterior de 5 períodos de Std Dev.

No caso de baixa volatilidade de acordo com esta estratégia,

Std Dev simples - Volatilidade - sinal de baixa volatilidade

Na imagem anterior, podemos ver no canto superior esquerdo do gráfico outras três linhas de comentários para nos informar:

  • A volatilidade está baixa.
  • O valor atual de Std Dev.
  • A média anterior de 5 períodos do Std Dev.
Através do anterior, nós aprendemos como criar um sistema de negociação que pode gerar um sinal para nos informar sobre a volatilidade como uma medida.
  • Estratégia dois: Std Dev simples - Std e MA:

O código a seguir mostra como criar um sistema de negociação para esta estratégia do Std Dev simples - Std e MA:

//+------------------------------------------------------------------+
//|                                    Simple Std Dev - Std & MA.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()
  {
   double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
   double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);

   double StdDevArray[];
   double PArray[];

   ArraySetAsSeries(StdDevArray,true);
   ArraySetAsSeries(PArray,true);

   int StdDevDef = iStdDev(_Symbol,_Period,20,0,MODE_SMA,PRICE_CLOSE);
   int MADef = iMA(_Symbol,_Period,10,0,MODE_SMA,PRICE_CLOSE);

   CopyBuffer(StdDevDef,0,0,3,StdDevArray);
   CopyBuffer(MADef,0,0,10,PArray);

   double StdDevVal = NormalizeDouble(StdDevArray[0],6);
   double StdDevVal1 = NormalizeDouble(StdDevArray[1],6);

   double MAValue = NormalizeDouble(PArray[0],6);


   if(StdDevVal>StdDevVal1&&Ask>MAValue)
     {
      Comment("Buy signal","\n",
              "Current Std Dev value is ",StdDevVal,"\n",
              "Previous Std Dev value is ",StdDevVal1,"\n",
              "Ask value is ",Ask,"\n",
              "MA value is ",MAValue);
     }

   if(StdDevVal>StdDevVal1&&Bid<MAValue)
     {
      Comment("Sell signal","\n",
              "Current Std Dev value is ",StdDevVal,"\n",
              "Previous Std Dev value is ",StdDevVal1,"\n",
              "Bid value is ",Bid,"\n",
              "MA value is ",MAValue);
     }

  }

//+------------------------------------------------------------------+

A seguir estão as diferenças neste código:

Definimos os valores de Ask e Bid através da criação das variáveis do tipo double para todos, usamos a função "NormalizeDouble" para retornar um valor do tipo double e, em seguida, usamos o "SymbolInfoDouble" como um número normalizado para retornar a propriedade correspondente de um símbolo específico. Os parâmetros do "SymbolInfoDouble" são:

  • nome do símbolo, nós usaremos o "_Symbol" para ser aplicado no gráfico de símbolos atual.
  • prop_id, para definir a propriedade, que é a "SYMBOL_ASK".
double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);

Criamos uma ou mais matrizes de preços.

double PArray[];

Ordenamos esta matriz de dados atuais.

ArraySetAsSeries(PArray,true);

Definimos a média móvel usando a função "iMA" após criar uma variável do tipo inteiro de MADef.

int MADef = iMA(_Symbol,_Period,10,0,MODE_SMA,PRICE_CLOSE);

Copiamos os dados de preço para este array criado.

CopyBuffer(MADef,0,0,10,PArray);

Definimos o valor anterior de Std Dev.

double StdDevVal1 = NormalizeDouble(StdDevArray[1],6);

Definimos o valor da média móvel.

double MAValue = NormalizeDouble(PArray[0],6);

Condições da estratégia:

Em caso de sinal de compra,

   if(StdDevVal>StdDevVal1&&Ask>MAValue)
     {
      Comment("Buy signal","\n",
              "Current Std Dev value is ",StdDevVal,"\n",
              "Previous Std Dev value is ",StdDevVal1,"\n",
              "Ask value is ",Ask,"\n",
              "MA value is ",MAValue);
     }

Em caso de sinal de venda,

   if(StdDevVal>StdDevVal1&&Bid<MAValue)
     {
      Comment("Sell signal","\n",
              "Current Std Dev value is ",StdDevVal,"\n",
              "Previous Std Dev value is ",StdDevVal1,"\n",
              "Bid value is ",Bid,"\n",
              "MA value is ",MAValue);
     }

Após compilar este código, nós vamos encontrá-lo na janela do navegador da mesma forma que a imagem a seguir:

 Std Dev n3

Ao clicar duas vezes, nós podemos encontrar a seguinte janela deste expert advisor igual à imagem a seguir:

Janela Std Dev simples MA

Após marcar "Permitir a Negociação Automatizada" pressionando o botão "OK", é possível encontrar o expert advisor anexado ao gráfico igual à imagem a seguir:

Std Dev simples anexado

É possível ver no canto superior direito do gráfico que o expert advisor está anexado, nós podemos ver os exemplos de testes de acordo com essa estratégia da mesma forma que os exemplos a seguir.

No caso do sinal de compra,

 Std Dev simples - Std _ MA - sinal de compra

Como nós podemos ver no exemplo anterior do sinal de compra, nós temos cinco linhas de comentários no canto superior esquerdo do gráfico:

  • Sinal de compra
  • Valor do Std Dev Atual
  • Valor do Std Dev anterior
  • Valor de Ask
  • Valor da Ma

Em caso de sinal de venda,

 Std Dev simples - Std _ MA - sinal de venda

Como nós podemos ver no exemplo anterior do sinal de venda, nós temos cinco linhas de comentários no canto superior esquerdo do gráfico:

  • Sinal de venda
  • Valor do Std Dev Atual
  • Valor do Std Dev anterior
  • Valor de Bid
  • Valor da Ma

Através da estratégia anterior, nós aprendemos como criar um sistema de negociação que pode ser usado para gerar os sinais de compra ou venda com base no desvio padrão e na média móvel.

  • Estratégia três: Std Dev simples - Std Dev, Std AVG e MA:

Segue o código completo para criar um sistema de negociação baseado nesta estratégia:

//+------------------------------------------------------------------+
//|                  Simple Std Dev - Std Dev & AVG Std Dev & MA.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()
  {
   double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
   double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);
   
   double StdDevArray[];
   double PArray[];

   ArraySetAsSeries(StdDevArray,true);
   ArraySetAsSeries(PArray,true);

   int StdDevDef = iStdDev(_Symbol,_Period,20,0,MODE_SMA,PRICE_CLOSE);
   int MADef = iMA(_Symbol,_Period,10,0,MODE_SMA,PRICE_CLOSE);

   CopyBuffer(StdDevDef,0,0,6,StdDevArray);
   CopyBuffer(MADef,0,0,10,PArray);

   double StdDevVal = NormalizeDouble(StdDevArray[0],6);
   double StdDevVal1 = NormalizeDouble(StdDevArray[1],6);
   double StdDevVal2 = NormalizeDouble(StdDevArray[2],6);
   double StdDevVal3 = NormalizeDouble(StdDevArray[3],6);
   double StdDevVal4 = NormalizeDouble(StdDevArray[4],6);
   double StdDevVal5 = NormalizeDouble(StdDevArray[5],6);
   double StdDevAVGVal = ((StdDevVal1+StdDevVal2+StdDevVal3+StdDevVal4+StdDevVal5)/5);
   double MAValue = NormalizeDouble(PArray[0],6);

   if(StdDevVal>StdDevAVGVal&&Ask>MAValue)
     {
      Comment("Buy signal","\n",
              "Current Std Dev value is ",StdDevVal,"\n",
              "Std Dev Avg value is ",StdDevAVGVal,"\n",
              "Ask value is ",Ask,"\n",
              "MA value is ",MAValue);
     }

   if(StdDevVal>StdDevAVGVal&&Bid<MAValue)
     {
      Comment("Sell signal","\n",
              "Current Std Dev value is ",StdDevVal,"\n",
              "Std Dev Avg value is ",StdDevAVGVal,"\n",
              "Bid value is ",Bid,"\n",
              "MA value is ",MAValue);
     }

  }
  
//+------------------------------------------------------------------+

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

Condições da estratégia,

No caso do sinal de compra,

   if(StdDevVal>StdDevAVGVal&&Ask>MAValue)
     {
      Comment("Buy signal","\n",
              "Current Std Dev value is ",StdDevVal,"\n",
              "Std Dev Avg value is ",StdDevAVGVal,"\n",
              "Ask value is ",Ask,"\n",
              "MA value is ",MAValue);
     }

No caso do sinal de venda,

   if(StdDevVal>StdDevAVGVal&&Bid<MAValue)
     {
      Comment("Sell signal","\n",
              "Current Std Dev value is ",StdDevVal,"\n",
              "Std Dev Avg value is ",StdDevAVGVal,"\n",
              "Bid value is ",Bid,"\n",
              "MA value is ",MAValue);
     }

Após compilar este código, nós podemos encontrar o expert na janela do navegador igual a imagem a seguir:

 Std Dev n4

Após clicar duas vezes ou arrastá-lo e soltá-lo no gráfico, nós podemos encontrar a janela do mesmo da seguinte forma:

Janela Std Dev simples - Std Dev _ AVG _ MA

Após pressionar "OK", nós podemos encontrar o expert advisor anexado ao gráfico igual à imagem a seguir:

 Std Dev simples - Std Dev _ AVG _ MA anexado

É possível visualizar no canto direito da imagem anterior que o expert está anexado ao gráfico.

Agora, nós precisamos ver os exemplos dos sinais gerados com base neste sistema de negociação e podemos ver isso através dos seguintes exemplos:

No caso do sinal de compra,

Std Dev simples - Std Dev _ AVG _ MA - sinal de compra

Na imagem anterior, nós encontramos no canto superior esquerdo do gráfico 5 linhas de comentários que o sistema de negociação gerou:

  • Sinal de compra
  • Valor do Std Dev Atual
  • Valor da média do Std Dev
  • Valor de Ask
  • Valor de Ma

No caso do sinal de venda,

 Std Dev simples - Std Dev _ AVG _ MA - sinal de venda

Como nós podemos ver no exemplo anterior do sinal de venda, há cinco linhas de comentários no gráfico com base neste sistema de negociação:

  • Sinal de venda
  • Valor do Std Dev Atual
  • Valor da média do Std Dev
  • Valor de Bid
  • Valor de Ma

Nós aprendemos a criar sistemas de negociação baseados em cada uma das estratégias analisadas. Todas elas geram sinais de acordo com as instruções mostradas nos esquemas anteriores.


Conclusão

Dedicamos este artigo ao indicador de desvio padrão. Da mesma forma, aprendemos o que ele mede, para que ele serve e como ele é calculado, também vimos um exemplo de cálculo com os dados reais. Usando o exemplo de várias estratégias simples, vimos como nós podemos usar o desvio padrão na negociação. Depois de entender muito bem esse indicador, aprendemos como nós podemos usá-lo através de estratégias simples baseadas no conceito básico deste indicador. Aprendemos a usá-lo como uma medida de volatilidade através da estratégia Std Dev simples - volatilidade. Como usá-lo para obter sinais de compra ou venda com base em duas condições diferentes através da estratégia Std Dev simples - Std e MA e da Std, Std AVG, MA. Após isso, nós aprendemos a desenvolver um esquema passo a passo para cada uma das estratégias analisadas, que são usadas para desenvolver sistemas de negociação baseados nelas de maneira suave e fácil. Finalmente, nós criamos os sistemas de negociação em MQL5 com base nas estratégias consideradas. Tais sistemas devem ser usados ​​na plataforma MetaTrader 5 para a geração automática dos sinais. Os sistemas nos ajudarão a economizar tempo, obter sinais mais precisos e evitar erros derivados de emoções e subjetividade: essa é a vantagem da programação.

Será útil se você tentar combinar este indicador com outros indicadores técnicos para obter mais "insights" e visualizá-los de outras perspectivas. Essa é uma das características da análise técnica ao desenvolver um sistema de negociação, ele pode ser usado para fornecer insights claros sobre os fatores mais importantes de algum instrumento financeiro.

Mais uma vez, como nos artigos anteriores, insistimos que é muito importante testar minuciosamente todo o material antes de aplicá-lo a uma conta real. Afinal, o que funciona para os outros pode não funcionar para você. Espero que você ache este artigo útil, entendendo o tópico dele e obtendo novas ideias que podem ser úteis para aprimorar a sua negociação.

Se você gostou deste artigo e o achou útil, leia os artigos anteriores da mesma série para aprender como desenvolver um sistema de negociação baseado nos indicadores técnicos mais populares.

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

Como desenvolver um sistema de negociação baseado no indicador Oscilador de Chaikin Como desenvolver um sistema de negociação baseado no indicador Oscilador de Chaikin
Bem-vindo ao nosso novo artigo da série sobre como desenvolver um sistema de negociação com base nos indicadores técnico mais populares. Através deste novo artigo, nós aprenderemos como desenvolver um sistema de negociação pelo indicador Oscilador de Chaikin.
Aprendendo a construindo um EA que opera de forma automática (Parte 01): Conceitos e estruturas Aprendendo a construindo um EA que opera de forma automática (Parte 01): Conceitos e estruturas
Aprenda como criar um EA que opera de forma automática, isto de forma simples e o mais seguro possível.
DoEasy. Controles (Parte 10): Objetos WinForms, dando vida à interface DoEasy. Controles (Parte 10): Objetos WinForms, dando vida à interface
Chegou a hora de dar vida à interface gráfica e criar funcionalidades para a interação de objetos com o usuário e outros objetos. E para que objetos mais complexos funcionem corretamente, já precisamos que os objetos interajam entre si e interajam com o usuário.
O modelo de movimento de preços e suas principais disposições (Parte 2): Equação da evolução do campo probabilístico do preço e a ocorrência do passeio aleatório observado O modelo de movimento de preços e suas principais disposições (Parte 2): Equação da evolução do campo probabilístico do preço e a ocorrência do passeio aleatório observado
O artigo considera a equação da evolução do campo probabilístico do preço e o critério do próximo salto do preço. Ela também revela a essência dos valores dos preços nos gráficos e o mecanismo para a ocorrência de um passeio aleatório desses valores.