Assista a como baixar robôs de negociação gratuitos
Encontre-nos em Facebook!
Participe de nossa página de fãs
Script interessante?
Coloque um link para ele, e permita que outras pessoas também o avaliem
Você gostou do script?
Avalie seu funcionamento no terminal MetaTrader 5
Indicadores

A classe para desenhar o indicador RSI usando o buffer anel. - indicador para MetaTrader 5

Visualizações:
1768
Avaliação:
(20)
Publicado:
2014.01.14 15:11
Atualizado:
2016.11.22 07:33
\MQL5\Include\IncOnRingBuffer\ \MQL5\Indicators\IncOnRingBuffer\
Precisa de um robô ou indicador baseado nesse código? Solicite-o no Freelance Ir para Freelance

A classe CRSIOnRingBuffer foi projetada para cálculo do indicador técnico Índice de Força Relativa (Relative Strength Index, RSI) utilizando o algoritmo do buffer anel.

Declaração

class CRSIOnRingBuffer : public CArrayRing

Título

#include <IncOnRingBuffer\CRSIOnRingBuffer.mqh>

O arquivo da classe CRSIOnRingBuffer.mqh deve ser colocado na pasta IncOnRingBuffer que precisa ser criada em MQL5\Include\. Dois arquivos com exemplos são utilizados pela classe a partir desta pasta que está anexado para a descrição. Arquivo com a classe do buffer anel e a classe Média Móvel também devem estar nesta pasta.

Métodos de classe

//--- método de inicialização:
bool Init(                              // se com erro vai retornar "false", se bem sucedido - "true" 
   int            period   = 14,        // Período RSI 
   ENUM_MA_METHOD method   = MODE_SMMA, // método suavizado
   int            size_buffer = 256,    // tamanho do buffer anel, o número de dados armazenados
   bool           as_series   = false   // "true", se for uma série temporal, "false" se houver uma indexação comum nos dados de entrada
   );
//--- Método de cálculo baseado em série de tempo ou no buffer do indicador:          
int MainOnArray(                  // retorna o número de elementos processados  
   const int     rates_total,     // o tamanho da array[]
   const int     prev_calculated, // elementos processados na chamada anterior
   const double &array[]          // a array dos valores de entrada
   );
//--- Método de cálculo com base em elementos de série separados da array            
double MainOnValue(              // retorna o valor RSI para o elemento configurado
   const int    rates_total,     // o tamanho da array
   const int    prev_calculated, // elementos processados da array
   const int    begin,           // a partir de onde os dados significativos da array iniciam
   const double value,           // o valor do elemento da array
   const int    index            // o índice do elemento
   );

//--- Os métodos de acesso aos dados: 
int    BarsRequired();   // Retorna o número necessário de barras para desenhar o indicador
string Name();           // Retorna o nome do indicador
int    Period();         // Retorna o período 
string Method();         // Retorna o método na forma de linha de texto 
int    Size();           // Retorna o tamanho do buffer anel

Os dados calculados do indicador a partir do buffer anel são possíveis de serem obtidos a partir da array usual. Por exemplo:

//--- A classe com os métodos de cálculo do indicador RSI:
#include <IncOnRingBuffer\CRSIOnRingBuffer.mqh>
CRSIOnRingBuffer rsi;

...

//+------------------------------------------------------------------+
//| função de iteração do indicador personalizado                    |
//+------------------------------------------------------------------+
int OnCalculate(const int    rates_total, 
                const int    prev_calculated, 
                const int    begin, 
                const double &price[]) 
  {
//--- Cálculo do indicador baseado em preços de séries temporais :
  rsi.MainOnArray(rates_total,prev_calculated,price);

...

//--- Dados de uso do buffer anel "rsi",
//    por exemplo, copiar dados nos buffers do indicador:
   for(int i=start;i<rates_total;i++)
     {
      RSI_Buffer[i]   = RSI[rates_total-1-i];          // linha do indicador
     }
//--- Valor de retorno de prev_calculated para a próxima chamada:
   return(rates_total);
  }

Por favor, note que a indexação no buffer anel é a mesma que na série temporal.

Exemplos:

  1. O indicador calcula o arquivo Test_RSI_OnArrayRB.mq5 com base na série temporal de preço. A aplicação do método MainOnArray() é demonstrado.
  2. O arquivo Test_RSI_OnValueRB.mq5 demonstra a utilização do método MainOnValue(). No início, o indicador RSI é calculado e desenhado. Em seguida, com base na buffer anel deste indicador, mais um RSI é desenhado.


O resultado do trabalho do Test_RSI_OnArrayRB.mq5 com o tamanho do buffer de anel de 256 elementos

O resultado do trabalho do Test_RSI_OnValueRB.mq5 com o tamanho do buffer anel de 256 elementos

Ao escrever código foram utilizados os desenvolvimentos da MetaQuotes Software Corp, Integer e GODZILLA.

Traduzido do russo pela MetaQuotes Ltd.
Publicação original: https://www.mql5.com/ru/code/1385

Exp_EF_distance Exp_EF_distance

Sistema de negociação baseado na variação da direção de tendência mostrado pelo indicador EF_distance e na força da tendência determinado pelo indicador Flat-Trend.

Ergodic DTI-Oscillator Blau_Ergodic_DTI Ergodic DTI-Oscillator Blau_Ergodic_DTI

Ergodic DTI-Oscillator (Índice de Tendência Direcional) por William Blau.

DecEMA DecEMA

Média Móvel que representa em si uma combinação linear da série EMA suavizada pela Média Móvel Exponencial (EMA).

Índice de Tendência Direcional Blau_DTI Índice de Tendência Direcional Blau_DTI

Indicador Índice de Tendência Direcional(DTI) por William Blau.