Home Indicatore tecnico Post

Frattali e Buffer Circolari: Come Utilizzare l'Indicatore in MetaTrader 5

Allegato
1422.zip (6.86 KB, Scarica 0 volte)

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 CFractalsOnRingBuffer

Titolo

#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

  1. L'indicatore calcola il file Test_Fractals_OnArrayRB.mq5 sulla base della serie temporale dei prezzi. Viene dimostrato l'uso del metodo MainOnArray().
  2. 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

Commento (0)