Description
La classe CTEMAOnRingBuffer est conçue pour le calcul de l'indicateur technique Triple Exponential Moving Average (TEMA) en utilisant l'algorithme du buffer circulaire.
Déclaration
class CTEMAOnRingBuffer : public CArrayRing
Titre
#include <IncOnRingBuffer\CTEMAnRingBuffer.mqh>Le fichier de la classe CTEMAOnRingBuffer.mqh doit être placé dans le dossier IncOnRingBuffer qui doit être créé dans MQL5\Include\. Deux fichiers avec des exemples utilisés par la classe sont attachés à cette description. Les fichiers contenant les classes du buffer circulaire, DEMA et 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 period = 12, // période du TEMA ENUM_MA_METHOD method = MODE_EMA, // méthode de lissage int size_buffer = 256, // taille du buffer circulaire bool as_series = false // true, si série temporelle, sinon - false );
//--- méthode de calcul basée sur une série temporelle ou les buffers d'indicateurs : 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& price[], // tableau pour le calcul );
//--- méthode de calcul basée sur des éléments séparés de la série : double MainOnValue( // retourne la valeur TEMA pour l'élément (bar) défini const int rates_total, // taille du tableau const int prev_calculated, // éléments traités dans le tableau const int begin, // à partir de où commencent les données significatives const double value, // valeur de l'élément (bar) const int index // index de l'élément (bar) );
//--- méthodes d'accès aux données : int BarsRequired(); // Retourne le nombre nécessaire de bars pour dessiner l'indicateur string Name(); // Retourne le nom de l'indicateur int Period(); // Retourne la période int Size(); // Retourne la taille du buffer circulaire double MA(int index); // Retourne la valeur de la Moyenne Mobile, l'indexation est comme dans une série temporelle double DEMA(int index); // Retourne la valeur de la DEMA, l'indexation est comme dans une série temporelle
Pour obtenir les données calculées de l'indicateur à partir du buffer circulaire, il est possible de procéder comme avec un tableau classique. Par exemple :
//--- classe avec les méthodes de calcul de l'indicateur TEMA : #include <IncOnRingBuffer\CTEMAOnRingBuffer.mqh> CTEMAOnRingBuffer tema; ... //+------------------------------------------------------------------+ //| Fonction d'itération de l'indicateur personnalisé | //+------------------------------------------------------------------+ int OnCalculate (const int rates_total, // taille du tableau price[] const int prev_calculated, // bars traités lors de l'appel précédent const int begin, // à partir de où commencent les données significatives const double& price[]) // tableau pour le calcul { //--- calcul de l'indicateur basé sur une série temporelle : tema.MainOnArray(rates_total,prev_calculated,price); ... //--- utiliser les données du buffer circulaire "tema", // par exemple, copier les données dans le buffer d'indicateur : for(int i=start;i<rates_total && !IsStopped();i++) TEMA_Buffer[i] = tema[rates_total-1-i]; // ligne de l'indicateur TEMA ... //--- retour de la valeur de prev_calculated pour l'appel suivant : return(rates_total); }
Lors du calcul du TEMA, le calcul de la Moyenne Mobile et de la DEMA avec les mêmes paramètres est également effectué. Nous pouvons obtenir les données du buffer circulaire MA et DEMA en utilisant les méthodes MA(int index) et DEMA(int index), respectivement :
//--- utiliser les données des buffers circulaires Moyenne Mobile et DEMA, // par exemple, les copier dans les buffers d'indicateur : for(int i=start;i<rates_total && !IsStopped();i++) { MA_Buffer[i] = dema.MA(rates_total-1-i); // ligne de l'indicateur Moyenne Mobile DEMA_Buffer[i] = dema.DEMA(rates_total-1-i); // ligne de l'indicateur DEMA }
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_TEMA_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_TEMA_OnValueRB.mq5 démontre l'utilisation de la méthode MainOnValue(). D'abord, l'indicateur TEMA est calculé et dessiné. Ensuite, sur la base de ce buffer circulaire d'indicateur, un autre TEMA est dessiné.

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

Le résultat du travail du Test_TEMA_OnValueRB.mq5 avec la taille du buffer circulaire de 256 éléments
Lors de la rédaction du code, les développements de MetaQuotes Software Corp., Integer et GODZILLA ont été utilisés.
Articles connexes
- Découvrez l'indicateur Tymen STARC Bands MTF pour MetaTrader 5
- Découvrez l'indicateur 3 en 1 Stochastic pour MetaTrader 5
- Découvrez la classe CEROnRingBuffer pour calculer l'Efficiency Ratio sur MetaTrader 5
- Améliorez vos graphiques avec ClearView : Indicateurs et modèles pour MetaTrader 5
- Découvrez l'Indicateur Donchian Ultimate pour MT5 : Un Outil Indispensable pour les Traders