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
A classe para desenhar o indicador Estocástico usando o buffer anel. - indicador para MetaTrader 5
- Visualizações:
- 1923
- 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 CStochasticOnRingBuffer foi projetada para cálculo do indicador técnico Oscilador Estocástico (Stochastic Oscillator) utilizando o algoritmo do buffer anel.
Declaração
class CStochasticOnRingBuffer
Título
#include <IncOnRingBuffer\CStochacticOnRingBuffer.mqh>
O arquivo da classe CStochasticOnRingBuffer.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_k = 5, // período %K int period_d = 3, // período %D int period_s = 3, // período de desaceleração de %K ENUM_MA_METHOD method = MODE_SMA, // método %D int size_buffer = 256, // o tamanho do buffer anel, 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 de indicador: int MainOnArray( // retorna o número de elementos processados const int rates_total, // o tamanho das arrays const int prev_calculated, // elementos processados na chamada anterior const double &high[] // o valor da array da máxima do preço const double &low[] // o valor da array da mínima do preço const double &close[] // array do fechamento do preço );
//--- Método de cálculo com base em elementos de série separados da array double MainOnValue( // retorna o valor Stochastic para o elemento configurado const int rates_total, // 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 high, // o valor da máxima do preço const double low, // o valor da mínima do preço const double close, // fechamento do preço 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 string NameSignal(); // Retorna o nome da linha de sinal do indicador string Method(); // Retorna o método de suavização na forma da linha de texto int PeriodK() // Retorna o período de %K int PeriodS() // Retorna o período de desaceleração de %K int PeriodD() // Retorna o período de %D 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 Estocástico: #include <IncOnRingBuffer\CStochasticOnRingBuffer.mqh> CStochasticOnRingBuffer st; ... //+------------------------------------------------------------------+ //| função de iteração do indicador personalizado | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime& time[], const double& open[], const double& high[], const double& low[], const double& close[], const long& tick_volume[], const long& volume[], const int& spread[]) { //--- Cálculo do indicador baseado na série temporal do preço: st.MainOnArray(rates_total,prev_calculated,high,low,close); ... //--- Utilizar os dados do buffer anel "st", // por exemplo, lidar os dados nos buffers de indicadores: for(int i=start;i<rates_total && !IsStopped();i++) { MainBuffer[i] = st[rates_total-1-i]; // a linha principal do indicador SignalBuffer[i] = st.signal[rates_total-1-i]; // a linha de sinal 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_Stochastic_OnArrayRB.mq5 calcula o indicador baseado na série temporal de preços. A aplicação do método MainOnArray() é demonstrado.
- O arquivo Test_Stochastic_OnValueRB.mq5 demonstra a utilização do método MainOnValue(). No início, o Stochastic Oscilator é calculado e desenhado. Em seguida, com base no buffer de anel mais duas linhas são desenhadas noStochastic Oscilator. https://www.mql5.com/pt/docs/series/bufferdirection
O resultado do trabalho do Test_Stochastic_OnArrayRB.mq5 com o tamanho do buffer anel de 256 elementos
O resultado do trabalho do Test_Stochastic_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/1372
Ergodic CMI-Oscillator por Willam Blau.
ytg_Japan_CandlesIndicador de combinações de velas (Velas Japonesas).
Indicador Índice Candlestick (CSI) por William Blau.
A classe para desenhar o indicador OsMA usando o buffer anelA classe 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.