Accueil Indicateur technique Publication

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

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

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

  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.

Articles connexes

Commentaire (0)