Accueil Indicateur technique Publication

Comment Utiliser la Classe CDEMAOnRingBuffer pour le DEMA dans MetaTrader 5

Pièce jointe
1416.zip (9.14 KB, Télécharger 0 fois)

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

  1. 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.
  2. 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

Commentaire (0)