Assista a como baixar robôs de negociação gratuitos
Encontre-nos em Telegram!
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 OsMA usando o buffer anel - indicador para MetaTrader 5

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

A classe COsMAOnRingBuffer  foi projetada para cálculo do indicador técnico Oscilador de Média Móvel (Moving Average of Oscillator, OsMA) utilizando o algoritmo do buffer anel.

Declaração

class COsMAOnRingBuffer : public CArrayRing

Título

#include <IncOnRingBuffer\COsMAOnRingBuffer.mqh>

O arquivo da classe COsMAOnRingBuffer.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 as classes buffer anel, o MACD e a Média Móvel também devem ir nesta mesma pasta.

Métodos de classe

//--- método de inicialização:
bool Init(                                  // se com erro vai retornar "false", se bem sucedido - "true"
   int            fast_period   = 12,       // o período rápido da Média Móvel suavizada 
   int            slow_period   = 26,       // o período lento Média Móvel suavizada 
   int            signal_period = 9,        // o período do sinal da Média Móvel suavizada 
   ENUM_MA_METHOD fast_method   = MODE_EMA, // o método da Média Móvel rápida suavizada
   ENUM_MA_METHOD slow_method   = MODE_EMA, // o método da Média Móvel lenta  suavizada
   ENUM_MA_METHOD signal_method = MODE_SMA, // o método de sinal da Média Móvel suavizada
   int            size_buffer   = 256,      // o tamanho do buffer anel o número de dados armazenados
   bool           as_series     = false     // verdadeiro, se for uma série temporal, falso a indexação for usual 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 do OsMA  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,           // elementos significativos da array
   const int    index            // o índice do elemento
   );
//--- Os métodos de acesso a dados:
int    BarsRequired();   // Retorna o número necessário de barras para desenhar o indicador
string Name()            // Retorna o nome do indicador
string FastMethod()      // Retorna o método de suavização da linha rápida na forma de linha de texto
string SlowMethod()      // Retorna o método de suavização da linha lenta na forma da linha de texto
string SignalMethod()    // Retorna o método de suavização da linha de sinal na forma da linha de texto
int    FastPeriod()      // Retorna o período de suavização da linha rápida
int    SlowPeriod()      // Retorna o período de suavização a linha lenta
int    SignalPeriod()    // Retorna o período de suavização da linha de sinal
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 do cálculo do indicador OsMA:
#include <IncOnRingBuffer\COsMAOnRingBuffer.mqh>
COsMAOnRingBuffer osma;

...

//+------------------------------------------------------------------+
//| Função de iteração do indicador personalizado                    |
//+------------------------------------------------------------------+
int OnCalculate(const int    rates_total, 
                const int    prev_calculated, 
                const int    begin, 
                const double &price[]) 
  {
//--- O cálculo do indicador com base série temporal de preços:
   osma.MainOnArray(rates_total,prev_calculated,price);

...

//--- Usar os dados dos buffers anel "osma",
//    copiar os dados no buffer do indicador:
   for(int i=start;i<rates_total;i++)
      OsMABuffer[i]=osma[rates_total-1-i];          // histograma 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 arquivo Test_OsMA_OnArrayRB.mq5 calcula o indicador com base nas séries temporais de preço. A aplicação do método MainOnArray() é demonstrado.
  2. O arquivo Test_OsMA_OnValueRB.mq5 demonstra a utilização do método MainOnValue(). Primeiro o indicador OsMA é calculado e desenhado. Em seguida, com base no buffer de anel deste indicador, mais um indicador OsMA é desenhado.

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

O resultado do trabalho do Test_OsMA_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/1367

Índice Candlestick Blau_CSI Índice Candlestick Blau_CSI

Indicador Índice Candlestick (CSI) por William Blau.

A classe para desenhar o indicador Estocástico usando o buffer anel. A classe para desenhar o indicador Estocástico usando o buffer anel.

A classe foi projetada para cálculo do indicador técnico Oscilador Estocástico utilizando o algoritmo do buffer anel.

Exp_VininI_Trend Exp_VininI_Trend

O sistema de negociação Exp_VininI_Trend se baseia na variação da direção da tendência do indicador VininI_Trend.

Candlestick Momentum Index Blau_CMI Candlestick Momentum Index Blau_CMI

Indicador Candle Momentum Index (CMI) por William Blau.