Comment Utiliser la Classe COBVOnRingBuffer pour l'OBV sur MetaTrader 5

Mike 2013.01.17 00:38 45 0 0
Pièce jointe

Description

La classe COBVOnRingBuffer est conçue pour le calcul de l'indicateur technique On Balance Volume (OBV) en utilisant l'algorithme du ring buffer. Cette méthode permet une gestion efficace des données de volume dans vos analyses.

Déclaration

class COBVOnRingBuffer : public CArrayRing

Titre

#include <IncOnRingBuffer\COBVnRingBuffer.mqh>

Le fichier de la classe COBVOnRingBuffer.mqh doit être placé dans le dossier IncOnRingBuffer, à l'emplacement MQL5\Include\. Deux fichiers d'exemple utilisés par cette classe sont joints à la description. Le fichier contenant la classe de ring buffer doit également se trouver dans ce dossier.

Méthodes de la classe

//--- méthode d'initialisation :bool Init(    // si erreur, retourne false, succès - trueint period = 0, // période de l'OBVint size_buffer = 256, // taille du ring bufferbool as_series = false// vrai si série temporelle, sinon faux
);

La période OBV est utilisée comme dans le cas de Integer : si la valeur est 0 (par défaut), l'indicateur fonctionne comme celui inclus dans le terminal - il sera calculé pour toutes les bougies du graphique. En cas de toute autre valeur positive spécifiée, le nombre de bougies est utilisé (principe de la moyenne mobile) pour le calcul de la valeur à chaque bougie du graphique.

//--- 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ésconstint rates_total, // taille des tableauxconstint prev_calculated, // éléments traités lors de l'appel précédentconstdouble& price[], // prixconstlong& volume[]); // volume
);
//--- méthode de calcul basée sur des éléments séparés du tableaudouble MainOnValue(    // retourne la valeur OBV pour l'élément défini (bougie)constint rates_total, // taille du tableauconstint prev_calculated, // éléments traités du tableauconstint begin, // début des données significatives du tableauconstdouble price, // prixconstlong volume, // volumeconstint index // index de l'élément (bougie)
);
//--- méthodes d'accès aux données :int BarsRequired(); // Retourne le nombre nécessaire de bougies pour dessiner l'indicateurstring Name(); // Retourne le nom de l'indicateurintPeriod(); // Retourne la périodeint Size(); // Retourne la taille du ring buffer

Pour obtenir les données calculées de l'indicateur à partir du ring buffer, cela fonctionne comme avec un tableau classique. Par exemple :

//--- la classe avec les méthodes de calcul de l'indicateur OBV :#include <IncOnRingBuffer\COBVOnRingBuffer.mqh>
COBVOnRingBuffer obv;

...

//+------------------------------------------------------------------+//| Fonction d'itération de l'indicateur personnalisé |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
    constint prev_calculated,
    constdatetime& time[],
    constdouble& open[],
    constdouble& high[],
    constdouble& low[],
    constdouble& close[],
    constlong& tick_volume[],
    constlong& volume[],
    constint& spread[]) {
//--- calcul de l'indicateur basé sur une série temporelle :
    obv.MainOnArray(rates_total, prev_calculated, close, tick_volume);

...

//--- utilisation des données du ring buffer "obv",// par exemple, copie des données dans le buffer d'indicateur :for(int i=start; iIsStopped(); i++)
        OBV_Buffer[i] = obv[rates_total - 1 - i]; // ligne de l'indicateur

...

//--- retour de la valeur de prev_calculated pour l'appel suivant :return(rates_total);
}

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

Exemples

  1. L'indicateur calcule le fichier Test_OBV_OnArrayRB.mq5 sur la base de la série temporelle des prix. L'application de la méthode MainOnArray() est démontrée.
  2. Le fichier Test_OBV_OnValueRB.mq5 démontre l'utilisation de la méthode MainOnValue(). D'abord, l'indicateur OBV est calculé et dessiné. Ensuite, sur la base de ce ring buffer d'indicateur, un autre OBV est dessiné.


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



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

 

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

Liste
Commentaire 0