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:
- 1394
- Avaliação:
- 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:
- 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.
- 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

Indicador Índice Candlestick (CSI) por William Blau.

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

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

Indicador Candle Momentum Index (CMI) por William Blau.