Description
La classe CMACDOnRingBuffer est conçue pour le calcul de l'indicateur technique Moyenne Mobile de Convergence/Divergence (MACD) en utilisant l'algorithme du buffer circulaire.
Déclaration
class CMACDOnRingBufferTitre
#include <IncOnRingBuffer\CMACDOnRingBuffer.mqh>Le fichier de la classe CMACDOnRingBuffer.mqh doit être placé dans le dossier IncOnRingBuffer, qui doit être établi dans MQL5\Include\. Deux fichiers avec les exemples utilisés par la classe depuis ce dossier sont joints à la description. Le fichier avec la classe du buffer circulaire et la classe de la Moyenne Mobile doivent é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 fast_period = 12, // période de la Moyenne Mobile rapide int slow_period = 26, // période de la Moyenne Mobile lente int signal_period = 9, // période de la Moyenne Mobile du signal ENUM_MA_METHOD fast_method = MODE_EMA, // méthode de la Moyenne Mobile rapide ENUM_MA_METHOD slow_method = MODE_EMA, // méthode de la Moyenne Mobile lente ENUM_MA_METHOD signal_method = MODE_SMA, // méthode de la Moyenne Mobile du signal int size_buffer = 256, // taille du buffer circulaire bool as_series = false // true si série temporelle, false sinon );
//--- méthode de calcul basée sur une série temporelle :int MainOnArray( // retourne le nombre d'éléments traités constint rates_total, // taille du tableau constint prev_calculated, // éléments traités lors de l'appel précédent constdouble &array[] // tableau des valeurs d'entrée );
//--- méthode de calcul basée sur des éléments séparés :double MainOnValue( // retourne la valeur MACD pour l'élément défini constint rates_total, // taille du tableau constint prev_calculated, // éléments traités du tableau constint begin, // début des données significatives constdouble value, // valeur de l'élément du tableau constint index // index de l'élément );
//--- 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 NameMain() // Retourne le nom de la ligne principale de l'indicateurstring NameSignal() // Retourne le nom de la ligne signal de l'indicateurstring FastMethod() // Retourne la méthode de lissage de la ligne rapidestring SlowMethod() // Retourne la méthode de lissage de la ligne lentestring SignalMethod() // Retourne la méthode de lissage de la ligne du signalint FastPeriod() // Retourne la période de lissage de la ligne rapideint SlowPeriod() // Retourne la période de lissage de la ligne lenteint SignalPeriod() // Retourne la période de lissage de la ligne du signalint Size(); // Retourne la taille du buffer circulaire
Pour obtenir les données calculées de l'indicateur à partir du buffer circulaire, on peut procéder comme avec un tableau habituel. Par exemple :
//--- classe avec les méthodes de calcul du MACD :#include <IncOnRingBuffer\CMACDOnRingBuffer.mqh> CMACDOnRingBuffer macd; ... //+------------------------------------------------------------------+//| Fonction d'itération de l'indicateur personnalisé |//+------------------------------------------------------------------+intOnCalculate(constint rates_total, constint prev_calculated, constint begin, constdouble &price[]) { //--- calcul de l'indicateur basé sur les séries temporelles : macd.MainOnArray(rates_total,prev_calculated,price); ... //--- utiliser les données des buffers circulaires "macd",// copier les données dans les buffers de l'indicateur : for(int i=start;i<rates_total;i++) { MainBuffer[i] = macd[rates_total-1-i]; // histogramme de l'indicateur SignalBuffer[i] = macd.signal[rates_total-1-i]; // ligne du signal de l'indicateur } //--- valeur de prev_calculated pour l'appel suivant : return(rates_total); }
Veuillez noter que l'indexation dans le buffer circulaire est la même que dans les séries temporelles.
Exemples
- Le fichier Test_MACD_OnArrayRB.mq5 calcule l'indicateur basé sur les séries temporelles des prix. L'application de la méthode MainOnArray() est démontrée.
- Le fichier Test_MACD_OnValueRB.mq5 montre l'utilisation de la méthode MainOnValue(). D'abord, l'indicateur MACD est calculé et tracé. Ensuite, sur la base du buffer circulaire de cet indicateur, un autre indicateur MACD est tracé.

Le résultat du fichier Test_MACD_OnArrayRB.mq5 avec une taille de buffer circulaire de 256 éléments

Résultat du fichier Test_MACD_OnValueRB.mq5 avec une taille de 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