Descrizione
Il CFractalsOnRingBuffer è un indicatore tecnico progettato per calcolare i frattali utilizzando l'algoritmo del buffer circolare. Se sei un trader che vuole approfondire questa funzionalità, sei nel posto giusto!
Dichiarazione
class CFractalsOnRingBufferTitolo
#include <IncOnRingBuffer\CFractalsOnRingBuffer.mqh>Il file CFractalsOnRingBuffer.mqh deve essere posizionato nella cartella IncOnRingBuffer, che dovrai creare in MQL5\Include\. Due file di esempio utilizzati dalla classe sono allegati a questa descrizione. Ricorda che anche il file della classe del buffer circolare deve trovarsi in questa cartella.
Metodi della Classe
//--- metodo di inizializzazione:
bool Init(// restituisce false in caso di errore, true in caso di successo
int bars_right = 2, // numero di barre a destra dall'estremum
int bars_left = 2, // numero di barre a sinistra dall'estremum
int size_buffer = 256, // dimensione del buffer circolare
bool as_series = false // true se è una serie temporale, altrimenti false
);
//--- metodo di calcolo basato su una serie temporale o sui buffer degli indicatori:
int MainOnArray(// restituisce il numero di elementi elaborati
const int rates_total, // dimensione degli array
const int prev_calculated, // elementi elaborati nella chiamata precedente
const double& high[], // array dei massimi
const double& low[], // array dei minimi
);
//--- metodo di calcolo del frattale basato su elementi separati dell'array high[]:
double MainOnHigh(// restituisce il valore del frattale superiore per l'elemento index-bars_right (bar)
const int rates_total, // dimensione dell'array
const int prev_calculated, // elementi elaborati dell'array
const int begin, // da dove inizia il dato significativo dell'array
const double high, // massimo della barra corrente
const int index // indice dell'elemento corrente (bar)
);
//--- metodo di calcolo del frattale inferiore basato su elementi separati dell'array low[]:
double MainOnLow(// restituisce il valore del frattale inferiore per l'elemento index-bars_right (bar)
const int rates_total, // dimensione dell'array
const int prev_calculated, // elementi elaborati dell'array
const int begin, // da dove inizia il dato significativo dell'array
const double low, // minimo della barra corrente, massimo dell'elemento corrente dell'array
const int index // indice dell'elemento corrente (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
string NameUpper() // restituisce il nome dei frattali superiori
string NameLower() // restituisce il nome dei frattali inferiori
int BarsRight() // restituisce il numero di barre a destra dall'estremum
int BarsLeft() // restituisce il numero di barre a sinistra dall'estremum
int Size(); // restituisce la dimensione del buffer circolare
Puoi ottenere i dati calcolati dell'indicatore dai buffer circolari esattamente come da un array normale. Ad esempio:
//--- classe con i metodi di calcolo dell'indicatore Frattali:
#include <IncOnRingBuffer\CFractalsOnRingBuffer.mqh>
CFractalsOnRingBuffer fractals;
...
//+------------------------------------------------------------------+
//| 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 sulla serie temporale dei prezzi:
fractals.MainOnArray(rates_total,prev_calculated,high,low);
...
//--- usa i dati dai buffer circolari "fractals",
// ad esempio, copia i dati nel buffer dell'indicatore:
for(int i=start;i<rates_total-BarsRight && !IsStopped();i++)
{
UpperBuffer[i] = fractals.upper[rates_total-1-i]; // frattali superiori
LowerBuffer[i] = fractals.lower[rates_total-1-i]; // frattali inferiori
}
...
//--- restituisce il valore di prev_calculated per la prossima chiamata:
return(rates_total);
}
Ricorda che l'indicizzazione nei buffer circolari è la stessa delle serie temporali.
Esempi
- L'indicatore calcola il file Test_Fractals_OnArrayRB.mq5 sulla base della serie temporale dei prezzi. Viene dimostrato l'uso del metodo MainOnArray().
- Il file Test_Fractals_OnValueRB.mq5 dimostra l'uso del metodo MainOnValue(). Prima si calcolano e si disegnano i frattali. Poi, sulla base di questo indicatore, viene disegnato un altro frattale utilizzando il buffer circolare.

Il risultato del lavoro del Test_Fractals_OnArrayRB.mq5 con la dimensione del buffer circolare di 256 elementi

Il risultato del lavoro del Test_Fractals_OnValueRB.mq5 con la dimensione del buffer circolare 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
- Volatilità Stocastica: Indicatore per MetaTrader 5 da Utilizzare sul Grafico
- Indicatore di Equità e Bilancio per MetaTrader 5: Monitoraggio della Tua Performance di Trading
- Utilità per Serie e Informazioni sulle Rate in MetaTrader 5
- Utilità per le Informazioni su Barre e Tassi per MetaTrader 5