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

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

MetaTrader 5Negociação | 2 dezembro 2022, 16:33
477 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

Introdução

Aqui está um novo artigo em nossa série sobre como desenvolver um sistema de negociação com base nos indicadores técnicos mais populares para iniciantes, aprendendo a raiz das coisas. Nós aprenderemos uma nova ferramenta técnica neste artigo e ele será o indicador Awesome Oscillator, pois iremos identificá-lo com mais detalhes para aprender o que ele é, o que ele mede e como usá-lo com base no conceito principal por trás dele através de simples estratégias e como criar um sistema de negociação com base nessas estratégias mencionadas.

Nós abordaremos este indicador em detalhes da mesma forma que mencionamos através dos seguintes tópicos:

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

Nós usaremos a MQL 5 (MetaQuotes Language 5) para escrever os nossos códigos e a plataforma de negociação MetaTrader 5 para executar o nosso sistema de negociação desenvolvido. A MQL5 está integrada na MetaTrader 5. Se você quiser baixar e usar a MetaTrader 5 para usar a MQL5, você pode ler o tópico Escrevendo em MQL5 no MetaEditor do artigo anterior. Eu aconselho você a baixar e tentar aplicar o que aprendeu sozinho para praticar e melhorar as suas habilidades de desenvolvimento.

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.


Definição do indicador Awesome Oscilator

Neste tópico, nós aprenderemos sobre o indicador Awesome Oscillator (AO) com mais detalhes. O AO foi desenvolvido por Bill Williams para medir o momentum, ele pode ser usado para esclarecer o poder ou o controle com que os compradores ou vendedores participam. Ele mede esse momentum comparando o momentum das últimas cinco barras ou velas com o momentum das últimas 34 barras ou velas em um período de tempo maior, ou seja, ele compara o momentum recente com o momentum de um período de tempo maior. Quando nós obtivermos uma confirmação do sinal AO por outro indicador ou ferramenta técnica, ele será significativo e mais importante. Assim, será melhor utilizá-lo acompanhado de outra ferramenta técnica. Como nós podemos calcular este indicador manualmente para entender e aprofundar a nossa compreensão deste indicador, se quisermos aprender a fazer isso, nós podemos fazer isso através das seguintes etapas:

O AO é a diferença entre a média móvel simples de 5 períodos e a média móvel simples de 34 períodos. Nós usaremos a média do preço no cálculo do AO.

MEDIAN PRICE = (HIGH + LOW) / 2 

AO = SMA (MEDIAN PRICE, 5) - SMA (MEDIAN PRICE, 34)

Onde:

MEDIAN PRICE = a média do preço do instrumento

HIGH = a máxima do preço

LOW = a mínima do preço

AO = o valor do Awesome Oscillator

SMA = média móvel simples

Hoje em dia, nós não precisamos calculá-lo manualmente, pois ele está disponível na MetaTrader 5 como um indicador integrado entre os diferentes indicadores técnicos e tudo o que precisamos é escolhê-lo na plataforma de negociação para aparecer no gráfico.

Veja a seguir como inseri-lo no gráfico. Ao abrir a plataforma de negociação na MetaTrader 5, pressione a guia Inserir --> Indicadores --> Bill Williams --> Awesome Oscillator

Inserção do AO

Depois disso, nós podemos encontrar os parâmetros do indicador AO iguais aos seguintes:

Parâmetro do AO

Onde:

1- Para determinar a cor dos valores de alta

2- Para determinar a espessura do histograma

3- Para determinar a cor dos valores de baixa

Depois de determinar esses parâmetros, nós encontraremos o indicador inserido no gráfico da mesma forma que o seguinte:

 Indicador do AO inserido

Como nós podemos ver no gráfico anterior, na parte inferior do gráfico, nós temos o indicador inserido no gráfico com as barras do histograma oscilando em torno de zero para medir o momentum.


Estratégia do Awesome Oscillator

Neste tópico, nós aprenderemos como usar o indicador AO por meio de algumas estratégias simples para fins educacionais, apenas com base no conceito principal por trás do indicador. Você deve testar qualquer uma dessas estratégias antes de as usar em sua conta real para garantir que elas sejam adequadas para sua negociação. Dependendo disso, você pode achar que as estratégias mencionadas precisam de otimização, pois essas estratégias são as mesmas que mencionamos, o objetivo principal delas é apenas para educação e é normal descobrir isso. Será melhor usar este indicador com outro indicador técnico para obter os resultados mais eficazes, especialmente se usarmos outro indicador ou ferramenta técnica que possa ser usada para nos fornecer mais "insights" e muitas perspectivas diferentes. A propósito, este é um dos recursos mais importantes e eficazes da análise técnica, pois podemos usar muitas ferramentas para observar e avaliar o instrumento sublinhado de diferentes perspectivas e isso nos ajudará a tomar decisões adequadas de investimento ou negociação para obter bons resultados. Neste artigo, nós combinaremos outro indicador técnico com a média móvel da mesma forma que nós veremos neste tópico para obter os sinais de compra ou venda mais eficazes.

  • Estratégia um: Cruzamento do AO Zero:

Com base nessa estratégia, nós precisamos obter um sinal de alta ou baixa com base no cruzamento entre o valor do AO atual e o nível zero. Se o valor atual do AO for maior que o nível zero, ele será um sinal de alta. Se o valor atual do AO for menor que o nível zero, ele será um sinal de baixa.

Simplesmente,

O AO atual > 0 --> Altista

O AO atual < 0 --> Baixista

  • Estratégia dois: Força do AO:

De acordo com esta estratégia, precisamos obter um sinal da força do movimento do AO com base na posição do AO atual e na média de 5 períodos dos últimos valores do AO. Se o valor do AO atual for maior que o AVG, será um sinal da força do movimento do AO. Se o valor do AO atual for menor que o AVG, será um sinal de fraqueza do movimento do AO.

Simplesmente,

O AO atual > AVG 5- períodos do AO --> AO é forte

O AO atual < AVG 5- períodos do AO --> AO é fraco

  • Estratégia três: Estratégia do AO & MA:

De acordo com essa estratégia, nós precisamos obter os sinais de compra e venda com base na posição do valor do AO atual e no nível zero, além da posição do preço de fechamento e da média móvel exponencial de 50 períodos. Se o valor do AO atual for maior que o nível zero e ao mesmo tempo o preço de fechamento for maior que a MME de 50 períodos, será um sinal de compra. Se o valor do AO atual for menor que o nível zero e ao mesmo tempo o preço de fechamento for menor que a MME, será um sinal de venda.

Simplesmente,

O AO atual > o nível zero e o preço de fechamento > MME de 50 períodos --> sinal de compra

O AO atual < o nível zero e o preço de fechamento < MME de 50 períodos --> sinal de venda

Esquema da estratégia do Awesome Oscillator

Nós desenharemos um esquema passo a passo para cada estratégia mencionada para nos ajudar a criar o nosso sistema de negociação facilmente, organizando as nossas ideias.

  • Estratégia um: Cruzamento do AO Zero:

De acordo com esta estratégia, nós precisamos criar um sistema de negociação que possa gerar sinais de alta ou baixa com base na comparação contínua de dois valores e eles são o valor do AO atual e o nível zero do indicador AO para determinar a posição de cada valor e decidir o estado do mercado. Se o valor do AO for maior que o nível zero, nós precisamos que o sistema de negociação gere um comentário no gráfico com os seguintes valores:

  • Altista
  • Valor do AO é n

No outro cenário, se o valor atual do AO for menor que o nível zero, nós precisamos que o sistema de negociação retorne um comentário no gráfico com os seguintes valores:

  • Baixista
  • Valor do AO é n

Segue abaixo o passo a passo deste sistema de negociação:

Algorithmic-Trading-System-Blueprint1

  • Estratégia dois: Força do AO:

De acordo com essa estratégia, nós precisamos criar um sistema de negociação que possa ser usado para gerar os sinais da força do movimento do AO com base na comparação contínua de dois valores, sendo o AO atual e a média dos últimos cinco valores do AO antes do atual para determinar qual deles é maior. Se o valor atual do AO for maior que o AVG, precisamos que o sistema de negociação retorne um comentário com os seguintes valores (Sinal e valores que deram origem a esse sinal):

  • O Movimento do AO é forte
  • AO CurrVal : n
  • AO FirstVal : n
  • AO SecondVal : n
  • AO ThirdVal : n
  • AO FourthVal : n
  • AO FifthVal : n
  • AO AvgVal : n

No outro caso, se o AO atual for menor que o AVG, precisamos que o sistema de negociação retorne os seguintes valores também como um comentário:

  • O movimento do AO é fraco
  • AO CurrVal : n
  • AO FirstVal : n
  • AO SecondVal : n
  • AO ThirdVal : n
  • AO FourthVal : n
  • AO FifthVal : n
  • AO AvgVal : n

A seguir está um modelo passo a passo deste sistema de negociação:

 Algorithmic-Trading-System-Blueprint11

  • Estratégia três: Estratégia do AO & MA:

Com base nessa estratégia, assim como nós aprendemos no tópico anterior, nós precisamos criar um sistema de negociação que possa ser usado para retornar um comentário com os sinais adequados de compra e venda no gráfico com base na comparação contínua de quatro valores e são eles:

  • O AO atual
  • O nível zero do indicador AO
  • O preço de fechamento
  • o -Período igual a 50 da MA

Se o AO atual for maior que o nível zero e o preço de fechamento for maior que a MA de 50 períodos, precisamos que o sistema de negociação retorne os seguintes valores conforme comentário no gráfico:

  • Compra
  • Preço de fechamento é n
  • Valor do AO é n
  • O valor da MA é n

No outro cenário, se o valor atual do AO for menor que o nível zero e o preço de fechamento for menor que a MA de 50 períodos, precisamos que o sistema de negociação retorne o comentário no gráfico com os seguintes valores:

  • Venda
  • Preço de fechamento é n
  • Valor do AO é n
  • O valor da MA é n

A seguir está um modelo passo a passo deste sistema de negociação:

Algorithmic-Trading-System-Blueprint111

Sistema de negociação do Awesome Oscillator

Neste tópico, nós aprenderemos o mais interessante neste artigo, porque criaremos os sistemas de negociação para as nossas estratégias de negociação mencionadas. Primeiro, nós criaremos um sistema de negociação simples que gerará um sinal como um comentário no gráfico com o valor do AO atual e nós usaremos como base para outros sistemas de negociação.

A seguir está como criar um sistema de negociação para este sinal desejado passo a passo:

Criar o array para o aoArray usando a função "double":

double aoArray[];

Definir a flag AS_SERIES para o aoArray para retornar um valor booleano usando a função "ArraySetAsSeries". Seus parâmetros são:

  • array[]: usaremos o aoArray.
  • flag: Usaremos "true" como uma direção de indexação do array.
ArraySetAsSeries(aoArray,true);

Definir o indicador AO usando a função "iAO" para retornar o manipulador do indicador Awesome Oscillator. Seus parâmetros são:

  • symbol: usaremos o (_Symbol) a ser aplicado ao símbolo atual.
  • period: usaremos o (_period) para ser aplicado ao período atual.
int aoDef = iAO(_Symbol,_Period);

Obter os dados do buffer do indicador AO usando a função "CopyBuffer". Seus parâmetros são: 

  • indicador_handle: usaremos o (aoDef) do manipulador do indicador predefinido.
  • buffer_num: para determinar o número do buffer do indicador, usaremos (0).
  • start_pos: para determinar a posição inicial, usaremos (0).
  • count: para determinar a quantidade a copiar, usaremos (3).
  • buffer[]: para determinar o array de destino a ser copiado, usaremos (aoArray).
CopyBuffer(aoDef,0,0,3,aoArray);

Definir o valor do AO após criar uma variável do tipo double para o aoVal e normalizando-o usando o "NormalizeDouble". Os parâmetros do "NormalizeDouble" são:

  • value: Número normalizado. Usaremos (aoArray[0]).
  • digits: para determinar o número de dígitos após a casa decimal. Usaremos (7).
double aoVal = NormalizeDouble(aoArray[0],7);

Retornar um comentário no gráfico com o valor do AO atual usando a função "Comment".

Comment("AO Value is ",aoVal);

A seguir está o código completo para criar este sistema de negociação:

//+------------------------------------------------------------------+
//|                                                    Simple AO.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"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
  void OnTick()
  {
   double aoArray[];
   ArraySetAsSeries(aoArray,true);
   int aoDef = iAO(_Symbol,_Period);
   CopyBuffer(aoDef,0,0,3,aoArray);
   double aoVal = NormalizeDouble(aoArray[0],7);
   Comment("AO Value is ",aoVal);
  }
//+------------------------------------------------------------------+

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

Simple AO nav

Ao arrastar e soltar este expert no gráfico desejado, nós veremos a janela deste expert igual ao seguinte:

Janela do Simple AO

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:

Simple AO anexado

Podemos ver no gráfico anterior que nós temos o expert anexado ao gráfico no canto superior direito. Agora, nós estamos prontos para receber o nosso sinal desejado e ele será igual ao seguinte:

Sinal do Simple AO

Nós podemos ver nos gráficos anteriores, que nós temos um comentário no gráfico no canto superior esquerdo:

  • Estratégia um: Cruzamento do AO Zero:

Vamos criar um sistema de negociação baseado nesta estratégia para receber os sinais desejados e ele será igual ao código completo a seguir:

//+------------------------------------------------------------------+
//|                                            AO Zero Crossover.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 aoArray[];
   ArraySetAsSeries(aoArray,true);
   int aoDef = iAO(_Symbol,_Period);
   CopyBuffer(aoDef,0,0,3,aoArray);
   double aoVal = NormalizeDouble(aoArray[0],7);
   if(aoVal > 0)
     {
      Comment("Bullish","\n"
              "AO Value is ",aoVal);
     }

   if(aoVal < 0)
     {
      Comment("Bearish","\n"
              "AO Value is ",aoVal);
     }
  }
//+------------------------------------------------------------------+

Diferença neste código.

Condições desta estratégia,

Em caso de alta:

   if(aoVal > 0)
     {
      Comment("Bullish","\n"
              "AO Value is ",aoVal);
     }

Em caso de baixa:

   if(aoVal < 0)
     {
      Comment("Bearish","\n"
              "AO Value is ",aoVal);
     }

Após compilar este código e ter certeza de que não há erros, nós poderemos usá-lo e anexá-lo ao gráfico da mesma forma que mencionamos anteriormente. Assim, ele será anexado da seguinte forma:

Cruzamento AO Zero anexado

Como nós podemos ver no gráfico nós temos o expert que está anexado ao gráfico da mesma forma que aparece no canto superior direito. Agora, nós estaremos prontos para receber os sinais desejados.

Em caso de sinal de alta:

Cruzemento do AO Zero - sinal de alta

Como nós podemos ver no gráfico anterior nós temos um comentário no canto superior esquerdo com os seguintes valores:

  • Altista
  • Valor atual do AO

Em caso de sinal de baixa:

Cruzamento do AO Zero - sinal de baixa

Como nós podemos ver no gráfico anterior, nós temos um comentário como um sinal com os seguintes valores:

  • Baixista
  • Valor atual do AO

Assim, obtivemos os sinais desejados com base nessa estratégia, nos casos de alta e baixa.

  • Estratégia dois: Força do AO:

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

//+------------------------------------------------------------------+
//|                                                  AO 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()
  {
   double aoArray[];
   ArraySetAsSeries(aoArray,true);
   int aoDef = iAO(_Symbol,_Period);
   CopyBuffer(aoDef,0,0,6,aoArray);


   double aoCurrVal = NormalizeDouble(aoArray[0],6);
   double aoFifthVal = NormalizeDouble(aoArray[1],6);
   double aoFourthVal = NormalizeDouble(aoArray[2],6);
   double aoThirdVal = NormalizeDouble(aoArray[3],6);
   double aoSecondVal = NormalizeDouble(aoArray[4],6);
   double aoFirstVal = NormalizeDouble(aoArray[5],6);

   double aoAvgVal = NormalizeDouble((aoFifthVal+aoFourthVal+aoThirdVal+aoSecondVal+aoFirstVal)/5,6);

   if(aoCurrVal > aoAvgVal)
     {
      Comment("AO Movement is strong","\n",
              "AO CurrVal : ",aoCurrVal,"\n",
              "AO FirstVal : ",aoFifthVal,"\n",
              "AO SecondVal : ",aoFourthVal,"\n",
              "AO ThirdVal : ",aoThirdVal,"\n",
              "AO FourthVal : ",aoSecondVal,"\n",
              "AO FifthVal : ",aoFirstVal,"\n",
              "AO AvgVal : ",aoAvgVal
             );
     }

   if(aoCurrVal < aoAvgVal)
     {
      Comment("AO Movement is Weak","\n",
              "AO CurrVal : ",aoCurrVal,"\n",
              "AO FirstVal : ",aoFifthVal,"\n",
              "AO SecondVal : ",aoFourthVal,"\n",
              "AO ThirdVal : ",aoThirdVal,"\n",
              "AO FourthVal : ",aoSecondVal,"\n",
              "AO FifthVal : ",aoFirstVal,"\n",
              "AO AvgVal : ",aoAvgVal
             );
     }

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

Diferenças neste código:

Ao usar a função "NormalizeDouble", nós definiremos os seguintes valores do valor atual do AO dos últimos cinco valores:

   double aoCurrVal = NormalizeDouble(aoArray[0],6);
   double aoFifthVal = NormalizeDouble(aoArray[1],6);
   double aoFourthVal = NormalizeDouble(aoArray[2],6);
   double aoThirdVal = NormalizeDouble(aoArray[3],6);
   double aoSecondVal = NormalizeDouble(aoArray[4],6);
   double aoFirstVal = NormalizeDouble(aoArray[5],6);

Definição do AVG de 5 períodos do AO:

double aoAvgVal = NormalizeDouble((aoFifthVal+aoFourthVal+aoThirdVal+aoSecondVal+aoFirstVal)/5,6);

Condições desta estratégia.

No caso da força do movimento do AO:

   if(aoCurrVal > aoAvgVal)
     {
      Comment("AO Movement is strong","\n",
              "AO CurrVal : ",aoCurrVal,"\n",
              "AO FirstVal : ",aoFifthVal,"\n",
              "AO SecondVal : ",aoFourthVal,"\n",
              "AO ThirdVal : ",aoThirdVal,"\n",
              "AO FourthVal : ",aoSecondVal,"\n",
              "AO FifthVal : ",aoFirstVal,"\n",
              "AO AvgVal : ",aoAvgVal
             );
     }

Em caso de fraqueza do movimento do AO:

   if(aoCurrVal < aoAvgVal)
     {
      Comment("AO Movement is Weak","\n",
              "AO CurrVal : ",aoCurrVal,"\n",
              "AO FirstVal : ",aoFifthVal,"\n",
              "AO SecondVal : ",aoFourthVal,"\n",
              "AO ThirdVal : ",aoThirdVal,"\n",
              "AO FourthVal : ",aoSecondVal,"\n",
              "AO FifthVal : ",aoFirstVal,"\n",
              "AO AvgVal : ",aoAvgVal
             );
     }

Após a compilação, certificando-se de que não há erros e anexando o expert. Vamos encontrar o mesmo que o seguinte:

Força do AO anexada

Podemos ver no gráfico no canto superior direito que o expert está anexado.

Em caso de força:

Força do AO - sinal forte

Como podemos ver no gráfico no canto superior esquerdo temos um comentário com os seguintes valores:

  • O Movimento do AO é forte
  • AO CurrVal : n
  • AO FirstVal : n
  • AO SecondVal : n
  • AO ThirdVal : n
  • AO FourthVal : n
  • AO FifthVal : n
  • AO AvgVal : n

Em caso de fraqueza:

Força do AO - sinal fraco

Como podemos ver no gráfico no canto superior esquerdo temos um comentário com os seguintes valores:

  • O movimento do AO é fraco
  • AO CurrVal : n
  • AO FirstVal : n
  • AO SecondVal : n
  • AO ThirdVal : n
  • AO FourthVal : n
  • AO FifthVal : n
  • AO AvgVal : n

Agora, obtivemos os sinais desejados com base neste sistema de negociação desta estratégia.

  • Estratégia três: Estratégia do AO & MA:

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

//+------------------------------------------------------------------+
//|                                             AO & MA 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()
  {
   MqlRates pArray[];
   double aoArray[];
   double maArray[];

   int Data=CopyRates(_Symbol,_Period,0,1,pArray);
   ArraySetAsSeries(aoArray,true);
   ArraySetAsSeries(maArray,true);
   
   int aoDef = iAO(_Symbol,_Period);
   int maDef = iMA(_Symbol,_Period,50,0,MODE_EMA,PRICE_CLOSE);

   CopyBuffer(aoDef,0,0,3,aoArray);
   CopyBuffer(maDef,0,0,3,maArray);

   double closingPrice = pArray[0].close;
   double aoVal = NormalizeDouble(aoArray[0],7);
   double maVal = NormalizeDouble(maArray[0],7);

   if(aoVal > 0 && closingPrice > maVal)
     {
      Comment("Buy","\n"
              "Closing Price is ",closingPrice,"\n",
              "AO Value is ",aoVal,"\n",
              "MA Value is ",maVal);
     }

   if(aoVal < 0 && closingPrice < maVal)
     {
      Comment("Sell","\n"
              "Closing Price is ",closingPrice,"\n",
              "AO Value is ",aoVal,"\n",
              "MA Value is ",maVal);
     }

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

Diferenças neste código.

Criação de três arrays de pArray, aoArray e maArray. Usaremos a função double da mesma forma que mencionamos exceto para o pArray, usaremos a função MqlRates para armazenar informações sobre o preço, volume e spread.

   MqlRates pArray[];
   double aoArray[];
   double maArray[];

Definição da flag AS_SERIES para os arrays de (aoArray) e (maArray) da mesma forma que mencionamos anteriormente. Definição dos dados usando a função "CopyRates" para obter os dados históricos da estrutura MqlRates e seus parâmetros são:

  • symbol_name: Usaremos _Symbol para ser aplicado ao símbolo atual.
  • timeframe: Usaremos _Period para ser aplicado ao período atual.
  • start_pos: para determinar a posição inicial, usaremos (0). 
  • count: para determinar a contagem de dados a copiar, usaremos (1).
  • rates_array[]: para determinar o array de destino a ser copiado, usaremos o método pArray.
   int Data=CopyRates(_Symbol,_Period,0,1,pArray);
   ArraySetAsSeries(aoArray,true);
   ArraySetAsSeries(maArray,true);

Definindo o AO, MA:

AO usando a função "iOA" da mesma forma que nós mencionamos.

MA usando a função "iMA", seus parâmetros:

  • symbol: vamos usar (_Symbol) 
  • period: vamos usar (_period)
  • ma_period: para determinar o período da média móvel, usaremos 50 
  • ma_shift: para determinar o deslocamento horizontal, usaremos (0) 
  • ma_method: para determinar o tipo da média móvel, usaremos MA exponencial 
  • applied_price: para determinar o tipo de preço utilizável, usaremos o preço de fechamento
   int aoDef = iAO(_Symbol,_Period);
   int maDef = iMA(_Symbol,_Period,50,0,MODE_EMA,PRICE_CLOSE);

Obtendo os dados do buffer dos indicadores AO e MA usando a função "CopyBuffer".

   CopyBuffer(aoDef,0,0,3,aoArray);
   CopyBuffer(maDef,0,0,3,maArray);

Definindo o preço de fechamento, aoArray e maArray.

   double closingPrice = pArray[0].close;
   double aoVal = NormalizeDouble(aoArray[0],7);
   double maVal = NormalizeDouble(maArray[0],7);

Condições da estratégia.

Em caso de sinal de compra

   if(aoVal > 0 && closingPrice > maVal)
     {
      Comment("Buy","\n"
              "Closing Price is ",closingPrice,"\n",
              "AO Value is ",aoVal,"\n",
              "MA Value is ",maVal);
     }

Em caso de sinal de venda:

   if(aoVal < 0 && closingPrice < maVal)
     {
      Comment("Sell","\n"
              "Closing Price is ",closingPrice,"\n",
              "AO Value is ",aoVal,"\n",
              "MA Value is ",maVal);
     }

Depois de compilar este código, nós vamos encontrá-lo na janela do navegador da seguinte forma:

 AO & MA em anexo

Como podemos ver, temos o indicador anexado ao gráfico no canto superior esquerdo do gráfico anterior. Estamos prontos para receber os nossos sinais.

Em caso de sinal de compra:

 AO & MA - sinal de compra

Como podemos ver, temos nosso sinal como um comentário no canto superior esquerdo com os seguintes valores:

  • Compra
  • Preço de fechamento é n
  • Valor do AO é n
  • O valor da MA é n

In case of sell:

 AO & MA - sinal de venda

Podemos ver o comentário neste caso com os seguintes valores do nosso sinal:

  • Venda
  • Preço de fechamento é n
  • Valor do AO é n
  • O valor da MA é n


Conclusão

Agora, supõe-se que você tenha entendido o indicador Awesome Oscillator em detalhes ao aprender o que é o AO, o que ele mede, como podemos calculá-lo manualmente e como podemos inseri-lo no gráfico a partir dos indicadores integrados da MetaTrader 5. Nós aprendemos também como poderíamos usá-lo por meio de estratégias simples baseadas no conceito principal por trás dele depois de entendê-lo, essas estratégias foram:

  • Estratégia um: Cruzamento do AO Zero: para obter os sinais de alta ou baixa com base nos cruzamentos do nível zero.
  • Estratégia dois: Força do AO: para obter um sinal da força do movimento AO com base na posição do valor AO atual e no AVG dos últimos 5 valores AO. 
  • Estratégia três: Estratégia do AO & MA: para obter os sinais de compra ou venda com base na posição do AO atual e no nível zero e na posição do preço de fechamento e no EMA de 50 períodos.

Depois disso, projetamos um esquema passo a passo para cada estratégia mencionada para criar um sistema de negociação de maneira fácil, suave e eficaz após organizar nossas ideias. Em seguida, criamos um sistema de negociação para cada estratégia mencionada para obter os sinais de automação após executá-los no terminal de negociação MetaTrader 5.

Espero que você tenha tentado aplicar o que aprendeu sozinho, pois este é um passo muito importante em qualquer processo de aprendizagem, se precisarmos desenvolver e melhorar nossas habilidades, além disso, isso lhe dará mais "insights" sobre o que você aprende ou sobre quaisquer tópicos relacionados. É 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.

Se você achar este artigo útil e precisar ler mais artigos semelhantes, você pode ler os meus outros artigos nesta série sobre como você pode desenvolver um sistema de negociação com base nos indicadores técnicos mais populares.

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

Arquivos anexados |
Simple_AO.mq5 (1.01 KB)
AO_Strength.mq5 (2.07 KB)
Aprendendo a construindo um EA que opera de forma automática (Parte 08): OnTradeTransaction Aprendendo a construindo um EA que opera de forma automática (Parte 08): OnTradeTransaction
Neste artigo, mostrei como você pode usar o sistema de tratamento de eventos, a fim de conseguir lidar com mais agilidade, e de uma forma melhor com questões envolvendo o sistema de ordens, a fim de deixar o EA mais rápido. Assim ele não precisará, ficar procurando informações a todo o momento.
Como desenvolver um sistema de negociação baseado no indicador Índice de Vigor Relativo Como desenvolver um sistema de negociação baseado no indicador Índice de Vigor Relativo
Um novo artigo em nossa série sobre como desenvolver um sistema de negociação pelo indicador técnico mais popular. Neste artigo, nós aprenderemos como fazer isso pelo indicador Índice de Vigor Relativo.
DoEasy. Controles (Parte 17): Recorte de seções invisíveis de objetos, objetos-botões WinForms auxiliares com setas DoEasy. Controles (Parte 17): Recorte de seções invisíveis de objetos, objetos-botões WinForms auxiliares com setas
Neste artigo vamos criar funcionalidade para esconder seções de objetos que ultrapassam as margens de seu contêiner e vamos elaborar objetos-botões auxiliares com setas para usá-los como parte de outros objetos WinForms.
Redes neurais de maneira fácil (Parte 28): algoritmo de gradiente de política Redes neurais de maneira fácil (Parte 28): algoritmo de gradiente de política
Continuamos a estudar métodos de aprendizado por reforço. No artigo anterior, nos iniciamos no método de aprendizado Q profundo. Com ele, treinamos um modelo para prever a recompensa imediata dependendo da ação tomada por nós em uma determinada situação. E, em seguida, realizamos uma ação de acordo com nossa política e a recompensa esperada. Mas nem sempre é possível aproximar a função Q ou nem sempre sua aproximação dá o resultado desejado. Nesses casos, os métodos de aproximação são usados não para funções de utilidade, mas, sim, para uma política (estratégia) direta de ações. E é precisamente a esses métodos que o gradiente de política pertence.