Descrizione
La classe CTEMAOnRingBuffer è stata progettata per il calcolo dell'indicatore tecnico Triple Exponential Moving Average (Triple Exponential Moving Average, TEMA) utilizzando l'algoritmo del ring buffer.
Dichiarazione
class CTEMAOnRingBuffer : public CArrayRing
Titolo
#include <IncOnRingBuffer\CTEMAnRingBuffer.mqh>Il file della classe CTEMAOnRingBuffer.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 i file con le classi del ring buffer, DEMA e Moving Average devono trovarsi in questa cartella.
Metodi della classe
//--- metodo di inizializzazione: bool Init( // se errore restituisce false, se successo - true int period = 12, // il periodo del TEMA ENUM_MA_METHOD method = MODE_EMA, // il metodo di smussamento int size_buffer = 256, // la dimensione del ring buffer bool as_series = false // true, se una serie temporale, altrimenti - false );
//--- metodo di calcolo basato su una serie temporale o i buffer degli indicatori: int MainOnArray( // restituisce il numero degli elementi elaborati const int rates_total, // la dimensione dell'array const int prev_calculated, // elementi elaborati nella chiamata precedente const double& price[], // l'array per il calcolo );
//--- metodo per calcolare basato su elementi separati della serie dell'array double MainOnValue( // restituisce il valore TEMA per l'elemento impostato (bar) const int rates_total, // la dimensione dell'array const int prev_calculated, // elementi elaborati dell'array const int begin, // da dove iniziano i dati significativi dell'array const double value, // il valore dell'elemento (bar) const int index // l'indice dell'elemento (bar) );
//--- 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 int Size(); // Restituisce la dimensione del ring buffer double MA(int index); // Restituisce il valore della Moving Average, l'indicizzazione è come in una serie temporale double DEMA(int index); // Restituisce il valore DEMA, l'indicizzazione è come in una serie temporale
Per ottenere i dati calcolati dell'indicatore dal ring buffer è possibile farlo come da un normale array. Ad esempio:
//--- classe con i metodi di calcolo dell'indicatore TEMA: #include <IncOnRingBuffer\CTEMAOnRingBuffer.mqh> CTEMAOnRingBuffer tema; ... //+------------------------------------------------------------------+ //| Funzione di iterazione dell'indicatore personalizzato | //+------------------------------------------------------------------+ int OnCalculate (const int rates_total, // la dimensione dell'array price[] const int prev_calculated, // barre elaborate nella chiamata precedente const int begin, // da dove iniziano i dati significativi const double& price[]) // l'array per il calcolo { //--- calcolo dell'indicatore basato su una serie temporale: tema.MainOnArray(rates_total,prev_calculated,price); ... //--- utilizza i dati dal ring buffer "tema", // ad esempio, copia i dati nei buffer degli indicatori: for(int i=start;i<rates_total && !IsStopped();i++) TEMA_Buffer[i] = tema[rates_total-1-i]; // la linea dell'indicatore TEMA ... //--- restituisce il valore di prev_calculated per la prossima chiamata: return(rates_total); }
Durante il calcolo del TEMA, vengono effettuati anche i calcoli della Moving Average e della DEMA con gli stessi parametri. Possiamo ottenere i dati dai buffer MA e DEMA utilizzando i metodi MA(int index) e DEMA(int index), rispettivamente:
//--- utilizza i dati dai buffer Moving Average e DEMA, // ad esempio, copia nei buffer degli indicatori: for(int i=start;i<rates_total && !IsStopped();i++) { MA_Buffer[i] = dema.MA(rates_total-1-i); // la linea dell'indicatore Moving Average DEMA_Buffer[i] = dema.DEMA(rates_total-1-i); // la linea dell'indicatore DEMA }
Si prega di notare che l'indicizzazione nei ring buffer è la stessa che nelle serie temporali.
Esempi
- L'indicatore calcola il file
Test_TEMA_OnArrayRB.mq5sulla base della serie temporale dei prezzi. Viene dimostrato l'uso del metodoMainOnArray(). - Il file
Test_TEMA_OnValueRB.mq5dimostra l'uso del metodoMainOnValue(). Inizialmente viene calcolato e disegnato l'indicatore TEMA. Poi, sulla base di questo ring buffer dell'indicatore, viene disegnato un altro TEMA.

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

Il risultato del lavoro del file Test_TEMA_OnValueRB.mq5 con la dimensione del ring buffer di 256 elementi
Per la scrittura del codice sono stati utilizzati gli sviluppi di MetaQuotes Software Corp., Integer e GODZILLA.
Post correlati
- Indicatori per la Raccolta Dati: Buffer Orari in MetaTrader 5
- Indice di Volatilità Chaikin: Scegli il Giusto Algoritmo di Smussamento per MetaTrader 5
- Volatilità Stocastica: Indicatore per MetaTrader 5 da Utilizzare sul Grafico
- Indicatore Donchian Ultimate per MT4: Scopri tutte le Funzionalità
- Notis: L'Indicatore per Misurare la Volatilità su MetaTrader 5