Accueil Indicateur technique Publication

Comment dessiner l'ADX avec un buffer circulaire sur MetaTrader 5

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

Description

La classe CADXOnRingBuffer est conçue pour le calcul de l'indicateur technique Average Directional Movement Index (ADX) en utilisant l'algorithme de buffer circulaire.

Déclaration

class CADXOnRingBuffer

Titre

#include <IncOnRingBuffer\CADXOnRingBuffer.mqh>

Le fichier de la classe CADXOnRingBuffer.mqh doit être placé dans le dossier IncOnRingBuffer qui doit être créé dans MQL5\Include\. Deux fichiers avec les exemples utilisés par la classe se trouvent dans ce dossier. Le fichier contenant la classe du buffer circulaire et celui de la Moyenne Mobile doivent également être présents 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 ma_period = 14, // période de lissage de la Moyenne Mobile
ENUM_MA_METHOD ma_method = MODE_EMA, // méthode de lissage de la Moyenne Mobile
int size_buffer = 256, // taille du buffer circulaire, nombre de données stockées
bool as_series = false // true si série temporelle, false pour l'indexation normale des données d'entrée
);
//--- 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 &high[], // tableau des valeurs maximales
const double &low[], // tableau des valeurs minimales
const double &close[] // tableau des prix de clôture
);
//--- méthode de calcul basée sur les éléments séparés de la série :
double MainOnValue(// retourne la valeur ADX 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, // début des valeurs significatives du tableau
const double high, // valeur maximale
const double low, // valeur minimale
const double close, // prix de clôture
const int index // index de l'élément
);
//--- méthodes d'accès aux données :
int BarsRequired(); // Retourne le nombre de barres nécessaires pour dessiner l'indicateur
string NameADX(); // Retourne le nom de l'indicateur
string NameNDI(); // Retourne le nom de la ligne de l'indicateur de mouvement directionnel négatif
string NamePDI(); // Retourne le nom de la ligne de l'indicateur de mouvement directionnel positif
string MAMethod(); // Retourne la méthode de lissage sous forme de texte
int MAPeriod(); // Retourne la période de lissage
int Size(); // Retourne la taille du buffer circulaire

Pour obtenir les données calculées de l'indicateur à partir du buffer circulaire, il est possible de procéder comme avec un tableau classique. Par exemple :

#include <IncOnRingBuffer\CADXOnRingBuffer.mqh>
CADXOnRingBuffer adx;

...
//+------------------------------------------------------------------+
//| 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 :
adx.MainOnArray(rates_total, prev_calculated, high, low, close);

...

//--- copier les données des buffers de "adx" vers l'indicateur :
for(int i=start;i<rates_total;i++)
{
ADX_Buffer[i]=adx[rates_total-1-i]; // indice de mouvement directionnel moyen
PDI_Buffer[i]=adx.pdi[rates_total-1-i]; // indice directionnel positif
NDI_Buffer[i]=adx.ndi[rates_total-1-i]; // indice directionnel négatif
}
...
}

Veuillez noter que l'indexation dans le buffer circulaire est identique à celle des séries temporelles.

Exemples

  1. Le fichier Test_ADX_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_ADX_OnValueRB.mq5 démontre l'utilisation de la méthode MainOnValue(). Dans un premier temps, l'indicateur ADX est calculé et tracé. Ensuite, sur la base du buffer circulaire de cet indicateur, trois lignes de l'indicateur ADX sont calculées.


Résultat du Test_ADX_OnArrayRB.mq5 avec une taille de buffer circulaire de 256 éléments



Résultat du Test_ADX_OnValueRB.mq5 avec une taille de buffer circulaire de 256 éléments

 

Lors de la rédaction de ce code, les développements de MetaQuotes Software Corp., Integer et GODZILLA ont été utilisés.

Articles connexes

Commentaire (0)