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

Mike 2013.01.18 22:00 37 0 0
Pièce jointe

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
   constint     rates_total,     // la taille des tableaux
   constint     prev_calculated, // éléments traités lors de l'appel précédent
   constdouble& high[],          // le tableau des maxima
   constdouble& 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)
   constint    rates_total,     // la taille du tableau
   constint    prev_calculated, // éléments traités du tableau
   constint    begin,           // à partir de où commencent les données significatives du tableau
   constdouble high,            // le maximum de la barre actuelle
   constint    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)
   constint    rates_total,     // la taille du tableau
   constint    prev_calculated, // éléments traités du tableau
   constint    begin,           // à partir de où commencent les données significatives du tableau
   constdouble low,             // le minimum de la barre actuelle, le maximum de l'élément courant du tableau
   constint    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'indicateurstring Name();          // Retourne le nom de l'indicateurstring NameUpper()      // Retourne le nom des fractales hautesstring NameLower()      // Retourne le nom des fractales bassesint    BarsRight()      // Retourne le nombre de barres à droite de l'extrêmeint    BarsLeft()       // Retourne le nombre de barres à gauche de l'extrêmeint    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                              |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
                constint prev_calculated,
                constdatetime& time[],
                constdouble& open[],
                constdouble& high[],
                constdouble& low[],
                constdouble& close[],
                constlong& tick_volume[],
                constlong& volume[],
                constint& 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.

Liste
Commentaire 0