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 - true int period = 0, // période de l'OBV int size_buffer = 256, // taille du ring buffer bool 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és const int rates_total, // taille des tableaux const int prev_calculated, // éléments traités lors de l'appel précédent const double& price[], // prix const long& volume[]); // volume );
//--- méthode de calcul basée sur des éléments séparés du tableau double MainOnValue( // retourne la valeur OBV pour l'élément défini (bougie) 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 du tableau const double price, // prix const long volume, // volume const int 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'indicateur string Name(); // Retourne le nom de l'indicateur int Period(); // Retourne la période int 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é | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime& time[], const double& open[], const double& high[], const double& low[], const double& close[], const long& tick_volume[], const long& volume[], const int& 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
- 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.
- 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.
Articles connexes
- Découvrez l'indicateur Tymen STARC Bands MTF pour MetaTrader 5
- Découvrez le 3ème Génération XMA : L'indicateur essentiel pour MetaTrader 5
- Améliorez vos graphiques avec ClearView : Indicateurs et modèles pour MetaTrader 5
- Découvrez la classe CEROnRingBuffer pour calculer l'Efficiency Ratio sur MetaTrader 5
- Découvrez l'indicateur 3 en 1 Stochastic pour MetaTrader 5