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 CFractalsOnRingBufferTitre
#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
- 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.
- 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.

Commentaire 0