Participe de nossa página de fãs
Coloque um link para ele, e permita que outras pessoas também o avaliem
Avalie seu funcionamento no terminal MetaTrader 5
- Visualizações:
- 1905
- Avaliação:
- 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:
- 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.
- 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

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

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

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

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