English Русский 中文 Español Deutsch 日本語 한국어 Français Italiano Türkçe
preview
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

MetaTrader 5Negociação | 30 novembro 2022, 09:25
524 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

Introdução

Bem-vindo ao meu novo artigo em nossa série para aprender novas ferramentas técnicas em detalhes e desenvolver um sistema de negociação simples com esta ferramenta. Ele é o indicador Índice de Vigor Relativo (RVI), nós vamos abordá-lo através dos seguintes tópicos:

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

Nós usaremos a IDE MQL5 (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. Eu aconselho que você aplique tudo neste artigo sozinho, pois ele desenvolverá suas habilidades rapidamente e lhe fornecerá uma compreensão profunda do tópico. 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.

Todas as estratégias mencionadas são apenas para fins educacionais, portanto, você pode achar que elas necessitem de otimização e isso é normal, pois o objetivo principal deste artigo e essas estratégias simples é de aprender o conceito principal por trás disso. 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.

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 Índice de Vigor Relativo

Neste tópico, nós aprenderemos detalhadamente o que é o Índice de Vigor Relativo (RVI). Ele é um indicador técnico de momentum e oscilador. Ao comparar o preço de fechamento com o seu nível de abertura, esse indicador mede a força da tendência. Durante a tendência de alta, o preço de fechamento fecha acima do preço de abertura, mas durante a tendência de baixa, o preço de fechamento fecha abaixo do preço de abertura. Além disso, os resultados foram suavizados usando a média móvel simples. Este indicador RVI tem um desempenho melhor durante os mercados de tendências do que os períodos de variação de acordo com a sua natureza. Nós podemos descobrir que o cálculo do RVI é semelhante ao do Oscilador Estocástico, mas o RVI está comparando o preço de fechamento com o de abertura e o Oscilador Estocástico está comparando o fechamento com sua faixa de preço durante um período específico. Se nós quisermos calcular o RVI manualmente, nós podemos fazê-lo através dos seguintes passos:

RVI = (CLOSE - OPEN) / (HIGH - LOW)

Onde:

CLOSE = preço de fechamento

OPEN = preço de abertura

HIGH= máxima do preço

LOW = mínima do preço

Mas geralmente, o RVI que nós usamos aparece como duas linhas com componentes diferentes no cálculo e a seguir está como nós podemos calculá-los.

1- Cálculo da 1ª linha:

  • Cálculo do Numerador:

MovAverage = (CLOSE-OPEN) + 2 * (CLOSE-1 - OPEN-1) + 2 * (CLOSE-2 - OPEN-2) + (CLOSE-3 - OPEN-3)

Onde:

CLOSE = Preço de fechamento atual

CLOSE 1, CLOSE 2, CLOSE 3 = preços de fechamento de 1, 2 e 3 períodos atrás

OPEN = preço de abertura atual

OPEN 1, OPEN 2, OPEN 3 = Preços de abertura de 1, 2 e 3 períodos atrás

  • Cálculo do denominador:

RangeAverage = (HIGH-LOW) + 2 x (HIGH-1 - LOW-1) + 2 x (HIGH-2 - LOW-2) + (HIGH-3 - LOW-3)

Onde:

HIGH = Última Máxima do Preço

HIGH, HIGH 2, HIGH 3 = Últimos máximas do Preço de 1, 2 e 3 períodos atrás

LOW = Última Mínima do Preço

LOW 1, LOW 2, LOW 3 = Últimas Mínimas do Preço de 1, 2 e 3 períodos atrás

  • Calculamos a soma dessas médias da seguinte forma:

RVI médio

2- Cálculo da 2ª linha:

RVIsignal = (RVIaverage + 2 * RVIaverage-1 + 2 * RVIaverage-2 + RVIaverage-3)/6

Agora, nós entendemos o conceito principal por trás desse indicador depois de aprender como calculá-lo manualmente, mas nós não precisamos fazer isso porque ele é calculado na plataforma de negociação MetaTrader 5 e tudo o que precisamos fazer é escolhê-lo entre os indicadores disponíveis. Veja a seguir como inseri-lo no gráfico:

Ao abrir a plataforma MetaTrader 5 --> Inserir --> Indicadores --> Osciladores --> Índice de Vigor Relativo

Inserção do RVI

Após pressionar o Índice de Vigor Relativo, veremos a janela de seus parâmetros da mesma forma que a seguir:

Parâmetros do RVI

1- Para determinar o período.

2- Para determinar a cor da linha do RVI.

3- Para determinar o estilo da linha do RVI.

4- Para determinar a espessura da linha do RVI.

5- Para determinar a cor da linha de sinal.

6- Para determinar o estilo da linha de sinal.

7- Para determinar a espessura da linha de sinal.

Depois de determinar todos os parâmetros, nós descobriremos que o indicador está anexado da mesma forma que o seguinte:

RVI anexado

Como nós podemos ver no gráfico anterior, nós temos o indicador RVI anexado ao gráfico e ele possui duas linhas oscilando em torno do nível zero.


Estratégia do Índice de Vigor Relativo

Após aprender o conceito principal por trás do RVI, nós aprenderemos como usá-lo com base em seu conceito principal por meio de estratégias simples. No entanto, não devemos esquecer o quão importante é testar minuciosamente qualquer ferramenta antes de usá-la em uma conta real para garantir que elas sejam adequadas para sua negociação, pois o objetivo principal aqui é apenas educacional e é normal que você ache necessário que eles precisam de otimizações.

  • Estratégia um: Cruzamento do RVI - tendência de alta:

Com base nessa estratégia, nós precisamos obter os sinais de compra e fechamento durante a tendência de alta por uma condição específica. Quando o valor atual do RVI e o valor atual do sinal do RVI são maiores que o nível zero ao mesmo tempo em que o valor atual do RVI é maior que o valor atual do sinal do RVI, este será um sinal de compra. Vice-versa, quando o valor autal do RVI e o valor atual do sinal RVI estiverem abaixo do nível zero ao mesmo tempo em que o valor atual do RVI estiver abaixo do valor atual do sinal RVI, este será um sinal de encerramento de posição.

Simplesmente,

Valor do RVI > 0 e valor do sinal do RVI > 0 e valor do RVI > valor do sinal do RVI --> compra

Valor do RVI < 0 e valor do sinal do RVI < 0 e valor do RVI < valor do sinal do RVI --> fechar posição

  • Estratégia dois: Cruzamento do RVI - Tendência de baixa:

Com base nessa estratégia, nós precisamos obter os sinais opostos da estratégia do Cruzamento do RVI - Tendência de alta anterior, pois precisamos obter os sinais de venda e de encerramento de posição. Quando o valor atual do RVI e o valor atual do sinal RVI são menores que o nível zero ao mesmo tempo em que o valor atual do RVI é menor que o valor atual do sinal RVI, este será um sinal de venda. Vice-versa, quando o valor atual do RVI e o valor atual do sinal RVI estiverem acima do nível zero ao mesmo tempo que o valor atual do RVI estiver acima do valor atual do sinal RVI, este será um sinal encerramento de posição.

Simplesmente,

Valor do RVI < 0 e valor do sinal RVI < 0 e valor do RVI < valor do sinal do RVI --> venda

Valor do RVI > 0 e valor do sinal do RVI > 0 e valor do RVI > valor do sinal do RVI --> fechar posição 

  • Estratégia três: Cruzamento do RVI e MA:

Com base nessa estratégia, nós precisamos obter os sinais de compra e venda com base em condições específicas, pois nós precisamos obter um sinal de compra quando o preço de fechamento for maior que a média móvel de 100 períodos ao mesmo tempo em que o valor do RVI atual é maior que o valor do sinal do RVI atual. No outro cenário, precisamos obter um sinal de venda quando o preço de fechamento for menor que a média móvel de 100 períodos, ao mesmo tempo em que o valor atual do RVI é menor que o valor atual do sinal do RVI.

Simplesmente,

Preço de fechamento > 100 - Média móvel e valor do RVI > valor do sinal do RVI --> compra

Preço de fechamento < 100 - Média móvel e valor do RVI < valor do sinal do RVI --> venda


Esquema da estratégia do Índice de Vigor Relativo

Após aprender como nós podemos usar o RVI por meio da nossa estratégia mencionada, nós criaremos um esquema passo a passo para cada estratégia para nos ajudar a criar um sistema de negociação sem problemas.

  • Estratégia um: Cruzamento do RVI - tendência de alta:

De acordo com esta estratégia, precisamos criar um sistema de negociação que forneça sinais de compra e fechamento durante a tendência de alta, verificando continuamente os seguintes valores:

  • O valor atual do RVI
  • O valor atual do sinal do RVI
  • O nível zero do indicador RVI

Se o valor atual do RVI for maior que o nível zero, o valor atual do sinal do RVI for maior que o nível zero e o valor atual do RVI for maior que o valor atual do sinal do RVI, nós precisamos que o sistema de negociação retorne os seguintes valores como um comentário no gráfico:

  • Sinal de Compra
  • Valor do Índice de Vigor Relativo
  • Valor do Sinal do RVI

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

  • Sinal de Fechamento
  • Valor do Índice de Vigor Relativo
  • Valor do Sinal do RVI

A seguir está o esquema passo a passo para esta estratégia:

Cruzamento do RVI - esquema U

  • Estratégia dois: Cruzamento do RVI - tendência de baixa:

De acordo com esta estratégia, precisamos criar um sistema de negociação que possa nos dar sinais de venda e fechamento durante a tendência de baixa, verificando continuamente os mesmos valores da estratégia anterior:

  • O valor atual do RVI
  • O valor atual do sinal do RVI
  • O nível zero do indicador RVI

Mas as condições serão ligeiramente diferentes de acordo com os sinais desejados. Se o valor do RVI atual for menor que o nível zero, o valor do sinal do RVI atual for menor que o nível zero ao mesmo tempo, o valor do RVI for menor que o valor do sinal do RVI, precisamos que o sistema de negociação retorne os seguintes valores como um comentário sobre o gráfico:

  • Sinal de Venda
  • Valor do Índice de Vigor Relativo
  • Valor do Sinal do RVI

Por outro lado, se o valor atual do RVI for maior que o nível zero, o valor do sinal atual do RVI for maior que o nível zero ao mesmo tempo, o valor do RVI é maior que o valor do sinal do RVI, precisamos que o sistema de negociação retorne os seguintes valores como um comentário no gráfico:

  • Fechamento
  • Valor do Índice de Vigor Relativo
  • Valor do Sinal do RVI

A seguir está o esquema deste sistema de negociação:

Cruzamento do RVI - esquema D

  • Estratégia três: Cruzamento do RVI & MA

De acordo com esta estratégia, nós precisamos criar um sistema de negociação que dê sinais de compra e venda verificando continuamente os seguintes valores:

  • O preço de fechamento
  • A média móvel de 100 períodos (MA)
  • O valor atual do RVI
  • O valor atual do sinal do RVI

Se o preço de fechamento for maior que a MA de 100 períodos e o valor atual do RVI for maior que o valor atual do sinal do RVI, precisamos que o sistema de negociação retorne os seguintes valores como um comentário no gráfico:

  • Sinal de Compra
  • Preço de fechamento
  • Valor da MA
  • Valor do Índice de Vigor Relativo
  • Valor do Sinal do RVI

Por outro lado, se o preço de fechamento for menor que a MA de 100 períodos e o valor atual do RVI for menor que o valor atual do sinal do RVI, precisamos que o sistema de negociação retorne os seguintes valores como um comentário no gráfico:

  • Sinal de Venda
  • Preço de fechamento
  • Valor da MA
  • Valor do Índice de Vigor Relativo
  • Valor do Sinal do RVI

A seguir está o projeto desta estratégia:

 Esquema do cruzamento do RVI, MA

Sistema de negociação do Índice de Vigor Relativo

Depois de aprender a usar o RVI por meio de estratégias simples e criar um esquema passo a passo para cada estratégia, isso nos ajudará a criar o nosso sistema de negociação. Agora, vamos criar um sistema de negociação para cada estratégia mencionada. Primeiro, nós criaremos um sistema de negociação simples que retorna o valor atual do RVI como um comentário no gráfico e a seguir está o código para criar esse sistema de negociação passo a passo.

Criar dois arrays para o RVI e o sinal do RVI usando a função do tipo double:

   double rviArray[];
   double rviSignalArray[];

Definir a flag AS_SERIES para os arrays para retornar true ou false, que é um valor booleano, usando a função "ArraySetAsSeries":

   ArraySetAsSeries(rviArray,true);
   ArraySetAsSeries(rviSignalArray,true);

Definir o RVI usando a função "iRVI" que retorna o manipulador do indicador Índice de Vigor Relativo. Seus parâmetros são:

  • symbol: para determinar o nome do símbolo, usaremos (_Symbol) a ser aplicado ao símbolo atual. 
  • period: para definir o período utilizável, usaremos (_period) para ser aplicado ao período gráfico atual. 
  •  ma_period: para definir o período médio, usaremos (10).
int rviDef = iRVI(_Symbol,_Period,10);

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

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

Definir os valores do RVI e do sinal do RVI usando a função "NormalizeDouble" para retornar um valor do tipo double. Seus parâmetros são:

  • value: para determinar o número normalizado. Usaremos (rviArray[0], rviSignalArray[0]).
  • digits: para determinar o número de dígitos após a casa decimal. Usaremos (3).
   double rviVal = NormalizeDouble(rviArray[0],3);
   double rviSignalVal = NormalizeDouble(rviSignalArray[0],3);

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

   Comment("Relative Vigor Index Value is ",rviVal,"\n",
           "RVI Signal Value is ",rviSignalVal);

O código completo será o mesmo que o seguinte:

//+------------------------------------------------------------------+
//|                                                   Simple RVI.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 rviArray[];
   double rviSignalArray[];

   ArraySetAsSeries(rviArray,true);
   ArraySetAsSeries(rviSignalArray,true);

   int rviDef = iRVI(_Symbol,_Period,10);

   CopyBuffer(rviDef,0,0,3,rviArray);
   CopyBuffer(rviDef,1,0,3,rviSignalArray);

   double rviVal = NormalizeDouble(rviArray[0],3);
   double rviSignalVal = NormalizeDouble(rviSignalArray[0],3);

   Comment("Relative Vigor Index Value is ",rviVal,"\n",
           "RVI Signal Value is ",rviSignalVal);

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

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

 RVI nav

Ao clicar duas vezes neste expert para execução, nós encontraremos sua janela igual à seguinte:

Janela Simple RVI

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

 Simple RVI anexado

Agora, estamos prontos para obter os sinais gerados com base neste sistema de negociação. Assim, obteremos um sinal igual ao seguinte:

Sinal Simple RVI

Como podemos ver no canto superior esquerdo do gráfico temos um comentário com o valor atual do RVI.

  • Estratégia um: Cruzamento do RVI - tendência de alta:

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

//+------------------------------------------------------------------+
//|                                      RVI Crossover - Uptrend.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {
   double rviArray[];
   double rviSignalArray[];

   ArraySetAsSeries(rviArray,true);
   ArraySetAsSeries(rviSignalArray,true);

   int rviDef = iRVI(_Symbol,_Period,10);

   CopyBuffer(rviDef,0,0,3,rviArray);
   CopyBuffer(rviDef,1,0,3,rviSignalArray);

   double rviVal = NormalizeDouble(rviArray[0],3);
   double rviSignalVal = NormalizeDouble(rviSignalArray[0],3);

   if(rviVal>0 && rviSignalVal>0 && rviVal>rviSignalVal)
     {
      Comment("Buy Signal","\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }
   if(rviVal<0 && rviSignalVal<0 && rviVal<rviSignalVal)
     {
      Comment("Close","\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }


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

Diferenças neste código.

Condições da estratégia:

Em caso de sinal de compra

   if(rviVal>0 && rviSignalVal>0 && rviVal>rviSignalVal)
     {
      Comment("Buy Signal","\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }

Em caso de fechamento

   if(rviVal<0 && rviSignalVal<0 && rviVal<rviSignalVal)
     {
      Comment("Close","\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }

Após compilar este código e executá-lo na plataforma de negociação da mesma forma que mencionamos no sistema de negociação Simple RVI, encontraremos o expert anexado ao gráfico da mesma forma que a seguir:

Cruzamento do RVI - U anexado

Então, nós podemos obter os sinais desejados com base neste sistema de negociação da mesma forma que o seguinte:

Em caso de sinal de compra:

 Cruzamento do RVI - U - sinal de compra

Como nós podemos ver no gráfico no canto superior esquerdo, nós recebemos um sinal com os seguintes valores:

  • Sinal de Compra
  • Valor do Índice de Vigor Relativo
  • valor do sinal do RVI

Em caso de sinal de fechamento:

 Cruzamento do RVI - U - sinal de fechamento

Como nós podemos ver no gráfico no canto superior esquerdo, nós recebemos um sinal com os seguintes valores:

  • Fechamento
  • Valor do Índice de Vigor Relativo
  • valor do sinal do RVI

É claro que este sinal é o mesmo que precisamos com base em nossa estratégia de negociação mencionada e suas condições durante a tendência de alta.

  • Estratégia dois: Cruzamento do RVI - tendência de baixa:

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

//+------------------------------------------------------------------+
//|                                    RVI Crossover - Downtrend.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {
   double rviArray[];
   double rviSignalArray[];

   ArraySetAsSeries(rviArray,true);
   ArraySetAsSeries(rviSignalArray,true);

   int rviDef = iRVI(_Symbol,_Period,10);

   CopyBuffer(rviDef,0,0,3,rviArray);
   CopyBuffer(rviDef,1,0,3,rviSignalArray);

   double rviVal = NormalizeDouble(rviArray[0],3);
   double rviSignalVal = NormalizeDouble(rviSignalArray[0],3);

   if(rviVal<0 && rviSignalVal<0 && rviVal<rviSignalVal)
     {
      Comment("Short Signal","\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }
   if(rviVal>0 && rviSignalVal>0 && rviVal>rviSignalVal)
     {
      Comment("Cover","\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }
  }
//+------------------------------------------------------------------+  

Diferenças neste código.

Condições da estratégia:

Em caso de sinal de venda

   if(rviVal<0 && rviSignalVal<0 && rviVal<rviSignalVal)
     {
      Comment("Short Signal","\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }

Em caso de fechamento

   if(rviVal>0 && rviSignalVal>0 && rviVal>rviSignalVal)
     {
      Comment("Cover","\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }

Após compilar este código e executá-lo na plataforma de negociação da mesma forma que aprendemos anteriormente, encontraremos o expert anexado ao gráfico da mesma forma que a seguir:

 Cruzamento do RVI - D anexado

Agora, nós estamos prontos para receber os sinais com base nesta estratégia e sistema de negociação. A seguir estão os exemplos dos sinais de teste:

Em caso de sinal de venda:

 Cruzamento do RVI - D - sinal de venda

Como nós podemos ver no gráfico no canto superior esquerdo, nós recebemos um sinal com os seguintes valores:

  • Sinal de venda
  • Valor do Índice de Vigor Relativo
  • valor do sinal do RVI 

Em caso de fechamento:

Cruzamento do RVI - D - sinal de fechamento

Como podemos ver temos um sinal dos seguintes valores:

  • Fechamento
  • Valor do Índice de Vigor Relativo
  • valor do sinal do RVI

Agora, criamos um sistema de negociação baseado na estratégia do Cruzamento do RVI - Tendência de baixa para gerar os sinais durante a tendência de baixa.

  • Estratégia três: Cruzamento do RVI & MA:

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

//+------------------------------------------------------------------+
//|                                           RVI & MA 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 pArray[];
   double maArray[];
   double rviArray[];
   double rviSignalArray[];

   int Data=CopyRates(_Symbol,_Period,0,1,pArray);
   ArraySetAsSeries(maArray,true);
   ArraySetAsSeries(rviArray,true);
   ArraySetAsSeries(rviSignalArray,true);

   int rviDef = iRVI(_Symbol,_Period,10);
   int maDef = iMA(_Symbol,_Period,100,0,MODE_EMA,PRICE_CLOSE);

   CopyBuffer(rviDef,0,0,3,rviArray);
   CopyBuffer(rviDef,1,0,3,rviSignalArray);
   CopyBuffer(maDef,0,0,3,maArray);

   double rviVal = NormalizeDouble(rviArray[0],3);
   double rviSignalVal = NormalizeDouble(rviSignalArray[0],3);
   double maVal = NormalizeDouble(maArray[0],3);

   if(pArray[0].close>maVal && rviVal>rviSignalVal)
     {
      Comment("Buy Signal","\n",
              "Closing price is ",pArray[0].close,"\n",
              "MA Value is ",maVal,"\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }
   if(pArray[0].close<maVal && rviVal<rviSignalVal)
     {
      Comment("Sell Signal","\n",
              "Closing price is ",pArray[0].close,"\n",
              "MA Value is ",maVal,"\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }


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

Diferenças neste código.

Criação de quatro arrays (pArray, maArray, rviArray, rviSignalArray). Usaremos a função do tipo double da mesma forma que mencionamos exceto para o pArray, nós usaremos a função MqlRates que armazena as informações sobre o preço, volume e spread.

   MqlRates pArray[];
   double maArray[];
   double rviArray[];
   double rviSignalArray[];

Definição da flag AS_SERIES para os arrays para retornar um true ou false, que é um valor booleano, usando a função "ArraySetAsSeries". 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: para determinar o nome do símbolo, usaremos _Symbol a ser aplicado ao símbolo atual.
  • timeframe: para determinar o período e 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(maArray,true);
   ArraySetAsSeries(rviArray,true);
   ArraySetAsSeries(rviSignalArray,true);

Definição do RVI usando a função iRVI da mesma forma que mencionamos e a Média móvel usando a função iMA para retornar o manipulador do indicador da média móvel, seus parâmetros são:

  • símbolo: para determinar o nome do símbolo, usaremos (_Symbol) 
  • period: para determinar o período do tempo gráfico, usaremos (_period)
  • ma_period: para determinar o período da média móvel, usaremos 100 
  • 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, usaremos o preço de fechamento 
   int rviDef = iRVI(_Symbol,_Period,10);
   int maDef = iMA(_Symbol,_Period,100,0,MODE_EMA,PRICE_CLOSE);

Obteção dos dados do buffer dos indicadores RVI e MA usando a função "CopyBuffer".

   CopyBuffer(rviDef,0,0,3,rviArray);
   CopyBuffer(rviDef,1,0,3,rviSignalArray);
   CopyBuffer(maDef,0,0,3,maArray);

Definição dos valores de RVI, sinal do RVI e valor do MA usando a função NormalizeDouble.

   double rviVal = NormalizeDouble(rviArray[0],3);
   double rviSignalVal = NormalizeDouble(rviSignalArray[0],3);
   double maVal = NormalizeDouble(maArray[0],3);

Condições da estratégia.

Em caso de sinal de compra

   if(pArray[0].close>maVal && rviVal>rviSignalVal)
     {
      Comment("Buy Signal","\n",
              "Closing price is ",pArray[0].close,"\n",
              "MA Value is ",maVal,"\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }

Em caso de sinal de venda

   if(pArray[0].close<maVal && rviVal<rviSignalVal)
     {
      Comment("Sell Signal","\n",
              "Closing price is ",pArray[0].close,"\n",
              "MA Value is ",maVal,"\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }

Após compilar este código e executar o expert no terminal, veremos que o expert está anexado ao gráfico igual ao seguinte:

 Cruzamento do RVI, MA anexado

Agora, nós podemos obter os sinais gerados com base neste sistema de negociação da mesma forma que os exemplos de teste a seguir.

Em caso de sinal de compra:

 Cruzamento do RVI, MA - sinal de compra

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

  • Sinal de Compra
  • Preço de fechamento
  • Valor da MA
  • Valor do Índice de Vigor Relativo
  • Valor do Sinal do RVI

Em caso de sinal de venda:

Cruzamento do RVI, MA - sinal de venda

Temos um sinal com os seguintes valores:

  • Sinal de Venda
  • Preço de fechamento
  • Valor da MA
  • Valor do Índice de Vigor Relativo
  • Valor do Sinal do RVI

Agora, nós criamos um sistema de negociação para cada estratégia mencionada para gerar um sinal automatizado com base em suas condições.


Conclusão

Depois do que aprendemos nos tópicos anteriores deste artigo, supõe-se que entendemos profundamente esse indicador ao aprendê-lo em detalhes. Aprendemos o que ele é, o que ele mede e como nós podemos calculá-lo manualmente para entender o principal conceito por trás do indicador RVI. Aprendemos como usá-lo através de três estratégias simples, sendo elas:

  • Cruzamento do RVI - Tendência de Alta: para gerar os sinais de compra e fechamento durante a tendência de alta.
  • Cruzamento do RVI - Tendência de Baixa: para gerar sinais os de venda e de fechamento durante a tendência de baixa.
  • Cruzamento do RVI & MA: para gerar os sinais de compra e venda com base em uma técnica específica de cruzamento.

Criamos um esquema passo a passo para cada estratégia mencionada para nos ajudar a criar as negociações para elas de maneira suave e fácil. Criamos um sistema de negociação para cada uma das estratégias mencionadas para gerar os sinais automáticos após executá-los na MetaTrader 5.

Espero que você tenha tentado aplicar o que aprendeu sozinho para obter o máximo de benefício deste artigo e desenvolver suas habilidades de programação. Espero que você ache este artigo útil para melhorar o seu resultado de negociação e obter novas ideias sobre este tópico ou qualquer tópico relacionado. Se você quiser ler mais artigos semelhantes para aprender como desenvolver um sistema de negociação com base nos indicadores técnicos mais populares, você pode ler o meu outro artigo desta série sobre isso.

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

Como desenvolver um sistema de negociação baseado no indicador Awesome Oscilador Como desenvolver um sistema de negociação baseado no indicador Awesome Oscilador
Neste novo artigo da nossa série, nós aprenderemos sobre uma nova ferramenta técnica que pode ser útil em nossas negociações e ele é o indicador Awesome Oscillator (AO). Nós aprenderemos como desenvolver um sistema de negociação por este indicador.
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.
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 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.