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

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

MetaTrader 5Negociação | 29 novembro 2022, 09:22
314 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

Introdução

Este novo artigo da nossa série é sobre aprender como desenvolver sistemas de negociação com base nos indicadores técnicos mais populares. Nós aprenderemos detalhadamente uma nova ferramenta técnica ou indicador que pode ser usado a nosso favor na negociação. Este indicador é o indicador DeMarker, nós vamos abordá-lo através dos seguintes tópicos:

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

Usaremos a plataforma de negociação MetaTrader 5 e a MQL5 integrada na plataforma para escrever o código do sistema de negociação e testá-lo. Se você quiser saber como instalar a MetaTrader 5 ou como usar o MetaEditor, leia o tópico Escrevendo o código em MQL5 no MetaEditor do meu artigo anterior.

Eu aconselho você a aplicar sozinho o que aprendeu neste artigo se quiser desenvolver suas habilidades de negociação e programação e obter o máximo benefício, porque a prática é um fator muito importante em qualquer etapa do aprendizado. Gosto de mencionar e confirmar que o principal objetivo das estratégias mencionadas é aprender o conceito principal por trás do indicador. Portanto, o objetivo principal é apenas educacional e você deve testar qualquer estratégia antes de usá-la em uma conta real para garantir que ela seja lucrativa ou adequada para a sua negociação.

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 DeMarker

Se nós quisermos identificar e aprender com mais detalhes o indicador DeMarker, nós precisaremos saber o que ele é, o que ele mede, como nós podemos calculá-lo e como nós podemos lê-lo para usá-lo a nosso favor. O indicador DeMarker é uma ferramenta técnica do oscilador e ele foi criado pelo analista técnico Thomas DeMark. É claro que o nome deste indicador é derivado do seu criador, ele também é conhecido como indicador "DeM". Este indicador técnico mede a demanda pelo instrumento e avalia a tendência direcional do mercado comparando os preços das máximas e mínimas atuais com os preços anteriores.

Para calcular este indicador manualmente, nós podemos fazer isso pelos seguintes passos:

DMark (i) = SMA (DeMax, N) / (SMA (DeMax, N) + SMA (DeMin, N))

Onde:

  • DMark (i) = o valor atual de DeMark.
  • SMA = média móvel simples
  • DeMax = o valor máximo de DeMark
  • N = o período usado
  • DeMin = o valor mínimo de DeMark


O DeMax pode ser calculado por:

DeMax (i) = HIGH (i) - HIGH (i - 1)

Caso contrário:

DeMax (i) = 0


O DeMin pode ser calculado por:

DeMin (i) = LOW (i - 1) - LOW (i)

Caso contrário:

DeMin (i) = 0

Após calcular o indicador, nós podemos descobrir que ele produz uma linha osciladora entre 0 a 1 para medir a demanda do instrumento conforme mencionamos. Hoje em dia, nós não precisamos calculá-lo manualmente porque ele está embutido na plataforma de negociação MetaTrader 5 e tudo o que nós precisamos é escolhê-lo entre os indicadores disponíveis para inseri-lo no gráfico e lê-lo.

Aqui está como nós podemos inserir o indicador técnico DeMarker na MetaTrader 5:

Ao abrir a plataforma de negociação MetaTrader 5, nós pressionaremos Inserir --> Indicadores --> Osciladores --> DeMarker

Inserção do DeM

Depois disso, nós veremos a janela de parâmetros deste indicador igual à seguinte:

Param DeM

1 - para determinar o período.

2 - para definir a cor da linha do indicador.

3 - para definir o estilo da linha do indicador.

4 - para definir a espessura da linha do indicador.

Depois de definir os parâmetros anteriores e pressionar "OK", nós veremos o indicador inserido no gráfico igual ao seguinte:

DeM anexado

Como nós vemos no gráfico anterior na parte inferior, nós temos o indicador anexado e temos uma linha osciladora entre 0 e 1. Nós podemos ler este indicador determinando a posição da linha na área mencionada. Se o indicador se aproximar de 0.70, significa que temos uma situação de sobrecompra, mas se o indicador se aproximar de 0.30, significa que temos uma situação de sobrevenda.

Estratégia do DeMarker

Agora, nós precisamos aprender como nós podemos usar o indicador DeMarker com base no conceito principal por trás dele. Então, nós aprenderemos como usá-lo por meio das três estratégias simples.

    Estratégia um: Força DeMarker

      Com base nessa estratégia, nós precisamos obter os sinais de DeMarker forte ou fraco observando o valor do DeMarker e a média dos últimos 5 períodos do indicador. Se o valor atual do indicador DeMarker for maior que os últimos 5 períodos do DeMarker, isso será um sinal de força. No outro caso, se o valor atual do indicador for inferior aos últimos 5 períodos do DeMarker, isso será um sinal de fraqueza.

      Simplesmente,

      Valor do DeMarker >= AVG de 5 períodos de DeMarker --> DeMarker é forte

      Valor do DeMarker <=AVG de 5 períodos do DeMarker--> DeMarker é fraco

        Estratégia dois: DeMarker, OB e OS

          Com base nessa estratégia, nós precisamos obter os sinais quando o indicador atingir as zonas de sobrecompra e sobrevenda. Se o valor atual do DeMarker for maior ou igual ao nível 0.70, isso será um sinal de aproximação de uma zona de sobrecompra. Se o valor atual do DeMarker for inferior ao nível 0.30, isso será um sinal de aproximação de uma zona de sobrevenda.

          Simplesmente,

          Valor do DeMarker >= 0.70 --> Sobrecompra

          Valor do DeMarker <= 0.30 --> Sobrevenda

            Estratégia três: Divergência do DeMarker:

              Com base nessa estratégia, nós precisamos obter os sinais de divergência de alta ou baixa que forneçam uma visão de que há probabilidade de alterar o movimento atual. Nós precisamos obter esses sinais observando os quatro valores: a máxima atual, a máxima anterior, o DeMarker atual e o DeMarker anterior. É bom mencionar que esta é uma situação simples de divergência, mas a mais eficaz é comparar e observar as máximas e mínimas dos preços com as máximas e mínimas do indicador. Nesta situação simples, nós precisamos obter um sinal de divergência de baixa, se a máxima atual for maior que a máxima anterior ao mesmo tempo em que o DeMarker atual é menor que o anterior. No outro caso, se a mínima atual for menor que a mínima anterior ao mesmo tempo em que o valor atual do DeMarker for maior que o anterior, isso será um sinal de divergência de alta.

              Simplesmente,

              Máxima atual > máxima anterior e DeMarker atual < anterior --> Divergência de baixa

              Baixa atual < mínima anterior e, DeMarker atual > anterior --> Divergência de alta

              Esquema da estratégia do DeMarker

              Depois de aprender a usar o indicador DeMarker por meio de estratégias simples. Neste tópico, nós criaremos um modelo simples para cada estratégia para nos ajudar a criar um sistema de negociação para ela sem problemas.

                Estratégia um: Força DeMarker

                  De acordo com essa estratégia, nós precisamos criar um sistema de negociação que possa ser usado para verificar dois valores automaticamente após criá-los ou defini-los. Esses valores são os valores atuais do DeMarker e os últimos cinco valores médios do DeMarker. Se o valor atual for maior que a média, precisamos que o sistema de negociação retorne os seguintes valores como um comentário no gráfico:

                  • DeMarker é forte
                  • Valor atual do DeMarker
                  • Valor AVG do DeMarker de 5 períodos

                  No outro cenário, se o valor atual for menor que a média, nós precisamos que o sistema de negociação retorne os seguintes valores com base nesta condição:

                  • DeMarker é fraco
                  • Valor atual do DeMarker
                  • Valor AVG do DeMarker de 5 períodos
                  A seguir está o projeto desta estratégia para criar o seu sistema de negociação.

                  ESquema da força do DeMarker

                    Estratégia dois: DeMarker, OB - OS

                      De acordo com essa estratégia, nós precisamos criar um sistema de negociação que possa ser usado para gerar os nossos sinais com base em condições específicas. Nós precisamos que o sistema de negociação verifique os três valores continuamente, que são o valor atual do DeMarker, nível 0.70 no indicador e nível 0.30 no indicador. Se o valor atual do DeMarker for maior ou igual ao nível 0.70, nós precisamos que o sistema de negociação retorne os seguintes valores como um comentário no gráfico:

                      • Sobrecompra
                      • Valor do DeMarker

                      No outro cenário, se o valor atual do DeMarker for menor ou igual ao nível 0.30, precisamos que o sistema de negociação retorne os seguintes valores no gráfico:

                      • Sobrevenda
                      • Valor do DeMarker
                      Esquema DeMarker OB, OS
                        Estratégia três: Divergência do DeMarker

                          De acordo com essa estratégia, nós precisamos criar um sistema de negociação que possa ser usado para gerar os sinais de divergências de alta ou baixa, verificando os quatro valores continuamente. Se a máxima atual for maior que a máxima anterior e, ao mesmo tempo, o valor atual do DeMarker for menor que o valor anterior do DeMarker, precisamos que o sistema de negociação retorne os seguintes valores como um comentário no gráfico:

                          • Divergência de baixa
                          • Valor da máxima atual
                          • Valor da máxima anterior
                          • Valor atual do DeMarker
                          • Valor do DeMarker anterior

                          No outro cenário, se a mínima atual for menor que a mínima anterior ao mesmo tempo, o valor do DeMarker atual for maior que o valor do DeMarker anterior, nós precisamos que o sistema retorne os seguintes valores no gráfico:

                          • Divergência de alta
                          • Valor da máxima atual
                          • Valor da máxima anterior
                          • Valor atual do DeMarker
                          • Valor do DeMarker anterior

                          Esquema da divergência

                          Sistema de negociação do DeMarker

                          Nesta parte, nós criaremos um sistema de negociação para cada estratégia mencionada a ser executada na MetaTrader 5 para gerar os sinais de automação. Primeiro, nós vamos criar um sistema de negociação simples para ser usado como base para todas as estratégias mencionadas. Este sistema irá gerar o valor atual do indicador DeMarker como um comentário no gráfico e a seguir está como criar este sistema pelas seguintes linhas de código:

                          Passo um:

                          Criar um array deMarkerArray usando a função "double" que retorna o um valor com casas decimais.

                          double deMarkerArray[];

                          Passo dois:

                          Usar a função "ArraySetAsSeries" para definir a flag AS_SERIES para o deMarkerArray, que retorna um valor booleano true ou false.

                          ArraySetAsSeries(deMarkerArray,true);

                          Passo três:

                          Definir o indicador usando a função "iDeMarker" que retorna o manipulador do indicador DeMarker. Seus parâmetros são:

                          • symbol: para determinar o símbolo, usaremos (_Symbol) a ser aplicado no símbolo atual.
                          • period: para determinar o período ou time frame, usaremos (_period) para ser aplicado no período gráfico atual.
                          • ma_period: para determinar o período médio, usaremos (14).
                          int deMarkerDef = iDeMarker(_Symbol,_Period,14);

                          Passo quatro:

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

                          • indicator_handle: usaremos o (deMarkerDef) 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 (deMarekerArray).
                          CopyBuffer(deMarkerDef,0,0,3,deMarkerArray);

                          Passo cinco:

                          Definindo o valor atual do deMarker usando a função "NormalizeDouble" para retornar um valor do tipo double. Seus parâmetros são:

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

                          Passo seis:

                          Usando a função "comment" para retornar o valor do indicador DeMarker atual como um comentário no gráfico.

                          Comment("DeMarker Value is ",deMarkerVal);

                          Se você quiser ver o código completo deste sistema de negociação, você pode vê-lo a seguir.

                          //+------------------------------------------------------------------+
                          //|                                       Simple DeMarker System.mq5 |
                          //|                                  Copyright 2022, MetaQuotes Ltd. |
                          //|                                             https://www.mql5.com |
                          //+------------------------------------------------------------------+
                          #property copyright "Copyright 2022, MetaQuotes Ltd."
                          #property link      "https://www.mql5.com"
                          #property version   "1.00"
                          //+------------------------------------------------------------------+void OnTick()
                            void OnTick()
                            {
                             double deMarkerArray[];
                          
                             ArraySetAsSeries(deMarkerArray,true);
                          
                             int deMarkerDef = iDeMarker(_Symbol,_Period,14);
                          
                             CopyBuffer(deMarkerDef,0,0,3,deMarkerArray);
                          
                             double deMarkerVal = NormalizeDouble(deMarkerArray[0],6);
                          
                             Comment("DeMarker Value is ",deMarkerVal);
                          
                            }
                          //+------------------------------------------------------------------+
                          

                          Após a compilação, nós podemos encontrar este expert advisor na janela do navegador para executá-lo:

                          Nav

                          Ao arrastar e soltar este expert no gráfico desejado, encontraremos a janela dele igual à seguinte:

                           Janela Simple DeMarker

                          Após pressionar "OK", o expert será anexado ao gráfico da mesma forma que a imagem a seguir:

                          Simple DeMarker anexado

                          Como nós podemos ver no gráfico no canto superior direito, o sistema Simple DeMarker está anexado ao gráfico. Agora nós estamos prontos para obter os sinais desejados de acordo com esta estratégia. Os passos anteriores serão os mesmos para compilar todos os códigos da estratégia mencionada para executá-los na MetaTrader 5.

                          A seguir estão os sinais gerados de teste de acordo com este sistema de negociação simples:

                          Podemos ver o valor atual do indicador DeMarker no canto superior esquerdo do gráfico.

                            Estratégia um: Força do DeMarker:

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

                              //+------------------------------------------------------------------+
                              //|                                            DeMarker 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 deMarkerArray[];
                              
                                 ArraySetAsSeries(deMarkerArray,true);
                              
                                 int deMarkerDef = iDeMarker(_Symbol,_Period,14);
                              
                                 CopyBuffer(deMarkerDef,0,0,6,deMarkerArray);
                              
                                 double deMarkerVal = NormalizeDouble(deMarkerArray[0],4);
                                 double deMarkerVal1 = NormalizeDouble(deMarkerArray[1],4);
                                 double deMarkerVal2 = NormalizeDouble(deMarkerArray[2],4);
                                 double deMarkerVal3 = NormalizeDouble(deMarkerArray[3],4);
                                 double deMarkerVal4 = NormalizeDouble(deMarkerArray[4],4);
                                 double deMarkerVal5 = NormalizeDouble(deMarkerArray[5],4);
                              
                                 double deMarkerAvgVal = (deMarkerVal1+deMarkerVal2+deMarkerVal3+deMarkerVal4+deMarkerVal5)/5;
                              
                              
                                 if(deMarkerVal>deMarkerAvgVal)
                                   {
                                    Comment("DeMarker is strong","\n",
                                            "Current DeMarker Value is ",deMarkerVal,"\n",
                                            "AVG DeMarker Value is ",deMarkerAvgVal);
                                   }
                              
                                 if(deMarkerVal<deMarkerAvgVal)
                                   {
                                    Comment("DeMarker is weak","\n",
                                            "Current DeMarker Value is ",deMarkerVal,"\n",
                                            "AVG DeMarker Value is ",deMarkerAvgVal);
                                   }
                                }
                              //+------------------------------------------------------------------+

                              Diferenças neste código:

                              Definição dos últimos cinco valores do deMarker usando a função "NormalizeDouble" depois de definir o valor atual do deMarker usando a mesma função.

                                 double deMarkerVal = NormalizeDouble(deMarkerArray[0],4);
                                 double deMarkerVal1 = NormalizeDouble(deMarkerArray[1],4);
                                 double deMarkerVal2 = NormalizeDouble(deMarkerArray[2],4);
                                 double deMarkerVal3 = NormalizeDouble(deMarkerArray[3],4);
                                 double deMarkerVal4 = NormalizeDouble(deMarkerArray[4],4);
                                 double deMarkerVal5 = NormalizeDouble(deMarkerArray[5],4);

                              Cálculo do deMarkerAvgVal com base nos últimos cinco valores do deMarker usando a função "double" para criar uma variável deMarkerAvgVal para ser igual à soma dos últimos cinco valores calculados e depois dividi-los por 5 para obter o valor médio.

                              double deMarkerAvgVal = (deMarkerVal1+deMarkerVal2+deMarkerVal3+deMarkerVal4+deMarkerVal5)/5;

                              Definição das condições da estratégia

                              comparando o deMarker atual pelo valor deMarkerAvg. No caso de um sinal forte do deMarker, nós precisamos ver se o valor atual do deMarker é maior que o valor do deMarkerAvg. Nós usaremos a função "If" e sua sintaxe:

                              if(expression) --> operador

                              No caso de um sinal forte, quando o deMarkerVal for maior que o deMarkerAvgVal, que é a expressão na sintaxe, precisamos que o sistema de negociação retorne um sinal de força como um comentário no gráfico que é o operador.

                                 if(deMarkerVal>deMarkerAvgVal)
                                   {
                                    Comment("DeMarker is strong","\n",
                                            "Current DeMarker Value is ",deMarkerVal,"\n",
                                            "AVG DeMarker Value is ",deMarkerAvgVal);
                                   }

                              Em caso de fraqueza do deMarker, nós precisamos ver se o valor atual do deMarker é menor que o valor do deMarker Avg que é a expressão, então seu operador deve retornar com um comentário no gráfico com a fraqueza e outros valores, cada valor em uma linha separada.

                                 if(deMarkerVal<deMarkerAvgVal)
                                   {
                                    Comment("DeMarker is weak","\n",
                                            "Current DeMarker Value is ",deMarkerVal,"\n",
                                            "AVG DeMarker Value is ",deMarkerAvgVal);
                                   }

                              Após compilar este código, nós podemos encontrar o expert dessa estratégia anexado igual a imagem a seguir:

                              Força anexada

                              Como podemos ver no canto superior direito, nós temos o expert desta estratégia anexado ao gráfico e estamos prontos para obter os sinais iguais aos exemplos de teste a seguir.

                              Em caso de sinal forte:

                              Força - sinal forte

                              Como nós podemos ver no gráfico no canto superior esquerdo, este sistema de negociação gerou um sinal baseado nesta estratégia de negociação e ele é igual ao seguinte:

                              • DeMarker é forte --> porque temos o valor atual do DeMarker acima dos últimos cinco valores médios do indicador DeMarker.
                              • Valor atual do DeMarker.
                              • Valor AVG do DeMarker. 

                              Em caso de sinal de fraqueza:

                              Força - Sinal fraco

                              Como nós podemos ver no gráfico no canto superior esquerdo, nós temos um sinal igual ao seguinte:

                              • DeMarker é fraco --> porque temos o valor atual do DeMarker abaixo dos últimos cinco valores médios do indicador DeMarker.
                              • Valor atual do DeMarker.
                              • Valor AVG do DeMarker. 
                                Estratégia dois: DeMarker, OB-OS

                                  Segue o código completo desta estratégia:

                                  //+------------------------------------------------------------------+
                                  //|                                       Simple DeMarker System.mq5 |
                                  //|                                  Copyright 2022, MetaQuotes Ltd. |
                                  //|                                             https://www.mql5.com |
                                  //+------------------------------------------------------------------+
                                  #property copyright "Copyright 2022, MetaQuotes Ltd."
                                  #property link      "https://www.mql5.com"
                                  #property version   "1.00"
                                  //+------------------------------------------------------------------+void OnTick()
                                  void OnTick()
                                    {
                                     double deMarkerArray[];
                                  
                                     ArraySetAsSeries(deMarkerArray,true);
                                  
                                     int deMarkerDef = iDeMarker(_Symbol,_Period,14);
                                  
                                     CopyBuffer(deMarkerDef,0,0,3,deMarkerArray);
                                  
                                     double deMarkerVal = NormalizeDouble(deMarkerArray[0],6);
                                  
                                  
                                     if(deMarkerVal<=0.30)
                                       {
                                        Comment("Oversold","\n",
                                                "DeMarker Value is ",deMarkerVal);
                                       }
                                  
                                     if(deMarkerVal>=0.70)
                                       {
                                        Comment("Overbought","\n",
                                                "DeMarker Value is ",deMarkerVal);
                                       }
                                     if(deMarkerVal>0.30 && deMarkerVal<0.70)
                                       {
                                        Comment("DeMarker Value is ",deMarkerVal);
                                       }
                                  
                                    }
                                  //+------------------------------------------------------------------+
                                  

                                  Diferenças neste código:

                                  Condições deste código.

                                  No caso de um sinal de sobrevenda, quando o valor atual for menor ou igual a 0.30 que é a expressão na função "if", será um sinal de sobrevenda que é o operador que precisamos ver como um comentário no gráfico.

                                     if(deMarkerVal<=0.30)
                                       {
                                        Comment("Oversold","\n",
                                                "DeMarker Value is ",deMarkerVal);
                                       }

                                  No caso de um sinal de sobrecompra que é o operador, esta situação existirá quando o valor atual do deMarker for maior ou igual a 0.70 que é a expressão.

                                     if(deMarkerVal>=0.70)
                                       {
                                        Comment("Overbought","\n",
                                                "DeMarker Value is ",deMarkerVal);
                                       }

                                  Caso não haja um sinal ou equilíbrio (expressão), ele será sinalizado quando o valor atual do deMarker estiver entre 0.30 e 0.70 (operador).

                                     if(deMarkerVal>0.30 && deMarkerVal<0.70)
                                       {
                                        Comment("DeMarker Value is ",deMarkerVal);
                                       }

                                  Após a compilação deste código, nós vamos encontrá-lo no navegador da mesma forma que a seguir:

                                  OB-OS anexado

                                  Agora, nós estamos prontos para receber os sinais com base nessa estratégia, abaixo estão os exemplos de teste.

                                  Em caso de sobrecompra:

                                  Sinal DeM, OB - OS - OB

                                  Como podemos ver no gráfico anterior no canto superior esquerdo, o sinal gerado é o seguinte:

                                  • Sobrecompra
                                  • Valor atual do DeMarker

                                  Em caso de sobrevenda:

                                  Sinal DeM, OB - OS - OS

                                  Como podemos ver, o sinal gerado é o mesmo que o seguinte:

                                  • Sobrevenda
                                  • Valor atual do DeMarker

                                  Em caso de falta de sinal ou equilíbrio:

                                  DeM, OB - OS - sem sinal

                                  Como nós podemos ver, nós obtivemos um sinal gerado do valor atual do DeMarker.

                                    Estratégia três: Divergência do DeMarker

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

                                      //+------------------------------------------------------------------+
                                      //|                                          DeMarker Divergence.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 deMarkerArray[];
                                         MqlRates pArray[];
                                      
                                      
                                         ArraySetAsSeries(deMarkerArray,true);
                                         ArraySetAsSeries(pArray,true);
                                      
                                         int deMarkerDef = iDeMarker(_Symbol,_Period,14);
                                         int pData = CopyRates(_Symbol,_Period,0,14,pArray);
                                      
                                         CopyBuffer(deMarkerDef,0,0,14,deMarkerArray);
                                      
                                         double deMarkerVal = NormalizeDouble(deMarkerArray[0],4);
                                         double deMarkerPrevVal = NormalizeDouble(deMarkerArray[1],4);
                                      
                                         double currentHigh = NormalizeDouble(pArray[0].high,6);
                                         double currentLow = NormalizeDouble(pArray[0].low,6);
                                         double prevHigh = NormalizeDouble(pArray[1].high,6);
                                         double prevLow = NormalizeDouble(pArray[1].low,6);
                                      
                                         if(currentHigh>prevHigh && deMarkerVal<deMarkerPrevVal)
                                           {
                                            Comment("Bearish divergence","\n",
                                                    "Current High is ",currentHigh,"\n",
                                                    "Prev. High Value is ",prevHigh,"\n",
                                                    "Current DeMarker Value is ",deMarkerVal,"\n",
                                                    "Prev. DeMarker Value is ",deMarkerPrevVal);
                                           }
                                         if(currentLow<prevLow && deMarkerVal>deMarkerPrevVal)
                                           {
                                            Comment("Bullish divergence","\n",
                                                    "Current Low is ",currentLow,"\n",
                                                    "Prev. Low Value is ",prevLow,"\n",
                                                    "Current DeMarker Value is ",deMarkerVal,"\n",
                                                    "Prev. DeMarker Value is ",deMarkerPrevVal);
                                           }
                                      
                                        }
                                      //+------------------------------------------------------------------+
                                      

                                      Diferenças neste código.

                                      Criação de dois arrays, um para o deMarkerArray usando a função do tipo "double", outro para o pArray (preços) usando a função "MqlRates" para armazenar as informações de preço, volume e spread.

                                         double deMarkerArray[];
                                         MqlRates pArray[];

                                      Definição da flag AS_SERIES para esses dois arrays criados.

                                         ArraySetAsSeries(deMarkerArray,true);
                                         ArraySetAsSeries(pArray,true);

                                      Definição do deMarketDef, pData

                                         int deMarkerDef = iDeMarker(_Symbol,_Period,14);
                                         int pData = CopyRates(_Symbol,_Period,0,14,pArray);

                                      Preenchimento do deMarkerArray

                                      CopyBuffer(deMarkerDef,0,0,14,deMarkerArray);

                                      Definição do deMarkerVal, deMarkerPrevVal, máxima atual, mínima atual, anterior. máxima, e anterior. mínima

                                         double deMarkerVal = NormalizeDouble(deMarkerArray[0],4);
                                         double deMarkerPrevVal = NormalizeDouble(deMarkerArray[1],4);
                                      
                                         double currentHigh = NormalizeDouble(pArray[0].high,6);
                                         double currentLow = NormalizeDouble(pArray[0].low,6);
                                         double prevHigh = NormalizeDouble(pArray[1].high,6);
                                         double prevLow = NormalizeDouble(pArray[1].low,6);

                                      Condições da estratégia.

                                      Em caso de divergência de baixa:

                                         if(currentHigh>prevHigh && deMarkerVal<deMarkerPrevVal)
                                           {
                                            Comment("Bearish divergence","\n",
                                                    "Current High is ",currentHigh,"\n",
                                                    "Prev. High Value is ",prevHigh,"\n",
                                                    "Current DeMarker Value is ",deMarkerVal,"\n",
                                                    "Prev. DeMarker Value is ",deMarkerPrevVal);
                                           }

                                      Em caso de divergência de alta:

                                         if(currentLow<prevLow && deMarkerVal>deMarkerPrevVal)
                                           {
                                            Comment("Bullish divergence","\n",
                                                    "Current Low is ",currentLow,"\n",
                                                    "Prev. Low Value is ",prevLow,"\n",
                                                    "Current DeMarker Value is ",deMarkerVal,"\n",
                                                    "Prev. DeMarker Value is ",deMarkerPrevVal);
                                           }

                                      Após compilar este código, nós podemos encontrá-lo na janela do navegador igual a imagem a seguir. Então nós vamos encontrá-lo anexado ao gráfico o mesmo que o seguinte:

                                      Devergência anexado

                                      Como nós podemos ver no canto superior esquerdo do gráfico anterior, temos o expert anexado ao gráfico e agora nós podemos receber os sinais desse expert com base nessa estratégia de negociação da mesma forma que a seguir.

                                       Em caso de divergência de alta:

                                       Sinal de Divergência de Alta

                                      Como nós podemos ver no canto superior esquerdo do gráfico anterior, nós temos o seguinte sinal gerado:

                                      • Divergência de alta
                                      • Valor da máxima atual
                                      • Valor da máxima anterior
                                      • Valor atual do DeMarker
                                      • Valor do DeMarker anterior

                                      Em caso de divergência de baixa:

                                       Sinal de divergência de baixa

                                      Como nós podemos ver no canto superior esquerdo do gráfico anterior, nós temos o seguinte sinal gerado:

                                      • Divergência de baixa
                                      • Valor da máxima atual
                                      • Valor da máxima anterior
                                      • Valor atual do DeMarker
                                      • Valor do DeMarker anterior

                                      Conclusão

                                      De acordo com o que você aprendeu neste artigo, supõe-se que você já tenha identificado detalhadamente esse indicador técnico do DeMarker porque nós aprendemos o que ele é, o que ele mede, como nós podemos calculá-lo e como nós podemos lê-lo e usá-lo por meio de estratégias simples com base no conceito principal por trás dele. Essas estratégias simples foram:

                                      • Força do DeMarker: para receber os sinais de força ou fraqueza com base na posição do DeMarker atual e na média dos últimos 5 períodos do valor do DeMarker.
                                      • DeMarker, OB - OS: para receber os sinais de sobrecompra ou sobrevenda com base na posição do valor do DeMarker atual em uma escala de 0 a 1.
                                      • Divergência do DeMarker: para receber os sinais de divergências de alta ou baixa com base na posição do DeMarker atual, DeMarker anterior, máxima atual e anterior.

                                      Além disso, desenvolvemos um esquema passo a passo para cada estratégia mencionada para nos ajudar a criar um sistema de negociação para ela sem problemas. Então, nós aprendemos o tópico mais interessante porque nós criamos um sistema de negociação baseado no que projetamos nos esquemas das estratégias mencionadas para receber esses sinais de forma automática pela 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 para você e tenha informações úteis sobre o tópico do artigo ou quaisquer tópicos relacionados, se quiser ler mais artigos semelhantes, você pode ler 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/11394

                                      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.
                                      Algoritmos de otimização populacional Algoritmos de otimização populacional
                                      Este é um artigo introdutório sobre a classificação do algoritmo de otimização (OA). O artigo tenta criar um banco de teste (um conjunto de funções), que deve ser usado para comparar os OAs e, talvez, identificar o algoritmo mais universal de todos os que são amplamente conhecidos.
                                      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.
                                      Como desenvolver um sistema de negociação baseado no indicador VIDYA Como desenvolver um sistema de negociação baseado no indicador VIDYA
                                      Bem-vindo a um novo artigo da nossa série sobre como desenvolver um sistema de negociação pelos indicadores técnicos mais populares, neste artigo aprenderemos sobre uma nova ferramenta técnica e aprenderemos como desenvolver um sistema de negociação pelo Variable Index Dynamic Average (VIDYA).