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 TEMA usando o buffer anel - indicador para MetaTrader 5

Visualizações:
1814
Avaliação:
(28)
Publicado:
2014.01.14 15:02
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 CTEMAOnRingBuffer foi projetada para cálculo do indicador técnico Média Móvel Exponencial Tripla (Triple Exponential Moving Average, TEMA) utilizando o algoritmo do buffer anel.

Declaração

class CTEMAOnRingBuffer : public CArrayRing

Título

#include <IncOnRingBuffer\CTEMAnRingBuffer.mqh>

O arquivo da classe CTEMAOnRingBuffer.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,DEMA 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      = 12,       // período TEMA 
   ENUM_MA_METHOD method      = MODE_EMA, // método de suavização
   int            size_buffer = 256,      // o tamanho do buffer anel
   bool           as_series   = false     // "true", se for uma série temporal, do contrário - "false
   );
//--- Método de cálculo baseado em série de tempo ou nos buffers 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& price[],         //  array usada para o cálculo
   );
//--- Método de cálculo com base em elementos de série separados da array             
double MainOnValue(              // retorna o o valor da TEMA para o elemento configurado(barra) 
   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 (barra)
   const int    index            // o índice do elemento (barra)
   );
//--- the methods of access to the data:
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íodod
int                 Size();          // Retorna o tamanho do buffer anel
double              MA(int index);   // Retorna o valor da Média Móvel, indexação é igual a série temporal
double              DEMA(int index); // Retorna o valor da DEMA, indexação é igual a série temporal

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 TEMA:
#include <IncOnRingBuffer\CTEMAOnRingBuffer.mqh>
CTEMAOnRingBuffer tema;

...

//+------------------------------------------------------------------+
//| função de iteração do indicador personalizado                    |
//+------------------------------------------------------------------+
int OnCalculate (const int rates_total,      // o tamanho da array price[]
                 const int prev_calculated,  // barras processadas na chamada anterior
                 const int begin,            // de onde os dados significativos iniciam
                 const double& price[])      // a array para cálculo
  {
//--- Cálculo do indicador baseado em preços de séries temporais :
    tema.MainOnArray(rates_total,prev_calculated,price);

...

//--- Dados de uso do buffer anel "tema" ,
//    por exemplo, copiar dados nos buffer do indicador:
   for(int i=start;i<rates_total && !IsStopped();i++)
      TEMA_Buffer[i] = tema[rates_total-1-i]; // linha do indicador TEMA

...

//--- valor de retorno de prev_calculated para a próxima chamada:
   return(rates_total);
  }

Quando é calculada o indicador TEMA também é calculado a Média Móvel e DEMA com alguns parâmetros sendo executados. Podemos obter os dados do buffer anel e DEMA usando o método MA(int index) e DEMA(int index), respectivamente:

//--- Utilizar os dados do buffer anel da Média Móvel e DEMA,
//    por exemplo, copiar os dados nos buffers dos indicadores:
   for(int i=start;i<rates_total && !IsStopped();i++)
     {
      MA_Buffer[i]   = dema.MA(rates_total-1-i);   // linha do indicador Média Móvel
      DEMA_Buffer[i] = dema.DEMA(rates_total-1-i); // linha do indicador DEMA
     }

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_TEMA_OnArrayRB.mq5 com base na série temporal de preço. A aplicação do método MainOnArray() é demonstrado.
  2. O arquivo Test_TEMA_OnValueRB.mq5 demonstra a utilização do método MainOnValue(). Primeiro o indicador TEMA é calculado e desenhado. Em seguida, com base na buffer anel deste indicador, mais um TEMA é desenhado.

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

O resultado do trabalho do Test_TEMA_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/1417

SuperWoodiesCCI SuperWoodiesCCI

Este indicador se baseia em uma estratégia de negociação utilizando o CCI.

A classe para desenhar o indicador  Fractals usando o buffer anel A classe para desenhar o indicador Fractals usando o buffer anel

A classe foi projetada para cálculo do indicador técnico Fractais (Fractals) utilizando o algoritmo do buffer anel.

Índice de Média Móvel Índice de Média Móvel

O indicador mostra a proporção da variação da média móvel simples.

Expert Advisor  "A Noite" Expert Advisor "A Noite"

Um Expert Advisor para negociação durante a noite.