Découvrez la classe CEROnRingBuffer pour calculer l'Efficiency Ratio sur MetaTrader 5

Mike 2013.01.08 23:46 22 0 0
Pièce jointe

Description

La classe CEROnRingBuffer est conçue pour calculer l'indicateur technique Efficiency Ratio (ER), utilisé dans la Moyenne Mobile Adaptive (AMA), en utilisant un algorithme basé sur le buffer circulaire.

Déclaration

class CEROnRingBuffer : public CArrayRing

Titre

#include <IncOnRingBuffer\CEROnRingBuffer.mqh>

Le fichier de la classe CEROnRingBuffer.mqh doit être placé dans le dossier IncOnRingBuffer, qui doit être créé dans MQL5\Include\. Deux fichiers avec des exemples d'utilisation de la classe sont joints à cette description. Le fichier contenant la classe du buffer circulaire doit également être présent dans ce dossier.

Méthodes de la classe

//--- méthode d'initialisation :
bool Init(                                  // en cas d'erreur, renvoie false, si succès - true
   int            period        = 34,       // période de calcul de l'ER  
   int            size_buffer   = 256,      // taille du buffer circulaire, nombre de données stockées
   bool           as_series     = false     // true, si série temporelle, false - si indexation classique des données d'entrée
   );
//--- méthode de calcul basée sur une série temporelle ou un buffer d'indicateur :
int MainOnArray(                  // renvoie le nombre d'éléments traités
   const int     rates_total,     // taille du tableau array[]
   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 de la série du tableau :
double MainOnValue(              // renvoie la valeur ER 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,           // à partir de où commencent les données significatives du tableau
   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();   // Renvoie le nombre nécessaire de bars pour dessiner l'indicateur
string Name()            // Renvoie le nom de l'indicateur
int    Period()          // Renvoie la période de calcul de l'ER
int    Size();           // Renvoie la taille du buffer circulaire

Pour obtenir les données calculées de l'indicateur à partir du buffer circulaire, c'est aussi simple que depuis un tableau classique. Par exemple :

//--- classe avec les méthodes de calcul de l'indicateur ER :
#include <IncOnRingBuffer\CEROnRingBuffer.mqh>
CEROnRingBuffer er;

...

//+------------------------------------------------------------------+
//| 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 la série temporelle des prix :
   er.MainOnArray(rates_total,prev_calculated,price);

...

//--- utiliser les données du buffer circulaire "er",
//    par exemple, copier les données dans les buffers de l'indicateur :
   for(int i=start;i<rates_total;i++)
     {
      ER_Buffer[i]   = er[rates_total-1-i];          // ligne de l'indicateur
     }
//--- renvoyer la valeur de prev_calculated pour le prochain appel :
   return(rates_total);
  }

Veuillez noter que l'indexation dans le buffer circulaire est la même que dans la série temporelle.

Exemples

  1. Le fichier Test_ER_OnArrayRB.mq5 calcule l'indicateur basé sur la série temporelle des prix. L'application de la méthode MainOnArray() est démontrée.
  2. Le fichier Test_ER_OnValueRB.mq5 démontre l'utilisation de la méthode MainOnValue(). Dans un premier temps, l'indicateur ER est calculé et tracé. Ensuite, sur la base du buffer circulaire de cet indicateur, un autre ER est tracé.


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



Les résultats du travail de Test_ER_OnValueRB.mq5 avec une taille de buffer circulaire de 256 éléments

 

Lors de l'écriture de ce code, les développements de MetaQuotes Software Corp., Integer et GODZILLA ont été utilisés.

Liste
Commentaire 0