Descrizione
La classe CEROnRingBuffer è progettata per calcolare l'indicatore tecnico Efficiency Ratio (ER), utilizzato nella Media Mobile Adattiva (AMA), sfruttando l'algoritmo del ring buffer.
Dichiarazione
class CEROnRingBuffer : public CArrayRingInclusione
#include <IncOnRingBuffer\CEROnRingBuffer.mqh>Il file CEROnRingBuffer.mqh deve essere posizionato nella cartella IncOnRingBuffer, che deve essere creata in MQL5\Include\. Due file con gli esempi utilizzati dalla classe sono allegati alla descrizione. Anche il file contenente la classe del ring buffer deve essere presente in questa cartella.
Metodi della Classe
//--- metodo di inizializzazione:
bool Init( // se errore restituisce false, se successo - true
int period = 34, // il periodo di calcolo dell'ER
int size_buffer = 256, // la dimensione del ring buffer, il numero di dati memorizzati
bool as_series = false // true, se una serie temporale, false - se un normale indicizzazione dei dati di input
);//--- metodo di calcolo basato su una serie temporale o buffer di indicatori:
int MainOnArray( // restituisce il numero di elementi elaborati
const int rates_total, // la dimensione dell'array array[]
const int prev_calculated, // elementi elaborati nella chiamata precedente
const double &array[] // l'array dei valori di input
);//--- metodo di calcolo basato su singoli elementi della serie dell'array
double MainOnValue( // restituisce il valore dell'ER per l'elemento impostato
const int rates_total, // la dimensione dell'array
const int prev_calculated, // elementi elaborati dell'array
const int begin, // da dove inizia i dati significativi dell'array
const double value, // il valore dell'elemento dell'array
const int index // l'indice dell'elemento
);//--- metodi di accesso ai dati:
int BarsRequired(); // Restituisce il numero necessario di barre per disegnare l'indicatore
string Name(); // Restituisce il nome dell'indicatore
int Period(); // Restituisce il periodo di calcolo dell'ER
int Size(); // Restituisce la dimensione del ring bufferPer ottenere i dati calcolati dell'indicatore dal ring buffer, puoi farlo come da un normale array. Ad esempio:
//--- classe con i metodi di calcolo dell'indicatore ER:
#include <IncOnRingBuffer\CEROnRingBuffer.mqh>
CEROnRingBuffer er;
...
//+------------------------------------------------------------------+
//| Funzione di iterazione dell'indicatore personalizzato |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const int begin,
const double &price[])
{
//--- calcolo dell'indicatore basato sulla serie temporale dei prezzi:
er.MainOnArray(rates_total,prev_calculated,price);
...
//--- utilizza i dati dal ring buffer "er",
// ad esempio, copia i dati nei buffer dell'indicatore:
for(int i=start;iSi prega di notare che l'indicizzazione nel ring buffer è la stessa delle serie temporali.
Esempi
- Il file
Test_ER_OnArrayRB.mq5 calcola l'indicatore basato sulla serie temporale dei prezzi. Viene dimostrato l'uso del metodo MainOnArray() - Il file
Test_ER_OnValueRB.mq5 dimostra l'uso del metodo MainOnValue(). Inizialmente viene calcolato e disegnato l'indicatore ER. Poi, sulla base del ring buffer di questo indicatore, viene disegnato un ulteriore ER.

Il risultato del lavoro di Test_ER_OnArrayRB.mq5 con la dimensione del ring buffer di 256 elementi

I risultati del lavoro di Test_ER_OnValueRB.mq5 con la dimensione del ring buffer di 256 elementi
Durante la scrittura del codice sono stati utilizzati gli sviluppi di MetaQuotes Software Corp., Integer e GODZILLA.
Commento 0