
Apprenez à concevoir un système de trading basé sur l’OBV
Introduction
Dans ce nouvel article, nous découvrirons un nouvel indicateur technique qui utilise le volume et qui peut nous aider à avoir une perspective différente : nous parlerons en détail de l'indicateur On-Balance Volume (OBV). Voici les sujets que nous allons aborder :
- Définition de l’OBV
- Stratégie basée sur l’OBV
- Plan de la stratégie basée sur l’OBV
- Système de trading basé sur l’OBV
- Conclusion
Nous découvrirons en détail l'OBV au travers de sa définition. Nous identifierons comment il est mesuré et comment le calculer au travers d’un exemple. Nous pourrons ensuite identifier et en apprendre davantage sur cet indicateur pour savoir comment l'utiliser correctement. Nous apprendrons à utiliser l'indicateur OBV en utilisant des stratégies simples basées dessus. Et après avoir identifié comment l'utiliser au travers de stratégies simples, nous concevrons un plan pour ces stratégies qui nous aidera à écrire le code d’un Expert Advisor en MQL5. Après avoir conçu le plan des stratégies, nous serons prêts à écrire notre code en MQL5 pour créer notre Expert Advisor et l'utiliser dans MetaTrader 5 afin d’exécuter nos stratégies de trading automatiquement.
Je dois mentionner que nous utiliserons dans cet article le langage MQL5 (MetaQuotes Language) pour écrire et créer nos Expert Advisors. Nous les exécuterons ensuite sur la plateforme de trading MetaTrader 5. Si vous voulez en savoir plus sur l'installation de MetaTrader 5, comment utiliser le langage MQL5 intégré à MetaTrader 5, vous pouvez consulter ce précédent article sur l’écriture de code MQL5 dans MetaEditor. Je recommande d'appliquer vous-même ce que vous lisez pour maîtriser ce que vous apprenez. La pratique est un outil très important pour maîtriser quoi que ce soit.
Avertissement : Toutes les informations sont fournies "en l'état", uniquement à des fins d'information, et ne sont pas données à des fins de trading ou de conseil. Ces informations ne garantissent aucun type de résultat. Si vous utilisez le contenu de cet article sur l'un de vos comptes de trading, vous le faites à vos propres risques et vous en serez le seul responsable.
Approfondissons maintenant cet article pour apprendre un nouvel outil et l'ajouter à notre boîte à outils pour une expérience de trading améliorée.
Définition de l’OBV
Dans cette partie, nous allons en apprendre plus sur l'indicateur On-balance Volume (OBV). Mais parlons d'abord du volume (car cet indicateur fait partie des indicateurs de volume). Le volume est le nombre d'actions ou de contrats qui se négocient pendant une période de temps spécifique. Un volume élevé signifie que l’instrument est négocié activement. Et vice versa, un faible volume signifie que l'instrument n'est pas activement négocié.
La notion de volume est très importante car si le prix d’un instrument monte ou descend et est accompagné d'un volume élevé, le mouvement sera plus fort que s’il était accompagné d'un volume faible. Le volume doit évoluer avec la tendance. Lorsque nous avons une tendance à la hausse, il est préférable que le volume augmente. Et lors d’une tendance à la baisse, nous pouvons constater que le volume augmente avec une baisse mouvements et diminue avec des corrections à la hausse.
Le volume confirme également si les cassures sont réelles ou s'il s'agit simplement de fausses cassures : lorsque les cassures se font avec un volume élevé, ce sera un signal que ces cassures continueront.
Si cette relation entre la tendance et le volume continue de la même façon, ce sera un signe de force pour la tendance actuelle et si elle change, ce sera un signe de faiblesse. Si vous ne savez pas quelle est la tendance, vous pouvez lire cet article précédent sur la définition de la tendance.
Le On-balance Volume (OBV) a été développé par Joseph Granville. Il mesure le flot volumique positif et négatif. Maintenant, nous devons voir comment le calculer. Les étapes de calcul sont les suivantes :
- Vérifier le cours de clôture - s'il est en hausse ou en baisse.
- Ajouter le volume des jours à la hausse à la valeur précédente de l’OBV.
- Soustraire le volume des jours à la baisse de la valeur précédente de l’OBV.
- Si le prix de clôture d'aujourd'hui est égal au prix de clôture d'hier, alors la valeur de l’OBV d'aujourd'hui sera égale à la valeur de l’OBV d'hier.
Voyons donc un exemple de ces étapes et calculons l'indicateur OBV. Supposons que nous ayons les données suivantes pour un instrument :
Jour | Clôture | Volume |
---|---|---|
1 | 54 | |
2 | 55 | 10 000 |
3 | 60 | 15 000 |
4 | 65 | 20 000 |
5 | 60 | 10 000 |
6 | 55 | 5 000 |
7 | 60 | 7 000 |
8 | 50 | 7 500 |
9 | 48,75 | 8 000 |
10 | 49 | 5 000 |
11 | 48 | 6 000 |
12 | 47,75 | 7 500 |
13 | 48 | 9 000 |
14 | 47,50 | 10 000 |
15 | 48 | 7 000 |
16 | 47 | 7 500 |
17 | 46 | 6 000 |
18 | 44 | 5 000 |
19 | 45 | 15 000 |
Calculons l'indicateur OBV à partir des données précédentes :
Nous vérifierons les cours de clôture et déciderons s'ils sont supérieurs ou non au cours de clôture précédent. S'il est supérieur au prix de clôture du jour précédent, nous ajouterons à côté "Positif" pour indiquer que ce jour a un mouvement à la hausse. S'il est inférieur au prix de clôture du jour précédent, nous ajouterons à côté "Négatif" pour indiquer que ce jour a un mouvement à la baisse.
Ensuite, nous ajouterons le volume des jours positifs et nous soustrairons le volume des jours négatifs à la valeur précédente de l’OBV.
Les valeurs de l’OBV sont maintenant calculées et elles apparaissent sous forme de courbe pour mesurer le débit volumique positif et négatif. Heureusement, nous n'avons pas besoin de calculer cet indicateur manuellement car vous pouvez le trouver parmi les indicateurs intégrés dans MetaTrader 5. L'image suivante montre comment insérer cet indicateur sur le graphique :
Une fois l'indicateur sélectionné, la fenêtre de paramètres de l'indicateur suivante s'ouvrira :
1 - le type de volumes
2 - la couleur de la courbe de l’OBV
3 - le style de la courbe de l’OBV
4 - l'épaisseur de la courbe de l’OBV
Après avoir défini les paramètres souhaités et cliqué sur OK, l'indicateur sera attaché au graphique :
Stratégie basée sur l’OBV
Dans cette partie, nous allons apprendre à utiliser l'indicateur OBV d’après son concept. Nous allons voir des stratégies simples. Mais veuillez noter que ces stratégies peuvent tout de même ne pas convenir à tout le monde. Par conséquent, quelque soit la stratégie que vous choisissez, vous devez toujours la tester avant de l'utiliser. Nous considérons ici toutes ces stratégies avec comme objectif principal d'apprendre les bases de l'indicateur OBV et de voir comment cela fonctionne.
- 1ère stratégie : Mouvement OBV simple
Pour cette stratégie, nous devons identifier la direction de la courbe de l’OBV en comparant la valeur actuelle de l’OBV avec sa valeur précédente et voir si la valeur actuelle est supérieure à la précédente, ce qui signifie que l'OBV augmente. Inversement, si la valeur actuelle est inférieure à la valeur précédente, l'OBV diminue.
Vous pouvez modifier la longueur des données dont vous avez besoin pour comparer l'OBV actuel avec plus de données précédentes. Mais ici, nous partageons simplement la façon dont nous pouvons utiliser l'indicateur et comment nous pouvons coder cette utilisation dans MQL5. Vous pourrez l'optimiser par la suite selon vos préférences.
OBV actuel > OBV précédent --> OBV en hausse
OBV actuel < OBV précédent --> OBV est en baisse
- 2ème stratégie : Force OBV Simple
Pour cette stratégie, nous devons identifier la force de la valeur actuelle de l’OBV en la comparant à la moyenne des 4 valeurs précédentes de l’OBV. Si la valeur actuelle de l’OBV est supérieure à la moyenne des 4 valeurs précédentes, l'OBV est fort. Et vice versa. Si la valeur actuelle de l’OBV est inférieure à la moyenne des 4 valeurs précédentes, alors l'OBV est faible.
Vous pouvez également augmenter la longueur de la moyenne pour la comparer avec les données actuelles, mais l'objectif ici est de voir comment utiliser l'indicateur. Vous pouvez ensuite ajuster ce que vous voulez en fonction de vos préférences et des résultats des tests.
OBV actuel > AVG des 4 valeurs précédentes --> OBV fort
OBV actuel < AVG des 4 valeurs précédentes --> OBV faible
- 3ème stratégie : OBV Simple - tendance haussière
En tendance haussière, comme nous le savons, il est préférable de voir le volume évoluer avec la tendance. L'OBV devrait donc augmenter avec le mouvement ascendant. Cette stratégie permet donc d'évaluer si le mouvement est fort ou non. Nous comparerons la valeur actuelle de l’OBV avec sa valeur précédente et nous comparerons le haut actuel avec le haut précédent. Lorsque la valeur actuelle de l’OBV est supérieure à la valeur précédente et que le sommet actuel est supérieur au sommet précédent, le mouvement à la hausse est fort pendant la tendance haussière.
OBV actuel > OBV précédent et plus haut actuel > plus haut précédent --> Fort mouvement pendant la tendance haussière
- Quatrième stratégie : OBV Simple - tendance baissière
Pendant la tendance baissière, il est préférable de voir le volume évoluer avec la tendance. L'OBV devrait augmenter avec le mouvement vers le bas. Cela permet de déterminer si le mouvement est fort ou non. Nous allons comparer la valeur actuelle de l’OBV avec la valeur précédente et comparer également le bas actuel avec le bas précédent. Lorsque la valeur actuelle de l’OBV est inférieure à la valeur précédente et que le bas actuel est inférieur au bas précédent, le mouvement à la baisse est fort pendant la tendance à la baisse.
OBV actuel < OBV précédent et plus bas actuel < plus bas précédent --> Fort mouvement pendant la tendance baissière
Plan de la stratégie basée sur l’OBV
Dans cette partie, nous allons maintenant concevoir un plan pour chaque stratégie. Il fournira une description claire, étape par étape, de la façon de concevoir un système de trading pour chaque stratégie. Tout d'abord, nous devons concevoir un OBV simple affichant un commentaire sur le graphique avec la valeur actuelle de l’OBV. Voici le plan :
- 1ère stratégie : Mouvement OBV simple
Dans cette stratégie, nous devons connaître la direction de la courbe de l’OBV en fonction de la valeur actuelle de l’OBV et de la valeur précédente. Ainsi, pour chaque tick, nous devons vérifier l'OBV actuel et sa valeur précédente. Lorsque la valeur actuelle est supérieure à la précédente, c’est le signe que l'OBV augmente. Et vice versa, lorsque la valeur actuelle est inférieure à la précédente, c’est le signe que l'OBV est en baisse.
Ce qui suit est un plan, étape par étape, pour cette stratégie afin de nous aider à concevoir un système de trading :
- 2ème stratégie : Force OBV Simple
Dans cette stratégie, nous devons mesurer la force de l'OBV actuel en le comparant à la moyenne des 4 valeurs précédentes. Si l'OBV actuel est supérieur à la moyenne des 4 valeurs précédentes, l'OBV est fort. Et inversement, si l'OBV actuel est inférieur à la moyenne des 4 valeurs précédentes, l'OBV est faible.
Voici le plan étape par étape pour créer ce système de trading :
- 3ème stratégie : OBV Simple - tendance haussière
Dans cette stratégie, nous allons utiliser l’indicateur de volume OBV pour mesurer l'évolution actuelle des prix. Ainsi, pendant la tendance haussière, nous devons vérifier la valeur actuelle de l’OBV et la comparer avec la valeur précédente. Si la valeur actuelle est supérieure à la valeur précédente, nous devons vérifier le prix haut actuel et le comparer avec le prix élevé précédent. Si la valeur actuelle est supérieure à la valeur précédente, ce sera un signe que le mouvement ascendant actuel est fort pendant la tendance haussière.
Voici un plan étape par étape pour coder cette stratégie :
- Quatrième stratégie : OBV Simple - tendance baissière
Dans cette stratégie, pendant la tendance à la baisse, nous devons vérifier la valeur actuelle de l’OBV et la comparer avec la valeur précédente. Si la valeur actuelle est inférieure à la valeur précédente, nous devons vérifier le prix bas actuel et le comparer avec le prix bas précédent. Si la valeur actuelle est inférieure à la valeur précédente, ce sera un signe que le mouvement baissier actuel est fort.
Voici un plan étape par étape pour coder cette stratégie :
Système de trading basé sur l’OBV
Dans cette partie, nous apprendrons comment créer un système de trading pour chaque stratégie afin de tirer parti de la programmation et de MQL5. La programmation est un outil magique qui peut nous faciliter la vie en créant un système automatique qui fera ce dont nous avons besoin avec précision et rapidité.
Nous allons maintenant commencer à créer un système de trading pour chaque stratégie. Nous allons tout d’abord créer un système de trading OBV Simple pour afficher un commentaire sur le graphique avec la valeur actuelle de l’OBV.
- Création d'un tableau de "double" pour les valeurs de l’OBV. Le "double" est un type réel, ou un type à virgule flottante, représentant des valeurs avec une partie fractionnaire. Pour votre information, il existe deux types de virgule flottante : les doubles et les flottants. Le type "double" représente les nombres avec la double précision du type flottant :
double OBVArray[];
- Tri du tableau de l’OBV à l'aide de la fonction "ArraySetAsSeries" qui renvoie true ou false :
ArraySetAsSeries(OBVArray,true);
- Définition de l'OBV avec la fonction "iOBV" après avoir créé une variable de type "integer" pour la variable OBVDef. La fonction "iOBV" renvoie le handle de l'indicateur On Balance Volume. Ses paramètres sont : symbole, période et volume appliqué :
int OBVDef =iOBV(_Symbol, _Period,VOLUME_TICK);
- Remplissage du tableau OBVArray avec OBVDef en utilisant la fonction "CopyBuffer" qui renvoie le nombre de données copiées. Ses paramètres sont : handle de l'indicateur, indice du buffer, heure de début, heure d'arrêt, buffer :
CopyBuffer(OBVDef,0,0,3,OBVArray);
- Calcul de la valeur actuelle de l’OBV après avoir créé une variable de type "double" pour OBVValue :
double OBVValue=OBVArray[0];
- Création d'un commentaire en utilisant la fonction "comment" pour afficher un commentaire sur le graphique avec la valeur actuelle de l’OBV :
Comment("OBV Value is: ",OBVValue);
Voici le code complet du système de trading affichant la valeur actuelle de l’OBV sous forme de commentaire :
//+------------------------------------------------------------------+ //| Simple OBV.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2022, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ void OnTick() { //creating an array for OBV double OBVArray[]; //sorting the array from the current data ArraySetAsSeries(OBVArray,true); //defining OBV int OBVDef =iOBV(_Symbol, _Period,VOLUME_TICK); //defining EA, buffer, sorting in array CopyBuffer(OBVDef,0,0,3,OBVArray); //calculating current OBV value double OBVValue=OBVArray[0]; //creating a comment with OBV value Comment("OBV Value is: ",OBVValue); } //+------------------------------------------------------------------+
Après avoir compilé ce code, nous le trouverons dans la fenêtre du Navigateur de MetaTrader 5 :
Pour l’exécuter, nous devons double-cliquer sur le fichier ou le glisser-déposer sur le graphique. La fenêtre suivante apparaît :
Après avoir appuyé sur "OK", l’Expert Advisor sera alors attaché au graphique :
Le signal généré apparaît comme prévu :
Pour nous assurer que la valeur que l'indicateur On Balance Volume intégré à Meta Trader 5 retourne la même valeur, nous pouvons insérer l'indicateur On Balance Volume comme mentionné précédemment. Nous pouvons voir que les valeurs sont les mêmes :
Maintenant, nous devons créer un système de trading pour chaque stratégie mentionnée. Voici comment procéder.
- 1ère stratégie : Mouvement OBV simple
Pour cette stratégie, nous devons comparer deux valeurs : la valeur actuelle de l’OBV avec la valeur précédente de l’OBV. Si la valeur actuelle est supérieure à la valeur précédente, un signal doit apparaître sous la forme d’un commentaire sur le graphique indiquant "OBV en hausse", la valeur actuelle de l'OBV et la valeur précédente de l'OBV. Voici le code complet de cette stratégie :
//+------------------------------------------------------------------+ //| Simple OBV movement.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2022, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ void OnTick() { //creating an two arrays for OBV double OBVArray1[]; double OBVArray2[]; //sorting the array from the current data ArraySetAsSeries(OBVArray1,true); ArraySetAsSeries(OBVArray2,true); //defining OBV int OBVDef =iOBV(_Symbol, _Period,VOLUME_TICK); //defining EA, buffer, sorting in array CopyBuffer(OBVDef,0,0,3,OBVArray1); CopyBuffer(OBVDef,0,0,3,OBVArray2); //getting the value of current and previous OBV double OBVCurrentValue=NormalizeDouble(OBVArray1[0],5); double OBVPrevValue=NormalizeDouble(OBVArray2[1],5); //creating conditions of rising and declining OBV based on its values if(OBVCurrentValue>OBVPrevValue) { Comment("OBV is rising","\n","OBV current is ",OBVCurrentValue,"\n","OBV previous is ",OBVPrevValue); } if(OBVCurrentValue<OBVPrevValue) { Comment("OBV is declining","\n","OBV current is ",OBVCurrentValue,"\n","OBV previous is ",OBVPrevValue); } } //+------------------------------------------------------------------+
- Différences dans le code :
double OBVArray1[]; double OBVArray2[];
Tri de ces 2 tableaux à partir des données actuelles :
ArraySetAsSeries(OBVArray1,true); ArraySetAsSeries(OBVArray2,true);
Remplissage de ces 2 tableaux :
CopyBuffer(OBVDef,0,0,3,OBVArray1); CopyBuffer(OBVDef,0,0,3,OBVArray2);
Récupération des valeurs de l'OBV en utilisant la fonction "NormalizeDouble" qui renvoie un type de valeur double avec une précision prédéfinie, après avoir créé une variable pour OBVCurrentValue et OBVPrevValue. Les paramètres de "NormalizeDouble" sont : valeur, précision. La valeur sera le tableau OBVArray, et la précision sera 5 :
double OBVCurrentValue=NormalizeDouble(OBVArray1[0],5); double OBVPrevValue=NormalizeDouble(OBVArray2[1],5);
Réglage des conditions de l'OBV croissant et décroissant à l'aide de la fonction "if" :
if(OBVCurrentValue>OBVPrevValue) { Comment("OBV is rising","\n","OBV current is ",OBVCurrentValue,"\n","OBV previous is ",OBVPrevValue); } if(OBVCurrentValue<OBVPrevValue) { Comment("OBV is declining","\n","OBV current is ",OBVCurrentValue,"\n","OBV previous is ",OBVPrevValue); }
Après l’avoir compilé, l'Expert Advisor apparaîtra dans la fenêtre du Navigateur dans le dossier "Expert Advisors" de la plateforme de trading MetaTrader 5, comme suit :
En double-cliquant sur l'Expert Advisor, la fenêtre suivante apparaît :
Après avoir appuyé sur "OK", l'Expert Advisor sera attaché au graphique :
Voici des exemples de tests de signaux générés avec cette stratégie :
OBV en hausse :
OBV en baisse :
- 2ème stratégie : Force OBV Simple
Selon cette stratégie, nous devons comparer 2 valeurs : la valeur actuelle de l’OBV et la valeur moyenne des 4 valeurs précédentes de l’OBV. Si la valeur actuelle est supérieure à la moyenne, cela signifie que "l'OBV est fort" et inversement, si la valeur actuelle est inférieure à la moyenne cela signifie que "l'OBV est faible". Voici le code complet du système de trading de cette stratégie :
//+------------------------------------------------------------------+ //| Simple OBV Strength.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2022, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ void OnTick() { //creating an six arrays for OBV double OBVArray0[]; double OBVArray1[]; double OBVArray2[]; double OBVArray3[]; double OBVArray4[]; //sorting arrays from the current data ArraySetAsSeries(OBVArray0,true); ArraySetAsSeries(OBVArray1,true); ArraySetAsSeries(OBVArray2,true); ArraySetAsSeries(OBVArray3,true); ArraySetAsSeries(OBVArray4,true); //defining OBV int OBVDef =iOBV(_Symbol, _Period,VOLUME_TICK); //defining EA, buffer, sorting in arrays CopyBuffer(OBVDef,0,0,5,OBVArray0); CopyBuffer(OBVDef,0,0,5,OBVArray1); CopyBuffer(OBVDef,0,0,5,OBVArray2); CopyBuffer(OBVDef,0,0,5,OBVArray3); CopyBuffer(OBVDef,0,0,5,OBVArray4); //getting the value of current OBV & previous 5 values double OBVCurrentValue=NormalizeDouble(OBVArray0[0],5); double OBVPrevValue1=NormalizeDouble(OBVArray1[1],5); double OBVPrevValue2=NormalizeDouble(OBVArray2[2],5); double OBVPrevValue3=NormalizeDouble(OBVArray3[3],5); double OBVPrevValue4=NormalizeDouble(OBVArray4[4],5); //calculating average of previous OBV value double OBVAVG=((OBVPrevValue1+OBVPrevValue2+OBVPrevValue3+OBVPrevValue4)/4); if(OBVCurrentValue>OBVAVG) { Comment("OBV is strong","\n","OBV current is ",OBVCurrentValue,"\n","OBV Average is ",OBVAVG,"\n","Previous four OBV Values: ", "\n", "1= ",OBVPrevValue1,"\n", "2= ",OBVPrevValue2,"\n", "3= ",OBVPrevValue3,"\n", "4= ",OBVPrevValue4); } if(OBVCurrentValue<OBVAVG) { Comment("OBV is weak","\n","OBV current is ",OBVCurrentValue,"\n","OBV Average is ",OBVAVG,"\n","Previous four OBV Values: ", "\n", "1= ",OBVPrevValue1,"\n", "2= ",OBVPrevValue2,"\n", "3= ",OBVPrevValue3,"\n", "4= ",OBVPrevValue4); } } //+------------------------------------------------------------------+
- Différences dans le code :
Création de 5 tableaux pour les valeurs de l’OBV :
double OBVArray0[]; double OBVArray1[]; double OBVArray2[]; double OBVArray3[]; double OBVArray4[];
Tri de ces tableaux créés à partir des données actuelles :
ArraySetAsSeries(OBVArray0,true); ArraySetAsSeries(OBVArray1,true); ArraySetAsSeries(OBVArray2,true); ArraySetAsSeries(OBVArray3,true); ArraySetAsSeries(OBVArray4,true);
Remplissage des tableaux avec OBVDef :
CopyBuffer(OBVDef,0,0,5,OBVArray0); CopyBuffer(OBVDef,0,0,5,OBVArray1); CopyBuffer(OBVDef,0,0,5,OBVArray2); CopyBuffer(OBVDef,0,0,5,OBVArray3); CopyBuffer(OBVDef,0,0,5,OBVArray4);
Récupération des valeurs de l'OBV actuel et des 4 précédentes :
double OBVCurrentValue=NormalizeDouble(OBVArray0[0],5); double OBVPrevValue1=NormalizeDouble(OBVArray1[1],5); double OBVPrevValue2=NormalizeDouble(OBVArray2[2],5); double OBVPrevValue3=NormalizeDouble(OBVArray3[3],5); double OBVPrevValue4=NormalizeDouble(OBVArray4[4],5);
Calcul de la moyenne des 4 valeurs précédentes de l’OBV après création d'une variable de type double pour OBVAVG :
double OBVAVG=((OBVPrevValue1+OBVPrevValue2+OBVPrevValue3+OBVPrevValue4)/4);
Réglage des conditions de l'OBV fort et faible avec le commentaire :
if(OBVCurrentValue>OBVAVG) { Comment("OBV is strong","\n","OBV current is ",OBVCurrentValue,"\n","OBV Average is ",OBVAVG,"\n","Previous four OBV Values: ", "\n", "1= ",OBVPrevValue1,"\n", "2= ",OBVPrevValue2,"\n", "3= ",OBVPrevValue3,"\n", "4= ",OBVPrevValue4); } if(OBVCurrentValue<OBVAVG) { Comment("OBV is weak","\n","OBV current is ",OBVCurrentValue,"\n","OBV Average is ",OBVAVG,"\n","Previous four OBV Values: ", "\n", "1= ",OBVPrevValue1,"\n", "2= ",OBVPrevValue2,"\n", "3= ",OBVPrevValue3,"\n", "4= ",OBVPrevValue4); }
Après compilation, nous retrouverons le même Expert Advisor que le suivant dans la fenêtre du Navigateur :
Voici la fenêtre de l'Expert Advisor après avoir choisi le fichier à exécuter sur MetaTrader 5 :
Après avoir appuyé sur "OK", l'Expert Advisor sera attaché au graphique :
Voici des exemples de tests de signaux :
OBV fort :
OBV faible :
- 3ème stratégie : OBV Simple - tendance haussière
Selon cette stratégie, en tendance haussière, nous devons vérifier si nous avons un prix haut plus élevé et une valeur de l’OBV plus élevée également. Nous devons donc vérifier si la valeur actuelle de l’OBV est supérieure à sa valeur précédente, et si le prix haut actuel est supérieur au prix haut précédent. Dans ce cas, nous avons un signal de "mouvement fort pendant la tendance haussière". Voici le code complet de cette stratégie :
//+------------------------------------------------------------------+ //| Simple OBV - Uptrend.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2022, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ void OnTick() { //creating a string variable for signal string signal=""; //creating two OBV arrays for OBV double OBVArray0[]; double OBVArray1[]; //creating two price arrays MqlRates PriceArray0[]; MqlRates PriceArray1[]; //sorting OBV arrays from the current data ArraySetAsSeries(OBVArray0,true); ArraySetAsSeries(OBVArray1,true); //sorting Price arrays from the current data ArraySetAsSeries(PriceArray0,true); ArraySetAsSeries(PriceArray1,true); //fill arrays with price data int Data0=CopyRates(_Symbol,_Period,0,3,PriceArray0); int Data1=CopyRates(_Symbol,_Period,0,3,PriceArray1); //defining OBV int OBVDef =iOBV(_Symbol, _Period,VOLUME_TICK); //defining EA, buffer, sorting in arrays CopyBuffer(OBVDef,0,0,3,OBVArray0); CopyBuffer(OBVDef,0,0,3,OBVArray1); //getting the value of current & the previous OBV double OBVCurrentValue=NormalizeDouble(OBVArray0[0],5); double OBVPrevValue=NormalizeDouble(OBVArray1[1],5); //getting the value of current high & the previous high double CurrentHighValue=NormalizeDouble(PriceArray0[0].high,5); double PrevHighValue=NormalizeDouble(PriceArray1[1].high,5); //strong move signal //if OBVCurrentValue>OBVPrevValue && current high> previous high if(OBVCurrentValue > OBVPrevValue && PriceArray0[0].high>PriceArray0[1].high) { signal="Strong move during uptrend"; } //comment with the signal Comment("The signal is ",signal,"\n","OBVCurrentValue is :",OBVCurrentValue, "\n","OBVPrevValue is :", OBVPrevValue,"\n","Current high is :",CurrentHighValue,"\n","Previous high is :",PrevHighValue); } //+------------------------------------------------------------------+
Différences dans le code :
Création d'une variable de type "string" (chaîne de caractères) pour "signal", pour stocker les chaînes de texte que nous calculerons plus tard :
string signal="";
Création de 2 tableaux d’éléments de type "double" pour l’OBV et de 2 tableaux pour les prix d’éléments de type "MqlRates" pour stocker les prix, le volume et l'écart :
//creating two OBV arrays for OBV double OBVArray0[]; double OBVArray1[]; //creating two price arrays MqlRates PriceArray0[]; MqlRates PriceArray1[];1[];
Tri de ces tableaux à partir des données actuelles :
//sorting OBV arrays from the current data ArraySetAsSeries(OBVArray0,true); ArraySetAsSeries(OBVArray1,true); //sorting Price arrays from the current data ArraySetAsSeries(PriceArray0,true); ArraySetAsSeries(PriceArray1,true);
Remplissage des tableaux de prix avec à l'aide de la fonction "CopyRates" qui obtient les données d'historique de la structure "MqlRates", après avoir créé des variables de type entier pour Data0 et Data1 pour chaque tableau :
int Data0=CopyRates(_Symbol,_Period,0,3,PriceArray0); int Data1=CopyRates(_Symbol,_Period,0,3,PriceArray1);
Définition de l'OBV et remplissage des 2 tableaux OBVArray avec :
int OBVDef =iOBV(_Symbol, _Period,VOLUME_TICK); CopyBuffer(OBVDef,0,0,3,OBVArray0); CopyBuffer(OBVDef,0,0,3,OBVArray1);
Récupération des valeurs de l'OBV et des plus hauts :
//getting the value of current & the previous OBV double OBVCurrentValue=NormalizeDouble(OBVArray0[0],5); double OBVPrevValue=NormalizeDouble(OBVArray1[1],5); //getting the value of current high & the previous high double CurrentHighValue=NormalizeDouble(PriceArray0[0].high,5); double PrevHighValue=NormalizeDouble(PriceArray1[1].high,5);
Conditions de réglage du "Mouvement fort pendant la tendance haussière" et du commentaire :
Comment("The signal is ",signal,"\n","OBVCurrentValue is :",OBVCurrentValue, "\n","OBVPrevValue is :", OBVPrevValue,"\n","Current high is :",CurrentHighValue,"\n","Previous high is :",PrevHighValue);
Une fois compilé, l’Expert Advisor se trouve dans la fenêtre du Navigateur :
La fenêtre de l’Expert Advisor après avoir choisi le fichier à exécuter sur MetaTrader 5 :
Après avoir appuyé sur "OK", l'Expert Advisor sera attaché au graphique :
Voici des exemples de tests de signaux :
Signal avec la fenêtre des données pour les données actuelles :
Signal avec la fenêtre des données pour les données précédentes :
- Quatrième stratégie : OBV Simple - tendance baissière
Pour cette stratégie, ce sera l'inverse de la stratégie OBV Simple - tendance haussière, car nous devons vérifier si nous avons un prix bas inférieur et une valeur inférieure de l'OBV. Nous devons donc vérifier si la valeur actuelle de l’OBV est inférieure à la valeur précédente et si le prix bas actuel est inférieur au prix bas précédent. Dans ce cas, nous avons un signal de "mouvement fort pendant la tendance baissière". Voici le code complet de cette stratégie :
//+------------------------------------------------------------------+ //| Simple OBV - Downtrend.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2022, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ void OnTick() { //create a string variable for signal string signal=""; //creating two OBV arrays double OBVArray0[]; double OBVArray1[]; //creating two price arrays MqlRates PriceArray0[]; MqlRates PriceArray1[]; //sorting OBV arrays from the current data ArraySetAsSeries(OBVArray0,true); ArraySetAsSeries(OBVArray1,true); //sorting Price arrays from the current data ArraySetAsSeries(PriceArray0,true); ArraySetAsSeries(PriceArray1,true); //fill array with price data int Data0=CopyRates(_Symbol,_Period,0,3,PriceArray0); int Data1=CopyRates(_Symbol,_Period,0,3,PriceArray1); //defining OBV int OBVDef =iOBV(_Symbol, _Period,VOLUME_TICK); //defining EA, buffer, sorting in arrays CopyBuffer(OBVDef,0,0,3,OBVArray0); CopyBuffer(OBVDef,0,0,3,OBVArray1); //getting the value of current OBV & the previous value double OBVCurrentValue=NormalizeDouble(OBVArray0[0],5); double OBVPrevValue=NormalizeDouble(OBVArray1[1],5); //getting the value of current OBV & the previous value double CurrentLowValue=NormalizeDouble(PriceArray0[0].low,5); double PrevLowValue=NormalizeDouble(PriceArray1[1].low,5); //strong move signal //if OBVCurrentValue>OBVPrevValue && current low> previous low if(OBVCurrentValue < OBVPrevValue && PriceArray0[0].low<PriceArray0[1].low) { signal="Strong move during downtrend"; } //comment with the signal Comment("The signal is ",signal,"\n","OBVCurrentValue is :",OBVCurrentValue, "\n","OBVPrevValue is :", OBVPrevValue,"\n","Current low is :",CurrentLowValue,"\n","Previous low is :",PrevLowValue); } //+------------------------------------------------------------------+
- Différences dans le code :
Condition de réglage du "Mouvement fort pendant la tendance baissière" et le commentaire :
Comment("The signal is ",signal,"\n","OBVCurrentValue is :",OBVCurrentValue, "\n","OBVPrevValue is :", OBVPrevValue,"\n","Current low is :",CurrentLowValue,"\n","Previous low is :",PrevLowValue);
Nous pouvons maintenant le compiler, puis nous pourrons trouver l'Expert Advisor dans la fenêtre du Navigateur comme suit :
Après avoir glissé et déposé ce fichier sur le graphique, la fenêtre suivante sera affichée :
En appuyant sur le bouton "OK", l'Expert Advisor sera attaché de la même manière que l'image suivante :
Voici un exemple de signaux générés :
Signal avec la fenêtre des données actuelles :
Signal avec la fenêtre des données précédentes :
Conclusion
En conclusion, nous avons appris un nouvel indicateur technique qui utilise le volume dans son calcul. Ceci permet d’obtenir une autre perspective dans le graphique pour améliorer nos décisions de trading. Cet indicateur est le On Balance Volume (OBV). Nous avons pu le voir en détail, ce qu’il est, ce qu'il mesure et comment le calculer. Nous avons également vu comment l'utiliser et appris quelques stratégies simples qui peuvent être utiles ou peuvent nous aider à concrétiser de nouvelles idées. C'est l'objectif principal de cet article et des autres articles de cette série. Nous avons conçu un plan pour chaque stratégie. Celui-ci nous aide à écrire le code de chaque stratégie afin de créer un système de trading. Après cela, nous avons créé un Expert Advisor en MQL5 (MetaQuotes Language) pour chaque stratégie afin de les exécuter dans la plateforme de trading MetaTrader 5 pour générer des signaux automatiquement et avec précision.
Je tiens à mentionner que l'une des choses les plus bénéfiques dans l'analyse technique est que nous pouvons voir plus d'une perspective sur l'instrument financier selon l'outil que nous utilisons. Nous pouvons également combiner plus d'un outil ou indicateur pour avoir une vue d'ensemble de l'instrument financier afin de pouvoir prendre clairement la décision appropriée. Cette approche nous aide à créer un système de trading fiable. Gardez cette approche lorsque vous lisez ou apprenez quelque chose. Cela vous permettra de réaliser quel outil peut être utilisé avec un autre pour vous donner des informations plus claires et de meilleurs résultats.
Je dois vous redire à nouveau que cet article et les autres de cette série sont uniquement à des fins éducatives et conçus pour les débutants uniquement afin d’apprendre que la programmation en MQL5 peut vous aider énormément. Vous devez toujours tester toute stratégie avant de l'utiliser, car il n'existe rien qui puisse convenir à tout le monde. Vous devez faire votre travail en les testant et en les validant pour vous. Je vous conseille de tout appliquer par vous-même pour approfondir votre apprentissage et votre compréhension.
J'espère que vous avez trouvé cet article utile. Et j'espère que vous avez également appris quelque chose, que ce soit sur le sujet de cet article ou sur tout autre sujet connexe dans le monde du trading. Si vous avez trouvé cet article utile et que vous souhaitez lire des articles similaires, vous pouvez lire mes articles précédents de cette série pour apprendre à concevoir un système de trading basé sur les indicateurs techniques les plus populaires.
Traduit de l’anglais par MetaQuotes Ltd.
Article original : https://www.mql5.com/en/articles/10961





- Applications de trading gratuites
- VPS Forex gratuit pendant 24 heures
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Vous acceptez la politique du site Web et les conditions d'utilisation