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

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

MetaTrader 5Negociação | 28 novembro 2022, 09:28
301 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

Introdução

Aqui está um novo artigo da nossa série que é para iniciantes aprenderem sobre uma nova ferramenta técnica e como desenvolver um sistema de negociação baseado em estratégias simples. Ele é o indicador Variable Index Dynamic Average (VIDYA). Este indicador é um dos indicadores de tendência que pode ser usado em nossa negociação e o conceito deste termo significa que este indicador segue a tendência. Portanto, ele é um indicador com atraso e significa que ele se move após o movimento do preço. Nós abordaremos esse indicador através dos seguintes tópicos:

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


Se você deseja desenvolver suas habilidades de programação, você pode aplicar o que aprendeu sozinho para aprofundar sua compreensão, porque a prática é uma etapa muito importante em qualquer processo de aprendizado. Nós usaremos a MQL5 (MetaQuotes Language 5) que está integrada na plataforma de negociação MetaTrader 5, se você não sabe como como baixar e usá-la, você pode ler o tópico Escrevendo o código em MQL5 no MetaEditor de um artigo anterior.

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 VIDYA

O Variable Index Dynamic Average (VIDYA) é um indicador de tendência desenvolvido por Tushar Chande. Ele prece a média móvel exponencial, mas ele será ajustado dinamicamente com base na volatilidade relativa dos preços. A volatilidade é medida pelo Chande Momentum Oscillator (CMO) neste indicador medindo a relação entre a soma dos movimentos positivos e negativos da mesma forma que nós veremos quando aprendermos como calculá-lo. O CMO é usado para suavizar a média móvel exponencial. Assim, da mesma forma que nós veremos, nós podemos encontrar as configurações deste indicador na forma de parâmetros como o período CMO e o período EMA. Ele pode ser usado da mesma forma que qualquer média móvel para obter o tipo de tendência, se for uma tendência de alta ou de baixa. Se você quiser aprender mais sobre os tipos de tendência e como identificá-los, leia o tópico sobre a definição de tendência de um artigo anterior. Ou você pode usá-lo para gerar sinais de compra ou venda, nós veremos algumas estratégias simples baseadas nisso através do tópico da estratégia do VIDYA.

Agora, nós precisamos aprender como nós podemos calcular o indicador VIDYA para entender mais sobre o conceito principal por trás dele. As etapas a seguir são como calculá-lo manualmente.

  • Calculamos a EMA:

EMA(i) = Price(i) * F + EMA(i-1)*(1-F)

Onde:

EMA(i) = EMA atual

Price(i) = preço atual

F (fator de suavização) = 2/(EMA do período+1)

EMA(i-1) = Valor anterior de EMA

  • Calculamos o valor de Variable Index Dynamic Average (VIDYA):

VIDYA(i) = Price(i) * F * ABS(CMO(i)) + VIDYA(i-1) * (1 - F* ABS(CMO(i)))

Onde:

VIDYA(i) = VIDYA atual

ABS(CMO(i)) = O valor atual absoluto do Chande Momentum Oscillator

VIDYA(i-1) = Valor anterior de VIDYA

  • Calculamos o Chande Momentum Oscillator (CMO):

CMO(i) = (UpSum(i) - DnSum(i))/(UpSum(i) + DnSum(i))

Onde:

UpSum(i) = O valor atual da soma dos movimentos positivos durante o período

DnSum(i) = O valor atual da soma dos movimentos negativos durante o período

Depois disso, nós podemos obter o indicador VIDYA. Hoje em dia, nós não precisamos calculá-lo manualmente, mas nós podemos simplesmente escolhê-lo para ser inserido no gráfico a partir dos indicadores disponíveis na plataforma de negociação MetaTrader 5. Aqui está como inseri-lo.

Inserir --> Indicadores --> Tendência --> Variable Index Dynamic Average

Inserção do VIDYA

Isso abrirá a seguinte janela com os parâmetros do indicador:

parâmetros do VIDYA

1 - o período do Chande Momentum Oscillator (CMO)

2 - o período do período da média móvel exponencial (EMA)

3 - o tipo de preço

4 - a cor da linha do VIDYA

5 - o estilo da linha do VIDYA

6 - a espessura da linha do VIDYA

Depois de determinar todos os parâmetros anteriores e pressionar "OK", nós encontraremos o indicador anexado ao gráfico da seguinte forma:

 VIDYA anexado

Como nós podemos ver no gráfico anterior, o indicador é inserido no gráfico e ele é uma linha acima ou abaixo dos preços com base em seu valor e nos movimentos dos preços. Quando nós vemos a linha do VIDYA acima do preço, significa que há uma tendência de baixa e vice-versa, quando a linha do VIDYA está abaixo do preço, significa que há uma tendência de alta.


Estratégia do VIDYA

Neste tópico nós aprenderemos como utilizar o indicador VIDYA através das estratégias simples baseadas no conceito principal deste indicador. É melhor combinar este indicador com outras ferramentas ou indicadores técnicos para obter os resultados mais confiáveis e eficazes. Porque ele vai te dar mais "insights" de várias perspectivas e esse é um dos recursos da análise técnica.

    Estratégia um: identificador de tendência do VIDYA

      Nós precisamos obter um sinal com o tipo de tendência se for para cima ou para baixo com base na comparação do fechamento atual e do VIDYA atual com suas configurações padrão (9,12). Nós precisamos definir um sinal com a tendência de alta se o fechamento atual estiver acima do VIDYA. No outro caso, nós precisamos obter um sinal com a tendência de baixa se o fechamento atual estiver abaixo do VIDYA.

      Fechamento atual > VIDYA --> tendência de alta

      Fechamento atual < VIDYA --> tendência de baixa

        Estratégia dois: Cruzamento do VIDYA

          Nós precisamos obter os sinais de compra ou venda com base na comparação dos mesmos valores da estratégia anterior. Nós precisamos obter um sinal de compra se o fechamento atual estiver acima do VIDYA. Vice-versa, se o fechamento atual estiver abaixo do VIDYA atual, nós precisamos obter um sinal de venda.

          Fechamento atual > VIDYA --> Sinal de compra

          Fechamento atual < VIDYA --> Sinal de venda

            Estratégia três: Cruzamento de dois VIDYA

              Nós precisamos obter os sinais de compra ou venda com base na comparação do VIDYA com sua configuração (9, 12) e do VIDYA com sua configuração (20, 50). Precisamos obter um sinal de compra quando o VIDYA (9, 12) se tornar maior que o VIDYA (20, 50). No outro cenário, se o VIDYA atual (9, 12) for menor que o VIDYA atual (20, 50), será um sinal de venda.

              VIDYA (9, 12) > VIDYA (20, 50) --> Sinal de compra

              VIDYA (9, 12) < VIDYA (20, 50) --> Sinal de venda

              Por meio das três estratégias simples anteriores, nós aprendemos como usar o indicador VIDYA com base no conceito principal por trás dele.


              Esquema da estratégia do VIDYA

              Neste tópico, nós criaremos um plano passo a passo para nos ajudar a criar o nosso sistema de negociação para cada estratégia mencionada sem problemas.

                Estratégia um: identificador de tendência do VIDYA

                  De acordo com esta estratégia, nós precisamos criar um sistema de negociação que possa ser usado para gerar os sinais do tipo da tendência. Nós precisamos que o sistema de negociação verifique os dois valores que são o fechamento atual e o valor do VIDYA atual para determinar qual é o tipo da tendência. Se o valor de fechamento atual for maior que o valor do VIDYA, ele será um sinal de que a tendência é de alta.

                  Assim, nós precisamos que o sistema de negociação retorne um comentário no gráfico com os seguintes valores:

                  • Tendência de alta
                  • Valor de fechamento atual
                  • Valor do VIDYA atual

                  No outro cenário, se o valor atual do fechamento for menor que o valor atual do VIDYA, será um sinal de que a tendência é de baixa.

                  Assim, nós precisamos que o sistema de negociação retorne um comentário no gráfico com os seguintes valores:

                  • Tendência de baixa
                  • Valor de fechamento atual
                  • Valor do VIDYA atual

                  A seguir está o projeto desta estratégia:

                   Esquema do identificador de tendência do VIDYA

                    Estratégia dois: Cruzamento do VIDYA

                      De acordo com esta estratégia, nós precisamos criar um sistema de negociação que possa ser usado para nos alertar se tivermos um sinal de compra ou venda. Nesta estratégia, nós usaremos os mesmos valores do identificador de tendência do VIDYA, mas para obter sinais diferentes. Nós precisamos que o sistema de negociação verifique dois valores e eles são o fechamento atual e o valor do VIDYA atual, se o fechamento atual for maior que o valor do VIDYA, será um sinal de compra.

                      Então, nós precisamos que o sistema de negociação retorne os seguintes valores:

                      • Sinal de compra
                      • Valor de fechamento atual
                      • Valor do VIDYA atual

                      Vice-versa, se o fechamento atual for menor que o VIDYA, será um sinal de venda.

                      Assim, nós precisamos que o sistema de negociação retorne um comentário no gráfico com os seguintes valores:

                      • Sinal de venda
                      • Valor de fechamento atual
                      • Valor do VIDYA atual
                      A seguir está o projeto desta estratégia:

                      Esquema do cruzamento do VIDYA

                        Estratégia três: Cruzamento de dois VIDYA

                          De acordo com este artigo, nós precisamos criar um sistema de negociação que possa ser usado para gerar os sinais de compra e venda. Nós precisamos verificar continuamente os valores atuais do VIDYA (9, 12) e do VIDYA (20, 50). Se o valor atual (9, 12) for maior que o atual (20, 50), será um sinal de compra.

                          Então, nós precisamos que o sistema de negociação retorne os seguintes valores:

                          • Sinal de compra
                          • Valor de fechamento atual
                          • Valor atual do VIDYA (9, 12)
                          • Valor atual do VIDYA (20, 50)

                          No outro cenário, se o valor atual do VIDYA (9, 12) for menor que o valor atual do VIDYA (20, 50), ele será um sinal de venda.

                          Então, nós precisamos que o sistema de negociação retorne os seguintes valores:

                          • Sinal de venda
                          • Valor de fechamento atual
                          • Valor atual do VIDYA (9, 12)
                          • Valor atual do VIDYA (20, 50)

                          A seguir está o projeto desta estratégia:


                          Esquema do Cruzamento de dois VIDYA

                          Agora, nós projetamos um esquema passo a passo simples para cada estratégia mencionada para ajudar a criar o nosso sistema de negociação automatizado e nós estamos prontos para passar pelo tópico mais interessante do sistema de negociação do VIDYA para criar um sistema de negociação para cada estratégia. 


                          Sistema de negociação do VIDYA

                          Este sistema de negociação simples nos ajudará a ver o valor atual do indicador VIDYA continuamente porque nós veremos esse valor como um comentário no gráfico.

                          As etapas a seguir são sobre como criar um sistema de negociação para fazer o que nós precisamos.

                          Nós criaremos um array para o "vidyaArray" usando a função do tipo double que é um dos tipos reais ou tipos de ponto flutuante que representa o valor com frações.

                          double vidyaArray[];

                          Nós ordenamos o array "vidyaArray" criado usando a função "ArraySetAsSeries" para retornar um valor booleano.

                          ArraySetAsSeries(vidyaArray,true);

                          Nós criaremos uma variável inteira para que "vidyaDef" seja igual à definição do indicador VIDYA usando a função "iVIDyA" para retornar o manipulador do indicador.

                          Os parâmetros são:

                          • symbol: nós usaremos o (_Symbol) para ser aplicado ao símbolo atual
                          • period: nós usaremos o (_Period) para ser aplicado ao período ou período atual
                          • cmo_period: para determinar o período de Chande Momentum, nós determinaremos um valor igual a 9
                          • ema_period: para determinar o período de suavização da média móvel exponencial, nós determinaremos um valor igual a 12
                          • ma_shift: para determinar o deslocamento horizontal no gráfico, se precisarmos, nós determinaremos um valor igual 0
                          • applied_price: para determinar o tipo de preço, nós usaremos o preço de fechamento
                          int vidyaDef = iVIDyA(_Symbol,_Period,9,12,0,PRICE_CLOSE);

                          Nós vamos preencher o array criado usando a função "CopyBuffer" para obter os dados do indicador VIDYA.

                          Parâmetros desta função:

                          • indicador_handle: para determinar o manipulador do indicador, nós usaremos (vidyaDef)
                          • 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 para copiar, usaremos (vidyaArray)
                          CopyBuffer(vidyaDef,0,0,3,vidyaArray);

                           Obteremos o "vidyaVal" após criar uma variável usando a função "NormalizeDouble" para retornar o valor do tipo double.

                          Parâmetros desta função:

                          • value: usaremos (vidyaArray[0]) como um número normalizado
                          • digits: usaremos (6) como o número de dígitos após a vírgula
                          double vidyaVal = NormalizeDouble(vidyaArray[0],6);

                          Usaremos a função comment para gerar um comentário no gráfico com o valor atual do VIDYA:

                          Comment("VIDYA Value is ",vidyaVal);

                          Assim, nós podemos encontrar o código completo deste sistema de negociação igual ao seguinte:

                          //+------------------------------------------------------------------+
                          //|                                                 Simple VIDYA.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 vidyaArray[];
                          
                             ArraySetAsSeries(vidyaArray,true);
                          
                             int vidyaDef = iVIDyA(_Symbol,_Period,9,12,0,PRICE_CLOSE);
                          
                             CopyBuffer(vidyaDef,0,0,3,vidyaArray);
                          
                             double vidyaVal = NormalizeDouble(vidyaArray[0],6);
                          
                             Comment("VIDYA Value is ",vidyaVal);
                          
                            }
                          //+------------------------------------------------------------------+

                          Depois de compilar este código, nós encontraremos o expert deste sistema de negociação no navegador da mesma forma que o seguinte:

                           VIDYA nav

                          Depois de arrastá-lo e soltá-lo no gráfico, nós encontraremos a janela deste sistema de negociação igual à seguinte:

                           Janela Simple VIDYA

                          Ao pressionar "OK", encontraremos o expert anexado igual ao seguinte:

                          Simple VIDYA anexado

                          Nós podemos ver no gráfico anterior, que nós temos o expert anexado no canto superior direito. Então nós podemos encontrar o sinal desejado da mesma forma que o seguinte:

                           Sinal do Simple VIDYA

                          Como nós podemos ver no gráfico anterior, nós temos o comentário no canto superior esquerdo com o valor atual do VIDYA. Se nós precisarmos ter certeza de que nós temos o mesmo valor que o valor do indicador VIDYA integrado, nós podemos, depois de anexar o expert, inserir o indicador integrado com as mesmas configurações do expert da seguinte forma:

                           Mesmo sinal do Simple VIDYA

                          Como nós podemos ver no gráfico anterior, nós temos o expert anexado ao gráfico, como nós podemos ver no canto superior direito e temos o valor atual desse expert no canto superior esquerdo do gráfico e o indicador integrado está anexado ao gráfico de preços com o seu valor, como podemos ver na janela de dados à direita. Claramente, nós podemos descobrir que ambos os valores são os mesmos.

                            Estratégia um: identificador de tendência do VIDYA

                              Se nós precisarmos criar um sistema de negociação para esta estratégia, nós podemos encontrar o seguinte código completo desta estratégia:

                              //+------------------------------------------------------------------+
                              //|                                       VIDYA trend identifier.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 priceArray[];
                                 double vidyaArray[];
                              
                                 int Data=CopyRates(_Symbol,_Period,0,3,priceArray);
                                 ArraySetAsSeries(vidyaArray,true);
                              
                                 int vidyaDef = iVIDyA(_Symbol,_Period,9,12,0,PRICE_CLOSE);
                              
                                 CopyBuffer(vidyaDef,0,0,3,vidyaArray);
                              
                                 double currentClose=NormalizeDouble(priceArray[2].close,6);
                                 double vidyaVal = NormalizeDouble(vidyaArray[0],6);
                              
                                 if(currentClose>vidyaVal)
                                   {
                                    Comment("Uptrend","\n",
                                            "Current Close Value is ",currentClose,"\n",
                                            "Current VIDYA Value is ",vidyaVal);
                                   }
                              
                                 if(currentClose<vidyaVal)
                                   {
                                    Comment("Downtrend","\n",
                                            "Current Close Value is ",currentClose,"\n",
                                            "Current VIDYA Value is ",vidyaVal);
                                   }
                              
                              
                                }
                              //+------------------------------------------------------------------+

                              Diferenças neste código:

                              Criação de dois arrays para os preços usando a função "MqlRates" e para o VIDYA usando o tipo "double" como mencionamos anteriormente.

                                 MqlRates priceArray[];
                                 double vidyaArray[];

                              A ordenação desses arrays criados, para o priceArray nós usaremos a função "CopyRates" para obter os dados históricos do "MqlRates". Seus parâmetros são:

                              • nome do símbolo: nós usaremos (_Symbol)
                              • timeframe: usaremos (_Period)
                              • start time: usaremos (0)
                              • stop time: usaremos (3)
                              • rates array: usaremos (priceArray)

                              Para o vidyaArray nós usaremos a função "ArraySetAsSeries" a mesma que nós mencionamos anteriormente.

                                 int Data=CopyRates(_Symbol,_Period,0,3,priceArray);
                                 ArraySetAsSeries(vidyaArray,true);

                              Definir o fechamento do preço atual e os valores atuais do VIDYA.

                                 double currentClose=NormalizeDouble(priceArray[2].close,6);
                                 double vidyaVal = NormalizeDouble(vidyaArray[0],6);

                              Condições desta estratégia:

                              1. Em caso de tendência de alta

                                 if(currentClose>vidyaVal)
                                   {
                                    Comment("Uptrend","\n",
                                            "Current Close Value is ",currentClose,"\n",
                                            "Current VIDYA Value is ",vidyaVal);
                                   }

                              2. Em caso de tendência de baixa

                                 if(currentClose<vidyaVal)
                                   {
                                    Comment("Downtrend","\n",
                                            "Current Close Value is ",currentClose,"\n",
                                            "Current VIDYA Value is ",vidyaVal);
                                   }

                              Após compilar este código e inseri-lo no gráfico desejado, ele ficará igual ao seguinte:

                              Identificador de tendência do VIDYA anexado

                              Podemos ver, que o expert identificador de tendência do VIDYA está anexado, como nós podemos ver no canto superior direito do gráfico anterior. Agora, nós podemos começar a receber os sinais dele. Abaixo nós encontramos alguns exemplos desses sinais obtidos durante o teste.

                              1. Em caso de tendência de alta

                               Identificador de tendência do VIDYA - sinal de tendência de alta

                              Como podemos ver no gráfico anterior no canto superior esquerdo, nós podemos encontrar os seguintes valores:

                              • Tendência de alta
                              • Valor de fechamento atual
                              • Valor do VIDYA atual

                              2. Em caso de tendência de baixa

                               Identificador de tendência do VIDYA - sinal de tendência de baixa

                              Com base no gráfico anterior, nós podemos encontrar os seguintes valores:

                              • Tendência de baixa
                              • Valor de fechamento atual
                              • Valor do VIDYA atual
                                Estratégia dois: Cruzamento do VIDYA

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

                                  //+------------------------------------------------------------------+
                                  //|                                          VIDYA one 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()
                                    {
                                     MqlRates priceArray[];
                                     double vidyaArray[];
                                  
                                     int Data=CopyRates(_Symbol,_Period,0,3,priceArray);
                                     ArraySetAsSeries(vidyaArray,true);
                                  
                                     int vidyaDef = iVIDyA(_Symbol,_Period,9,12,0,PRICE_CLOSE);
                                  
                                     CopyBuffer(vidyaDef,0,0,3,vidyaArray);
                                  
                                     double currentClose=NormalizeDouble(priceArray[2].close,6);
                                     double vidyaVal = NormalizeDouble(vidyaArray[0],6);
                                  
                                     if(currentClose>vidyaVal)
                                       {
                                        Comment("Buy signal","\n",
                                                "Current Close Value is ",currentClose,"\n",
                                                "Current VIDYA Value is ",vidyaVal);
                                       }
                                  
                                     if(currentClose<vidyaVal)
                                       {
                                        Comment("Sell signal","\n",
                                                "Current Close Value is ",currentClose,"\n",
                                                "Current VIDYA Value is ",vidyaVal);
                                       }
                                  
                                  
                                    }
                                  //+------------------------------------------------------------------+

                                  Diferenças neste código:

                                  Comentário com base nessa estratégia.

                                  1. Em caso de sinal de compra

                                     if(currentClose>vidyaVal)
                                       {
                                        Comment("Buy signal","\n",
                                                "Current Close Value is ",currentClose,"\n",
                                                "Current VIDYA Value is ",vidyaVal);
                                       }

                                  2. Em caso de sinal de venda

                                     if(currentClose<vidyaVal)
                                       {
                                        Comment("Sell signal","\n",
                                                "Current Close Value is ",currentClose,"\n",
                                                "Current VIDYA Value is ",vidyaVal);
                                       }

                                  Após compilar este código e inseri-lo no gráfico desejado encontramos ele da seguinte forma:

                                  Cruzamento do VIDYA anexado

                                  Como nós podemos ver no gráfico anterior, no canto superior direito, o expert está anexado ao gráfico. Depois disso, nós receberemos os sinais de compra e venda com base nessa estratégia. Exemplos do teste do sistema são mostrados abaixo.

                                  1. Em caso de sinal de compra

                                  Cruzamento do VIDYA - sinal de compra

                                  Como nós podemos ver no gráfico anterior no canto superior esquerdo, nós podemos encontrar os seguintes valores com base no cruzamento do VIDYA:

                                  • Sinal de compra
                                  • Valor de fechamento atual
                                  • Valor do VIDYA atual

                                  2. Em caso de sinal de venda

                                   Cruzamento do VIDYA - sinal de venda

                                  Como podemos ver no gráfico anterior no canto superior esquerdo, nós podemos encontrar os seguintes valores:

                                  • Sinal de venda
                                  • Valor de fechamento atual
                                  • Valor do VIDYA atual
                                    Estratégia três: Cruzamento de dois VIDYA

                                      A seguir está o código completo desta estratégia de cruzamento do VIDYA para criar um sistema de negociação para ela.

                                      //+------------------------------------------------------------------+
                                      //|                                          VIDYA two 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()
                                        {
                                         MqlRates priceArray[];
                                         double vidyaArray[];
                                         double vidyaArray1[];
                                      
                                         int Data=CopyRates(_Symbol,_Period,0,3,priceArray);
                                         ArraySetAsSeries(vidyaArray,true);
                                         ArraySetAsSeries(vidyaArray1,true);
                                      
                                         int vidyaDef = iVIDyA(_Symbol,_Period,9,12,0,PRICE_CLOSE);
                                         int vidyaDef1 = iVIDyA(_Symbol,_Period,20,50,0,PRICE_CLOSE);
                                      
                                         CopyBuffer(vidyaDef,0,0,3,vidyaArray);
                                         CopyBuffer(vidyaDef1,0,0,3,vidyaArray1);
                                      
                                         double currentClose=NormalizeDouble(priceArray[2].close,6);
                                         double vidyaVal = NormalizeDouble(vidyaArray[0],6);
                                         double vidyaVal1 = NormalizeDouble(vidyaArray1[0],6);
                                      
                                         if(vidyaVal>vidyaVal1)
                                           {
                                            Comment("Buy signal","\n",
                                                    "Current Close Value is ",currentClose,"\n",
                                                    "Current VIDYA (9,12) Value is ",vidyaVal,"\n",
                                                    "Current VIDYA (20,50) Value is ",vidyaVal1);
                                           }
                                      
                                         if(vidyaVal<vidyaVal1)
                                           {
                                            Comment("Sell signal","\n",
                                                    "Current Close Value is ",currentClose,"\n",
                                                    "Current VIDYA (9,12) Value is ",vidyaVal,"\n",
                                                    "Current VIDYA (20,50) Value is ",vidyaVal1);
                                           }
                                      
                                      
                                        }
                                      //+------------------------------------------------------------------+

                                      Diferenças neste código:

                                      Criação de três arrays para preço, vidyaArray, vidyaArray1

                                         MqlRates priceArray[];
                                         double vidyaArray[];
                                         double vidyaArray1[];

                                      Ordenação desses arrays criados

                                         int Data=CopyRates(_Symbol,_Period,0,3,priceArray);
                                         ArraySetAsSeries(vidyaArray,true);
                                         ArraySetAsSeries(vidyaArray1,true);

                                      Definição do "vidyaDef" e "vidyaDef1"

                                         int vidyaDef = iVIDyA(_Symbol,_Period,9,12,0,PRICE_CLOSE);
                                         int vidyaDef1 = iVIDyA(_Symbol,_Period,20,50,0,PRICE_CLOSE);

                                      Preenchimento dos arrays "vidyaArray" e "vidyaArray1"

                                         CopyBuffer(vidyaDef,0,0,3,vidyaArray);
                                         CopyBuffer(vidyaDef1,0,0,3,vidyaArray1);

                                      Definição dos valores de currentClose, "vidyaVal" e "vidyaVal1"

                                         double currentClose=NormalizeDouble(priceArray[2].close,6);
                                         double vidyaVal = NormalizeDouble(vidyaArray[0],6);
                                         double vidyaVal1 = NormalizeDouble(vidyaArray1[0],6);

                                      Condições de sinais com base nesta estratégia:

                                      1. Em caso de sinal de compra

                                         if(vidyaVal>vidyaVal1)
                                           {
                                            Comment("Buy signal","\n",
                                                    "Current Close Value is ",currentClose,"\n",
                                                    "Current VIDYA (9,12) Value is ",vidyaVal,"\n",
                                                    "Current VIDYA (20,50) Value is ",vidyaVal1);
                                           }

                                      2. Em caso de sinal de venda

                                         if(vidyaVal<vidyaVal1)
                                           {
                                            Comment("Sell signal","\n",
                                                    "Current Close Value is ",currentClose,"\n",
                                                    "Current VIDYA (9,12) Value is ",vidyaVal,"\n",
                                                    "Current VIDYA (20,50) Value is ",vidyaVal1);
                                           }

                                      Após compilar este código e inseri-lo no gráfico desejado, ele ficará igual ao seguinte:

                                       Cruzamento de dois VIDYA anexado

                                      Podemos ver no gráfico anterior que temos o expert anexado ao gráfico no canto superior direito. Agora, nós podemos ver os sinais de compra e venda com base nessa estratégia. Alguns exemplos do teste do sistema são exibidos abaixo.

                                      Em caso de sinal de compra:

                                      Cruzamento de dois VIDYA - sinal de compra

                                      Podemos ver no gráfico anterior que no canto superior esquerdo nós temos os seguintes valores após o cruzamento:

                                      • Sinal de compra
                                      • Valor de fechamento atual
                                      • Valor atual do VIDYA (9,12)
                                      • Valor atual do VIDYA (20,50)

                                      Em caso de sinal de venda:

                                       Cruzamento do VIDYA - sinal de venda

                                      No outro cenário, como podemos ver no gráfico anterior no canto superior esquerdo, nós temos os seguintes valores após o cruzamento:

                                      • Sinal de venda
                                      • Valor de fechamento atual
                                      • Valor atual do VIDYA (9,12)
                                      • Valor atual do VIDYA (20,50)


                                      Conclusão

                                      Após todos os tópicos mencionados, será considerado que você sabe o que é a Variable Index Dynamic Average (VIDYA) em detalhes, já que abordamos mais tópicos neste artigo que podem esclarecer isso. Identificamos o que é o indicador Variable Index Dynamic Average (VIDYA), o que ele mede, como podemos calculá-lo manualmente para entender o conceito principal por trás dele e como inseri-lo e lê-lo no gráfico. Aprendemos tudo isso através do tópico da definição do VIDYA. Então, nós aprendemos como podemos usá-lo por meio de estratégias simples baseadas no conceito principal por trás do indicador através do tópico da estratégia do VIDYA:

                                      • Estratégia do identificador de tendência do VIDYA: para obter os sinais com o tipo de tendência se houver uma tendência de alta ou de baixa.
                                      • Estratégia de cruzamento do VIDYA: para obter os sinais de compra ou venda de sinais com base no cruzamento entre os preços e a linha do VIDYA.
                                      • Estratégia de cruzamento do VIDYA: para obter os sinais de compra ou venda de sinais com base no cruzamento entre o VIDYA com configurações de (9,12) e (20, 50).

                                      Espero que você tenha tentado escrever os códigos para o sistema de negociação sozinho para desenvolver suas habilidades de programação como iniciante, pois esta prática é uma etapa muito importante e necessária para aprofundar a sua compreensão e melhorar as suas habilidades não apenas em programação, mas para qualquer processo de aprendizado para qualquer assunto. É importante mencionar que você deve testar qualquer estratégia antes de usá-la em sua conta real com dinheiro real, pois o conceito principal deste artigo é apenas para fins educacionais e você pode achar que precisa otimizá-los ou alterá-los ou você pode descobrir que eles não são adequados para o seu estilo de negociação, pois não há uma estratégia adequada para todos.

                                      Espero que você tenha achado este artigo útil para você e tenha lhe dado bons "insights" sobre o tópico do artigo ou qualquer tópico relacionado. Se você gosta de ler mais artigos semelhantes para aprender sobre os indicadores técnicos mais populares, como usá-los e como desenvolver um sistema de negociação para eles, você pode ler os meus artigos anteriores nesta série para iniciantes para aprender mais sobre eles já que você pode encontrar artigos sobre como desenvolver um sistema de negociação por RSI, MACD, Estocástico, Médias Móveis, Bandas de Bollinger, Envelopes... e outros depois de aprender e entender com mais detalhes sobre esses indicadores técnicos.

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

                                      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.
                                      Crie o seu próprio Indicador técnico Crie o seu próprio Indicador técnico
                                      Neste artigo, eu abordarei os algoritmos que permitem que você crie o seu próprio indicador técnico. Você aprenderá como obter resultados bem complexos e interessantes com suposições iniciais muito simples.
                                      Como desenvolver um sistema de negociação baseado no indicador DeMarker Como desenvolver um sistema de negociação baseado no indicador DeMarker
                                      Aqui está um novo artigo em nossa série sobre como desenvolver um sistema de negociação pelos indicadores técnicos mais populares. Neste artigo, nós apresentaremos como criar um sistema de negociação pelo indicador DeMarker.
                                      Ciência de Dados e Aprendizado de Máquina — Redes Neurais (Parte 02): Arquitetura das Redes Neurais Feed Forward Ciência de Dados e Aprendizado de Máquina — Redes Neurais (Parte 02): Arquitetura das Redes Neurais Feed Forward
                                      Há detalhes a serem abordadas na rede neural feed-forward antes de finalizarmos este assunto, a arquitetura é uma delas. Vamos ver como nós podemos construir e desenvolver uma rede neural flexível para as nossas entradas, o número de camadas ocultas e os nós para cada rede.