Bienvenue dans cet article où nous allons explorer la classe CDEMAOnRingBuffer, un outil puissant pour le calcul de l'indicateur Double Exponential Moving Average (DEMA) à l'aide d'un algorithme de buffer circulaire.
Description
La classe CDEMAOnRingBuffer est spécialement conçue pour faciliter le calcul du DEMA. Avec cette classe, vous pouvez gérer efficacement les données de prix tout en optimisant vos performances de trading.
Déclaration de la classe
class CDEMAOnRingBuffer : public CArrayRing
Importation de la classe
#include <IncOnRingBuffer\CDEMAnRingBuffer.mqh>Pour que la classe CDEMAOnRingBuffer.mqh fonctionne correctement, assurez-vous de la placer dans le dossier IncOnRingBuffer situé dans MQL5\Include\. Deux exemples de fichiers accompagnant cette classe sont également fournis. N'oubliez pas d'inclure les fichiers de buffer circulaire et de Moyenne Mobile dans ce dossier.
Méthodes de la classe
//--- méthode d'initialisation : bool Init( // retourne false en cas d'erreur, true en cas de succès int period = 12, // période du DEMA 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'indicateur : 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 individuels de la série : double MainOnValue( // retourne la valeur DEMA pour l'élément (bar) 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 (bar) const int index // index de l'élément (bar) );
Pour obtenir les données calculées de l'indicateur à partir du buffer circulaire, vous pouvez procéder comme avec un tableau normal. Voici un exemple :
//--- classe avec les méthodes de calcul de l'indicateur DEMA : #include <IncOnRingBuffer\CDEMAOnRingBuffer.mqh> CDEMAOnRingBuffer dema; ... //+------------------------------------------------------------------+ //| Fonction d'itération de l'indicateur personnalisé | //+------------------------------------------------------------------+ int OnCalculate( const int rates_total, // taille du tableau price[] const int prev_calculated, // barres traitées lors de l'appel précédent const int begin, // début des données significatives const double& price[]) // tableau pour le calcul { //--- calcul de l'indicateur basé sur une série temporelle : dema.MainOnArray(rates_total,prev_calculated,price); ... //--- utilisation des données du buffer circulaire, // exemple : copie des données dans le buffer de l'indicateur : for(int i=start;i<rates_total && !IsStopped();i++) DEMA_Buffer[i] = dema[rates_total-1-i]; // ligne de l'indicateur DEMA ... //--- retour de la valeur de prev_calculated pour le prochain appel : return(rates_total); }
Lors du calcul du DEMA, les calculs de la Moyenne Mobile avec les mêmes paramètres sont également effectués. Vous pouvez récupérer les données du buffer de la MA en utilisant la méthode MA(int index) :
//--- utilisation des données du buffer de la Moyenne Mobile, // exemple : copie des données dans le buffer de l'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
Notez que l'indexation dans les buffers circulaires est identique à celle des séries temporelles.
Exemples
- Le fichier Test_DEMA_OnArrayRB.mq5 calcule le DEMA basé sur la série temporelle des prix. L'application de la méthode MainOnArray() y est démontrée.
- Le fichier Test_DEMA_OnValueRB.mq5 illustre l'utilisation de la méthode MainOnValue(). D'abord, l'indicateur DEMA est calculé et tracé. Ensuite, un autre DEMA est dessiné sur la base de ce buffer circulaire d'indicateur.

Résultat du travail de Test_DEMA_OnArrayRB.mq5 avec une taille de buffer circulaire de 256 éléments.

Résultat du travail de Test_DEMA_OnValueRB.mq5 avec une taille de buffer circulaire de 256 éléments.
Les développements de MetaQuotes Software Corp., Integer et GODZILLA ont été utilisés pour la rédaction de ce code.
Articles connexes
- Découvrez le 3ème Génération XMA : L'indicateur essentiel pour MetaTrader 5
- iMAX3 : Détecteur de Tendances Rapides pour Traders
- WKBIBS : L'oscillateur incontournable pour MetaTrader 5
- Découvrez l'indicateur Tymen STARC Bands MTF pour MetaTrader 5
- Indicateur de Buffers Horaires pour MetaTrader 5 : Collecte de Données Efficace