Accueil Indicateur technique Publication

Maîtriser les Fractales avec un Buffer Circulaire sur MetaTrader 5

Pièce jointe
1422.zip (6.86 KB, Télécharger 0 fois)

Description

Le CFractalsOnRingBuffer est conçu pour le calcul de l'indicateur technique des Fractales (Fractales) en utilisant l'algorithme du buffer circulaire.

Déclaration

class CFractalsOnRingBuffer

Titre

#include <IncOnRingBuffer\CFractalsOnRingBuffer.mqh>

Le fichier CFractalsOnRingBuffer.mqh doit être placé dans le dossier IncOnRingBuffer qui doit être créé dans MQL5\Include\. Deux fichiers contenant des exemples utilisant la classe de ce dossier sont joints à la description. Le fichier contenant la classe du buffer circulaire doit également se trouver dans ce dossier.

Méthodes de la classe

//--- méthode d'initialisation :
bool Init(                      // si erreur, retourne false, si succès - true
   int  bars_right  = 2,        // le nombre de barres à droite de l'extrême
   int  bars_left   = 2,        // le nombre de barres à gauche de l'extrême
   int  size_buffer = 256,      // la taille du buffer circulaire
   bool as_series   = false     // vrai, si série temporelle, sinon - faux
   );
//--- méthode de calcul basée sur une série temporelle ou des buffers d'indicateur :
int MainOnArray(                  // retourne le nombre d'éléments traités
   const int     rates_total,     // la taille des tableaux
   const int     prev_calculated, // éléments traités lors de l'appel précédent
   const double& high[],          // le tableau des maxima
   const double& low[],           // le tableau des minima
   );
//--- méthode de calcul du fractal basé sur les éléments d'une série séparée du tableau high[]
double MainOnHigh(               // retourne la valeur du fractal haut pour l'élément index-bars_right (bar)
   const int    rates_total,     // la taille du tableau
   const int    prev_calculated, // éléments traités du tableau
   const int    begin,           // à partir de où commencent les données significatives du tableau
   const double high,            // le maximum de la barre actuelle
   const int    index            // l'index de l'élément courant (bar)
   );
//--- méthode de calcul du fractal bas basé sur les éléments d'une série séparée du tableau low[]
double MainOnLow(                // retourne la valeur du fractal bas pour l'élément index-bars_right (bar)
   const int    rates_total,     // la taille du tableau
   const int    prev_calculated, // éléments traités du tableau
   const int    begin,           // à partir de où commencent les données significatives du tableau
   const double low,             // le minimum de la barre actuelle, le maximum de l'élément courant du tableau
   const int    index            // l'index de l'élément courant (bar)
   );
//--- méthodes d'accès aux données :
int    BarsRequired();  // Retourne le nombre de barres nécessaires pour dessiner l'indicateur
string Name();          // Retourne le nom de l'indicateur
string NameUpper()      // Retourne le nom des fractales hautes
string NameLower()      // Retourne le nom des fractales basses
int    BarsRight()      // Retourne le nombre de barres à droite de l'extrême
int    BarsLeft()       // Retourne le nombre de barres à gauche de l'extrême
int    Size();          // Retourne la taille du buffer circulaire

Pour obtenir les données calculées de l'indicateur des buffers circulaires, cela est possible comme avec un tableau classique. Par exemple :

//--- la classe avec les méthodes de calcul de l'indicateur Fractals :
#include <IncOnRingBuffer\CFractalsOnRingBuffer.mqh>
CFractalsOnRingBuffer fractals;

...
//+------------------------------------------------------------------+
//| Fonction d'itération personnalisée de l'indicateur                              |
//+------------------------------------------------------------------+
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[])
  {
//--- calcul de l'indicateur basé sur la série temporelle des prix :
   fractals.MainOnArray(rates_total,prev_calculated,high,low);

...
//--- utilisez les données des buffers circulaires "fractals",
//    par exemple, copiez les données dans le buffer de l'indicateur :
   for(int i=start;i<rates_total-BarsRight && !IsStopped();i++)
     {
      UpperBuffer[i] = fractals.upper[rates_total-1-i]; // fractales hautes
      LowerBuffer[i] = fractals.lower[rates_total-1-i]; // fractales basses
     }

...
//--- retour de la valeur de prev_calculated pour le prochain appel :
   return(rates_total);
  }

Veuillez noter que l'indexation dans les buffers circulaires est la même que dans les séries temporelles.

Exemples

  1. L'indicateur calcule le fichier Test_Fractals_OnArrayRB.mq5 sur la base de la série temporelle des prix. L'application de la méthode MainOnArray() est démontrée.
  2. Le fichier Test_Fractals_OnValueRB.mq5 démontre l'utilisation de la méthode MainOnValue(). D'abord, l'indicateur Fractals est calculé et dessiné. Ensuite, sur la base de cet indicateur, un autre Fractals est dessiné à l'aide du buffer circulaire.


Le résultat du travail du Test_Fractals_OnArrayRB.mq5 avec la taille du buffer circulaire de 256 éléments



Le résultat du travail du Test_Fractals_OnValueRB.mq5 avec la taille du buffer circulaire de 256 éléments

 

Lors de l'écriture du code, les développements de MetaQuotes Software Corp.Integer et GODZILLA ont été utilisés.

Articles connexes

Commentaire (0)