Descrizione
La classe CMFIOnRingBuffer è progettata per calcolare l'indicatore tecnico Money Flow Index (MFI) utilizzando l'algoritmo del ring buffer.
Dichiarazione
class CMFIOnRingBuffer : public CArrayRing
Titolo
#include <IncOnRingBuffer\CMFIOnRingBuffer.mqh>
Il file della classe CMFIOnRingBuffer.mqh deve essere collocato nella cartella IncOnRingBuffer, che deve essere creata in MQL5\Include\. Due file con esempi utilizzati da questa classe sono allegati alla descrizione. Inoltre, il file con la classe del ring buffer e la classe della Media Mobile devono anch'essi trovarsi in questa cartella.
Metodi della classe
//--- metodo di inizializzazione: bool Init(// restituisce false in caso di errore, true se ha successo int period = 14, // il periodo dell'MFI ENUM_MA_METHOD method = MODE_SMA, // il metodo di smoothing ENUM_APPLIED_PRICE applied_price = PRICE_TYPICAL, // prezzo utilizzato per il calcolo ENUM_APPLIED_VOLUME applied_volume = VOLUME_TICK, // volume utilizzato per il calcolo int size_buffer = 256, // la dimensione del ring buffer bool as_series = false // true se è una serie temporale, altrimenti false );
//--- il metodo di calcolo basato sulle serie temporali o sui buffer degli indicatori: int MainOnArray(// restituisce il numero degli elementi elaborati const int rates_total, // dimensione degli array const int prev_calculated, // elementi elaborati nella chiamata precedente const double& open[], // prezzi di apertura const double& high[], // prezzi massimi const double& low[], // prezzi minimi const double& close[], // prezzi di chiusura const long& tick_volume[], // volume tick const long& volume[]); // volume azionario );
//--- metodo di calcolo basato sugli elementi della serie separati dell'array: double MainOnValue(// restituisce il valore dell'MFI per l'elemento impostato (bar) const int rates_total, // dimensione dell'array const int prev_calculated, // elementi elaborati dell'array const int begin, // da dove cominciano i dati significativi dell'array const double open, // prezzo di apertura del bar const double high, // prezzo massimo del bar const double low, // prezzo minimo del bar const double close, // prezzo di chiusura del bar const long tick_volume, // volume tick del bar const long volume, // volume azionario del 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 string Method(); // Restituisce il metodo in forma di stringa ENUM_APPLIED_PRICE Price(); // Restituisce il tipo di prezzo utilizzato ENUM_APPLIED_VOLUME Volume(); // Restituisce il tipo di volume utilizzato int Size(); // Restituisce la dimensione del ring buffer
Per ottenere i dati calcolati dell'indicatore dal ring buffer, puoi fare riferimento a essi come in un array normale. Ad esempio:
//--- la classe con i metodi di calcolo dell'indicatore MFI: #include <IncOnRingBuffer\CMFIOnRingBuffer.mqh> CMFIOnRingBuffer mfi; ... //+------------------------------------------------------------------+ //| Funzione di iterazione dell'indicatore personalizzato | //+------------------------------------------------------------------+ 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[]) { //--- calcolo dell'indicatore basato sulle serie temporali: mfi.MainOnArray(rates_total, prev_calculated, open, high, low, close, tick_volume, volume); ... //--- utilizza i dati dai ring buffer "mfi", // ad esempio, copia i dati nel buffer dell'indicatore: for(int i=start;i<rates_total && !IsStopped();i++) MFI_Buffer[i] = mfi[rates_total-1-i]; // linea dell'indicatore ... //--- restituisce il valore di prev_calculated per la prossima chiamata: return(rates_total); }
Si prega di notare che l'indicizzazione nel ring buffer è la stessa delle serie temporali.
Esempi
- Il file Test_MFI_OnArrayRB.mq5 calcola l'indicatore basato sulla serie temporale dei prezzi. Viene dimostrato l'uso del metodo MainOnArray().
- Il file Test_MFI_OnValueRB.mq5 dimostra l'uso del metodo MainOnValue(). Inizialmente viene calcolato e disegnato l'indicatore MFI. Poi, sulla base di questo ring buffer, viene disegnato un ulteriore indicatore MFI.

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

Il risultato del lavoro del Test_MFI_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.
Post correlati
- Indicatori per la Raccolta Dati: Buffer Orari in MetaTrader 5
- Indicatori ZigZag Potenziati: Scopri le Nuove Funzionalità per MetaTrader 4
- Indice di Volatilità Chaikin: Scegli il Giusto Algoritmo di Smussamento per MetaTrader 5
- Volatilità Stocastica: Indicatore per MetaTrader 5 da Utilizzare sul Grafico
- HP Extrapolator: Scopri Come Ottimizzare le Previsioni con il Filtro Hodrick-Prescott