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 CMACDOnRingBuffer
Titre
#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 const int rates_total, // taille du tableau const int prev_calculated, // éléments traités lors de l'appel précédent const double &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 const int rates_total, // taille du tableau const int prev_calculated, // éléments traités du tableau const int begin, // début des données significatives const double value, // valeur de l'élément du tableau const int 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'indicateur string Name() // Retourne le nom de l'indicateur string NameMain() // Retourne le nom de la ligne principale de l'indicateur string NameSignal() // Retourne le nom de la ligne signal de l'indicateur string FastMethod() // Retourne la méthode de lissage de la ligne rapide string SlowMethod() // Retourne la méthode de lissage de la ligne lente string SignalMethod() // Retourne la méthode de lissage de la ligne du signal int FastPeriod() // Retourne la période de lissage de la ligne rapide int SlowPeriod() // Retourne la période de lissage de la ligne lente int SignalPeriod() // Retourne la période de lissage de la ligne du signal int 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é | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double &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