English Русский 中文 Español Deutsch 日本語 Português 한국어 Italiano Türkçe
preview
Apprenez à concevoir un système trading basé sur le Relative Vigor Index

Apprenez à concevoir un système trading basé sur le Relative Vigor Index

MetaTrader 5Trading | 23 octobre 2023, 10:14
726 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

Introduction

Bienvenue dans mon nouvel article de notre série pour apprendre en détail de nouveaux outils techniques et concevoir un système de trading simple avec cet outil. Il s’agit de l’indicateur Relative Vigor Index (RVI). Nous l’aborderons à travers les rubriques suivantes :

  1. Définition du Relative Vigor Index
  2. Stratégie Relative Vigor Index
  3. Plan de la stratégie Relative Vigor Index
  4. Système de trading Relative Vigor Index
  5. Conclusion

Nous utiliserons l'IDE MQL5 (MetaQuotes Language 5) pour écrire le code et le terminal de trading MetaTrader 5 pour exécuter notre système de trading. Je vous conseille d'essayer d'appliquer ce que vous apprendrez par vous-même si vous souhaitez améliorer vos compétences en codage en tant que débutant, car la pratique est très importante à faire. Si vous ne savez pas comment télécharger et utiliser MetaTrader 5 et MQL5, vous pouvez lire mon précédent article sur l'écriture de code MQL5 dans MetaEditor.

Toutes les stratégies mentionnées sont uniquement à des fins éducatives. Vous constaterez peut-être qu'elles ont besoin d'être optimisées, ce qui est normal car l'objectif principal de cet article et de ces stratégies simples sont d'apprendre le concept principal qui se cache derrière. Vous devez donc très bien les tester avant de les utiliser sur votre compte réel pour vous assurer qu'ils seront utiles pour votre trading.

Avertissement : Toutes les informations données dans cet article sont fournies "en l'état", uniquement à des fins d'information et ne sont aucunement 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.


Définition du Relative Vigor Index

Dans ce sujet, nous apprendrons en détail ce qu'est l'Indice de Vigueur Relative, ou Relative Vigor Index en anglais (RVI). Il s’agit d’un indicateur technique de momentum et d’un oscillateur. En comparant le cours de clôture à son niveau d'ouverture, cet indicateur mesure la force de la tendance. Pendant la tendance haussière, le prix de clôture est sur un niveau supérieur au prix d'ouverture. Pendant une tendance à la baisse, le cours de clôture à un niveau inférieur au prix d'ouverture. Les résultats ont également été lissés en utilisant la moyenne mobile simple. Cet indicateur RVI fonctionne mieux pendant les marchés en tendance que pendant les périodes variables de par sa nature. Nous pouvons constater que le calcul du RVI est similaire à celui de l'oscillateur Stochastique. Mais le RVI compare le cours de clôture à son cours d'ouverture, alors que l'oscillateur Stochastique compare le cours de clôture à sa fourchette de prix au cours d'une période spécifique. Si nous voulons calculer le RVI manuellement, nous pouvons le faire en suivant les étapes suivantes :

RVI = (CLOSE - OPEN) / (HIGH - LOW)

Avec :

CLOSE = Cours de clôture

OPEN = Prix d'ouverture

HIGH = Prix le plus élevé

LOW = Prix le plus bas

Généralement, le RVI que nous utilisons apparaît sous la forme de 2 lignes avec des composantes différentes dans le calcul. Voici comment nous pouvons les calculer :

1- Calcul de la 1ère ligne :

  • Calcul du nominateur :

MovAverage = (CLOSE-OPEN) + 2 * (CLOSE-1 - OPEN-1) + 2 * (CLOSE-2 - OPEN-2) + (CLOSE-3 - OPEN-3)

Avec :

CLOSE = Cours de clôture actuel

CLOSE-1, CLOSE-2, CLOSE-3 = Cours de clôture d'il y a 1, 2 et 3 périodes

OPEN = Prix d'ouverture actuel

OPEN-1, OPEN-2, OPEN-3 = Cours d'ouverture d'il y a 1, 2 et 3 périodes

  • Calcul du dénominateur :

RangeAverage = (HIGH-LOW) + 2 x (HIGH-1 - LOW-1) + 2 x (HIGH-2 - LOW-2) + (HIGH-3 - LOW-3)

Avec :

HIGH = Dernier prix maximum

HIGH-1, HIGH-2, HIGH-3 = Derniers prix maximaux d'il y a 1, 2 et 3 périodes

LOW = Dernier prix minimum

LOW-1, LOW-2, LOW-3 = Derniers prix minimaux d'il y a 1, 2 et 3 périodes

  • Calculez la somme de ces moyennes comme suit :

Moyenne RVI

2- Calcul de la 2ème ligne :

RVIsignal = (RVIaverage + 2 * RVIaverage-1 + 2 * RVIaverage-2 + RVIaverage-3)/6

Nous avons maintenant compris le concept principal de cet indicateur après avoir appris à le calculer manuellement. Mais nous n'avons pas besoin de le faire car il est calculé dans le terminal de trading MetaTrader 5. Nous n’avons qu’à le choisir parmi les indicateurs disponibles. . Voici comment l'insérer dans le graphique :

Lors de l'ouverture du terminal MetaTrader 5 -> Insertion -> Indicateurs -> Oscillateurs -> Relative Vigor Index

Insertion du RVI

Après avoir appuyé sur le Relative Vigor Index, la fenêtre de ses paramètres est affichée :

Paramètres RVI

1- Détermine la période.

2- Détermine la couleur de la ligne RVI.

3- Détermine le style de la ligne RVI.

4- Détermine l'épaisseur de la ligne RVI.

5- Détermine la couleur de la ligne de signal.

6- Détermine le style de la ligne de signal.

7- Détermine l'épaisseur de la ligne de signal.

Après avoir défini tous les paramètres, l’indicateur ressemblera à celui-ci :

RVI attaché

Comme nous pouvons le voir dans le graphique précédent, l'indicateur RVI est attaché au graphique et comporte 2 lignes oscillant autour du niveau zéro.


Stratégie Relative Vigor Index

Après avoir appris le concept principal du RVI, nous apprendrons à l'utiliser en fonction de son concept principal au travers des stratégies simples. J’insiste encore ici : vous devez vous assurer de tester toute stratégie avant de l'utiliser sur votre compte réel pour être sûr qu'elle est adaptée à votre trading et qu’elle est rentable. Le concept principal ici est de partager des stratégies simples à des fins éducatives uniquement. Il est donc normal que vous constatiez qu'ils peuvent avoir besoin d'optimisations.

  • 1ère stratégie : Croisement RVI - Tendance haussière :

Sur la base de cette stratégie, nous devons obtenir des signaux d'achat et de clôture pendant une tendance haussière selon une condition spécifique. Lorsque la valeur actuelle du RVI et la valeur actuelle du signal RVI sont supérieures 0, et que la valeur actuelle du RVI est supérieure à la valeur actuelle du signal RVI, ce sera un signal d'achat. Inversement, lorsque la valeur actuelle du RVI et la valeur actuelle du signal RVI sont inférieures à 0, et que la valeur actuelle du RVI est inférieure à la valeur actuelle du signal RVI, ce sera un signal de clôture.

Plus simplement :

Valeur RVI > 0 et valeur du signal RVI > 0 et valeur RVI > valeur du signal RVI --> achat

Valeur RVI < 0 et valeur du signal RVI < 0 et valeur RVI < valeur du signal RVI --> clôture

  • 2ème stratégie : Croisement RVI – Tendance baissière :

Sur la base de cette stratégie, nous devons obtenir les signaux opposés de la précédente stratégie RVI Croisement - Tendance haussière, car nous devons obtenir des signaux de vente et de couverture. Lorsque la valeur actuelle du RVI et la valeur actuelle du signal RVI sont inférieures à 0, et que la valeur actuelle du RVI est inférieure à la valeur actuelle du signal RVI, il s'agira d'un signal court. Inversement, lorsque la valeur actuelle du RVI et la valeur actuelle du signal RVI sont supérieures à 0, et que la valeur actuelle du RVI est supérieure à la valeur actuelle du signal RVI, il s'agira d'un signal de couverture.

Plus simplement :

Valeur RVI < 0 et valeur du signal RVI < 0 et valeur RVI < valeur du signal RVI --> court

Valeur RVI > 0 et valeur du signal RVI > 0 et valeur RVI > valeur du signal RVI --> couverture 

  • 3ème stratégie : Croisement RVI et MA :

Sur la base de cette stratégie, nous devons obtenir des signaux d'achat et de vente en fonction de conditions spécifiques. Nous devons obtenir un signal d'achat lorsque le cours de clôture est supérieur à la moyenne mobile sur 100 périodes et que la valeur actuelle du RVI est supérieure à la valeur actuelle du signal RVI. Dans l'autre scénario, nous devons obtenir un signal de vente lorsque le cours de clôture est inférieur à la moyenne mobile sur 100 périodes et que la valeur actuelle du RVI est inférieure à la valeur actuelle du signal RVI.

Plus simplement :

Cours de clôture > Moyenne mobile 100- et valeur RVI > valeur du signal RVI --> achat

Cours de clôture < Moyenne mobile 100- et valeur RVI < valeur du signal RVI --> vente


Plan de la stratégie Relative Vigor Index

Après avoir appris comment utiliser le RVI grâce à une stratégie, nous allons créer un plan étape par étape pour chaque stratégie afin de nous aider à créer un système de trading en douceur.

  • 1ère stratégie : Croisement RVI - Tendance haussière :

Selon cette stratégie, nous devons créer un système de trading qui donne des signaux d'achat et de clôture pendant la tendance haussière en vérifiant en permanence les valeurs suivantes :

  • La valeur RVI actuelle
  • La valeur actuelle du signal RVI
  • Le niveau 0 de l'indicateur RVI

Si la valeur actuelle du RVI est supérieure au niveau 0, que la valeur actuelle du signal RVI est supérieure au niveau zéro et que la valeur actuelle du RVI est supérieure à la valeur actuelle du signal RVI, nous avons besoin que le système de trading renvoie les valeurs suivantes sous forme de commentaire sur le graphique :

  • Signal d’Achat
  • Valeur du Relative Vigor Index
  • Valeur du signal RVI

Dans l'autre scénario, si la valeur actuelle du RVI est inférieure à 0, que la valeur actuelle du signal RVI est inférieure à 0 et que la valeur actuelle du RVI est inférieure à la valeur actuelle du signal RVI, le système de trading renvoie les valeurs suivantes en commentaire sur le graphique :

  • Signal de clôture
  • Valeur du Relative Vigor Index
  • Valeur du signal RVI

Voici le plan étape par étape de cette stratégie :

Croisement RVI - Plan U

  • 2ème stratégie : Croisement RVI – Tendance baissière :

Selon cette stratégie, nous devons créer un système de trading capable de nous donner des signaux de vente à découvert et de couverture pendant la tendance baissière en vérifiant continuellement les mêmes valeurs de la stratégie précédente :

  • La valeur RVI actuelle
  • La valeur actuelle du signal RVI
  • Le niveau 0 de l'indicateur RVI

Mais les conditions seront légèrement différentes selon les signaux souhaités. Si la valeur actuelle du RVI et la valeur actuelle du signal RVI sont inférieures à 0, que la valeur du RVI est inférieure à la valeur du signal RVI, le système de trading doit renvoyer les valeurs suivantes sous la forme d’un commentaire sur le graphique :

  • Signal court
  • Valeur du Relative Vigor Index
  • Valeur du signal RVI

D'autre part, si la valeur actuelle du RVI et la valeur actuelle du signal RVI sont supérieures à 0, et que la valeur du RVI est supérieure à la valeur du signal RVI, le système de trading doit renvoyer les valeurs suivantes sous forme de commentaire sur le graphique :

  • Couverture
  • Valeur du Relative Vigor Index
  • Valeur du signal RVI

Voici le modèle de ce système de trading :

Croisement RVI - Plan D

  • 3ème stratégie : Croisement RVI et MA

Selon cette stratégie, nous devons créer un système de trading qui donne des signaux d'achat et de vente en vérifiant en permanence les valeurs suivantes :

  • Le cours de clôture
  • La moyenne mobile (MA) sur 100 périodes
  • La valeur RVI actuelle
  • La valeur actuelle du signal RVI

Si le cours de clôture est supérieur à la MA sur 100 périodes et que la valeur actuelle du RVI est supérieure à la valeur actuelle du signal RVI, le système de trading doit renvoyer les valeurs suivantes sous forme de commentaire sur le graphique :

  • Signal d’Achat
  • Prix de clôture
  • Valeur de la MA
  • Valeur du Relative Vigor Index
  • Valeur du signal RVI

D'autre part, si le cours de clôture est inférieur à la MA sur 100 périodes et que la valeur actuelle du RVI est inférieure à la valeur actuelle du signal RVI, le système de trading doit renvoyer les valeurs suivantes sous forme de commentaire sur le graphique :

  • Signal de Vente
  • Prix de clôture
  • Valeur de la MA
  • Valeur du Relative Vigor Index
  • Valeur du signal RVI

Voici le plan de cette stratégie :

Plan de Croisement RVI, MA

Système de trading Relative Vigor Index

Après avoir appris à utiliser le RVI à travers des stratégies simples et créé un plan étape par étape pour chacune, nous allons maintenant créer un système de trading pour chaque stratégie. Tout d’abord, nous allons créer un système de trading simple qui renvoie la valeur actuelle du RVI sous forme de commentaire sur le graphique. Ce qui suit est le code permettant de créer ce système étape par étape :

Création de 2 tableaux pour le RVI et le signal RVI d’éléments de type ’double’ :

   double rviArray[];
   double rviSignalArray[];

Définition de l'indicateur AS_SERIES sur les tableaux pour renvoyer vrai ou faux qui est une valeur booléenne à l'aide de la fonction "ArraySetAsSeries" :

   ArraySetAsSeries(rviArray,true);
   ArraySetAsSeries(rviSignalArray,true);

Définition du RVI à l'aide de la fonction "iRVI" qui renvoie le handle de l'indicateur Relative Vigor Index. Ses paramètres sont :

  • symbol : pour déterminer le nom du symbole, nous utiliserons _Symbol pour utiliser le symbole actuel. 
  • period : pour définir la période utilisable, nous utiliserons _period pour appliquer la période actuelle. 
  •  ma_period : pour définir la période de la moyenne, nous utiliserons 10.
int rviDef = iRVI(_Symbol,_Period,10);

Récupération des données du buffer de l'indicateur RVI en utilisant la fonction "CopyBuffer". Ses paramètres sont : 

  • Indicator_handle : nous utiliserons rviDef correspondant au handle de l'indicateur prédéfini.
  • buffer_num : pour déterminer le numéro du buffer de l'indicateur, nous utiliserons 0 et 1.
  • start_pos : pour déterminer la position de départ, nous utiliserons 0.
  • count : pour déterminer le nombre d’éléments à copier, nous utiliserons 3.
  • buffer[] : pour déterminer le tableau cible de la copie, nous utiliserons rviArray puis rviSignalArray.
   CopyBuffer(rviDef,0,0,3,rviArray);
   CopyBuffer(rviDef,1,0,3,rviSignalArray);

Définition des valeurs du RVI et du signal RVI en utilisant la fonction "NormalizeDouble" pour renvoyer une valeur de type double. Ses paramètres sont :

  • value : pour déterminer le nombre à normaliser. Nous utiliserons rviArray[0] puis rviSignalArray[0].
  • digits : pour déterminer le nombre de chiffres après la virgule. Nous utiliserons 3.
   double rviVal = NormalizeDouble(rviArray[0],3);
   double rviSignalVal = NormalizeDouble(rviSignalArray[0],3);

Utilisation de la fonction "comment" pour renvoyer la valeur de l'indicateur RVI actuel sous forme de commentaire sur le graphique.

   Comment("Relative Vigor Index Value is ",rviVal,"\n",
           "RVI Signal Value is ",rviSignalVal);

Voici le code complet :

//+------------------------------------------------------------------+
//|                                                   Simple RVI.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()
  {
   double rviArray[];
   double rviSignalArray[];

   ArraySetAsSeries(rviArray,true);
   ArraySetAsSeries(rviSignalArray,true);

   int rviDef = iRVI(_Symbol,_Period,10);

   CopyBuffer(rviDef,0,0,3,rviArray);
   CopyBuffer(rviDef,1,0,3,rviSignalArray);

   double rviVal = NormalizeDouble(rviArray[0],3);
   double rviSignalVal = NormalizeDouble(rviSignalArray[0],3);

   Comment("Relative Vigor Index Value is ",rviVal,"\n",
           "RVI Signal Value is ",rviSignalVal);

  }
//+------------------------------------------------------------------+

Après avoir compilé ce code, nous trouverons l'expert dans la fenêtre du Navigateur comme suit :

RVI dans le Navigateur

En double-cliquant sur l'expert pour l'exécuter dans le terminal de trading, la fenêtre suivante est affichée :

Fenêtre RVI Simple

En appuyant sur "OK" après avoir coché le paramètre "Autoriser le Trading Algorithmique", l'expert est attaché au graphique comme suit :

RVI Simple attaché

Nous sommes désormais prêts à générer des signaux basés sur ce système de trading. Nous obtiendrons donc un signal identique à celui-ci :

Signal RVI Simple

Comme nous pouvons le voir dans le coin supérieur gauche du graphique, nous avons un commentaire avec la valeur RVI actuelle.

  • 1ère stratégie : Croisement RVI - Tendance haussière :

Voici le code complet permettant de créer un système de trading basé sur cette stratégie :

//+------------------------------------------------------------------+
//|                                      RVI Crossover - 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()
  {
   double rviArray[];
   double rviSignalArray[];

   ArraySetAsSeries(rviArray,true);
   ArraySetAsSeries(rviSignalArray,true);

   int rviDef = iRVI(_Symbol,_Period,10);

   CopyBuffer(rviDef,0,0,3,rviArray);
   CopyBuffer(rviDef,1,0,3,rviSignalArray);

   double rviVal = NormalizeDouble(rviArray[0],3);
   double rviSignalVal = NormalizeDouble(rviSignalArray[0],3);

   if(rviVal>0 && rviSignalVal>0 && rviVal>rviSignalVal)
     {
      Comment("Buy Signal","\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }
   if(rviVal<0 && rviSignalVal<0 && rviVal<rviSignalVal)
     {
      Comment("Close","\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }


  }
//+------------------------------------------------------------------+

Différences dans ce code

Conditions de la stratégie :

En cas de signal d'achat

   if(rviVal>0 && rviSignalVal>0 && rviVal>rviSignalVal)
     {
      Comment("Buy Signal","\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }

En cas de fermeture

   if(rviVal<0 && rviSignalVal<0 && rviVal<rviSignalVal)
     {
      Comment("Close","\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }

Après avoir compilé le code et l'avoir exécuté dans le terminal de trading comme nous l’avons vu pour le système de trading simple RVI, l'expert est attaché au graphique comme suit :

Croisement RVI - U attaché

Nous pouvons ensuite obtenir les signaux souhaités basés sur ce système de trading comme suit :

En cas de signal d'achat :

 Croisement RVI - U - signal d'achat

Comme nous pouvons le voir sur le graphique dans le coin supérieur gauche, nous avons reçu un signal avec les valeurs suivantes :

  • Signal d’Achat
  • Valeur du Relative Vigor Index
  • Valeur du signal RVI

En cas de signal de clôture :

 Croisement RVI - U - signal de clôture

Comme nous pouvons le voir sur le graphique dans le coin supérieur gauche, nous avons reçu un signal avec les valeurs suivantes :

  • Clôture
  • Valeur du Relative Vigor Index
  • Valeur du signal RVI

Il est clair que ce signal est celui dont nous avons besoin en fonction de notre stratégie de trading et de ses conditions pendant la tendance haussière.

  • 2ème stratégie : Croisement RVI – Tendance baissière :

Voici le code complet pour créer un système de trading pour cette stratégie :

//+------------------------------------------------------------------+
//|                                    RVI Crossover - 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()
  {
   double rviArray[];
   double rviSignalArray[];

   ArraySetAsSeries(rviArray,true);
   ArraySetAsSeries(rviSignalArray,true);

   int rviDef = iRVI(_Symbol,_Period,10);

   CopyBuffer(rviDef,0,0,3,rviArray);
   CopyBuffer(rviDef,1,0,3,rviSignalArray);

   double rviVal = NormalizeDouble(rviArray[0],3);
   double rviSignalVal = NormalizeDouble(rviSignalArray[0],3);

   if(rviVal<0 && rviSignalVal<0 && rviVal<rviSignalVal)
     {
      Comment("Short Signal","\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }
   if(rviVal>0 && rviSignalVal>0 && rviVal>rviSignalVal)
     {
      Comment("Cover","\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }
  }
//+------------------------------------------------------------------+  

Différences dans ce code

Conditions de la stratégie :

En cas de signal court

   if(rviVal<0 && rviSignalVal<0 && rviVal<rviSignalVal)
     {
      Comment("Short Signal","\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }

En cas de couverture

   if(rviVal>0 && rviSignalVal>0 && rviVal>rviSignalVal)
     {
      Comment("Cover","\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }

Après avoir compilé et exécuté ce code comme nous l’avons appris précédemment, l'expert est attaché au graphique comme suit :

Croisement RVI - D attaché

Nous sommes maintenant prêts à recevoir des signaux basés sur cette stratégie et sur ce système de trading. Voici des exemples de signaux issus des tests :

En cas de signal court :

Croisement RVI - D - signal court

Comme nous pouvons le voir sur le graphique dans le coin supérieur gauche, nous avons reçu un signal avec les valeurs suivantes :

  • Signal court
  • Valeur du Relative Vigor Index
  • Valeur du signal RVI 

En cas de couverture :

Croisement RVI - D - signal de couverture

Comme nous pouvons le voir, nous avons un signal avec les valeurs suivantes :

  • Couverture
  • Valeur du Relative Vigor Index
  • Valeur du signal RVI

Nous avons maintenant créé un système de trading basé sur la stratégie Croisement RVI - Tendance baissière pour générer des signaux pendant la tendance baissière.

  • 3ème stratégie : Croisement RVI et MA :

Voici le code complet pour créer un système de trading pour cette stratégie :

//+------------------------------------------------------------------+
//|                                           RVI & MA Crossover.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()
  {
   MqlRates pArray[];
   double maArray[];
   double rviArray[];
   double rviSignalArray[];

   int Data=CopyRates(_Symbol,_Period,0,1,pArray);
   ArraySetAsSeries(maArray,true);
   ArraySetAsSeries(rviArray,true);
   ArraySetAsSeries(rviSignalArray,true);

   int rviDef = iRVI(_Symbol,_Period,10);
   int maDef = iMA(_Symbol,_Period,100,0,MODE_EMA,PRICE_CLOSE);

   CopyBuffer(rviDef,0,0,3,rviArray);
   CopyBuffer(rviDef,1,0,3,rviSignalArray);
   CopyBuffer(maDef,0,0,3,maArray);

   double rviVal = NormalizeDouble(rviArray[0],3);
   double rviSignalVal = NormalizeDouble(rviSignalArray[0],3);
   double maVal = NormalizeDouble(maArray[0],3);

   if(pArray[0].close>maVal && rviVal>rviSignalVal)
     {
      Comment("Buy Signal","\n",
              "Closing price is ",pArray[0].close,"\n",
              "MA Value is ",maVal,"\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }
   if(pArray[0].close<maVal && rviVal<rviSignalVal)
     {
      Comment("Sell Signal","\n",
              "Closing price is ",pArray[0].close,"\n",
              "MA Value is ",maVal,"\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }


  }
//+------------------------------------------------------------------+

Différences dans ce code

Création de 4 tableaux pArray, maArray, rviArray et rviSignalArray. Ils utiliseront des éléments de type ’double’, sauf pArray, qui utilisera des éléments de type MqlRates pour stocker les informations sur les prix, les volumes et les spreads.

   MqlRates pArray[];
   double maArray[];
   double rviArray[];
   double rviSignalArray[];

Définition de l'indicateur AS_SERIES sur les tableaux pour renvoyer true ou false à l'aide de la fonction "ArraySetAsSeries". Définition des données à l'aide de la fonction "CopyRates" pour obtenir les données historiques de la structure MqlRates. Ses paramètres sont :

  • symbol_name : le nom du symbole, nous utiliserons _Symbol pour l’appliquer au symbole actuel.
  • timeframe : la période, nous utiliserons _Period pour l’appliquer sur la période en cours.
  • start_pos : la position de départ, nous utiliserons 0. 
  • count : le nombre de données à copier, nous utiliserons 1.
  • rate_array[] : le tableau cible de la copie, nous utiliserons pArray.
   int Data=CopyRates(_Symbol,_Period,0,1,pArray);
   ArraySetAsSeries(maArray,true);
   ArraySetAsSeries(rviArray,true);
   ArraySetAsSeries(rviSignalArray,true);

Définition du RVI en utilisant la fonction iRVI et de la Moyenne Mobile en utilisant la fonction iMA pour obtenir un handle sur l'indicateur de moyenne mobile. Ses paramètres sont :

  • symbol : le nom du symbole, nous utiliserons _Symbol 
  • période : la période, nous utiliserons _période
  • ma_period : la période de la moyenne mobile, nous utiliserons 100 
  • ma_shift : le décalage horizontal, on utilisera 0 
  • ma_method : le type de moyenne mobile, nous utiliserons une moyenne mobile exponentielle 
  • apply_price : le type de prix, nous utiliserons le cours de clôture 
   int rviDef = iRVI(_Symbol,_Period,10);
   int maDef = iMA(_Symbol,_Period,100,0,MODE_EMA,PRICE_CLOSE);

Récupération des données du buffer des indicateurs RVI et MA en utilisant la fonction "CopyBuffer".

   CopyBuffer(rviDef,0,0,3,rviArray);
   CopyBuffer(rviDef,1,0,3,rviSignalArray);
   CopyBuffer(maDef,0,0,3,maArray);

Définition des valeurs du RVI, du signal RVI et de la valeur de la MM à l'aide de la fonction NormalizeDouble.

   double rviVal = NormalizeDouble(rviArray[0],3);
   double rviSignalVal = NormalizeDouble(rviSignalArray[0],3);
   double maVal = NormalizeDouble(maArray[0],3);

Conditions de la stratégie :

En cas de signal d'achat

   if(pArray[0].close>maVal && rviVal>rviSignalVal)
     {
      Comment("Buy Signal","\n",
              "Closing price is ",pArray[0].close,"\n",
              "MA Value is ",maVal,"\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }

En cas de signal de vente

   if(pArray[0].close<maVal && rviVal<rviSignalVal)
     {
      Comment("Sell Signal","\n",
              "Closing price is ",pArray[0].close,"\n",
              "MA Value is ",maVal,"\n",
              "Relative Vigor Index Value is ",rviVal,"\n",
              "RVI Signal Value is ",rviSignalVal);
     }

Après avoir compilé ce code et exécuté l'expert dans le terminal, il est attaché au graphique comme suit :

Croisement RVI, MA attaché

Nous pouvons maintenant obtenir des signaux générés par ce système de trading, comme dans les exemples de tests suivants.

En cas de signal d'achat :

 Croisement RVI, MA - signal d'achat

Comme nous pouvons le voir dans le graphique précédent dans le coin supérieur gauche, nous avons un signal avec les valeurs suivantes :

  • Signal d’Achat
  • Prix de clôture
  • Valeur de la MA
  • Valeur du Relative Vigor Index
  • Valeur du signal RVI

En cas de signal de vente :

Croisement RVI, MA - signal de vente

Nous avons un signal avec les valeurs suivantes :

  • Signal de Vente
  • Prix de clôture
  • Valeur de la MA
  • Valeur du Relative Vigor Index
  • Valeur du signal RVI

Nous avons désormais créé un système de trading pour chaque stratégie mentionnée pour générer un signal automatisé sur la base de leurs conditions.


Conclusion

Après avoir parcouru toutes les rubriques de cet article, nous avons compris cet indicateur en détail. Nous avons appris ce que c'est, ce qu'il mesure et comment le calculer manuellement pour comprendre son concept principal. Nous avons appris à l'utiliser à travers 3 stratégies simples :

  • Croisement RVI - Tendance haussière : pour générer des signaux d'achat et de clôture pendant la tendance haussière.
  • Croisement RVI - Tendance baissière : pour générer des signaux de vente et de couverture pendant la tendance baissière.
  • Croisement RVI & MA : pour générer des signaux d'achat et de vente basés sur une technique de croisement spécifique.

Nous avons conçu un plan étape par étape pour chaque stratégie afin de nous aider à prendre des positions de façon fluide et facilement. Nous avons créé un système de trading pour chacune des stratégies mentionnées pour générer des signaux automatiques après les avoir exécutés dans MetaTrader 5.

J'espère que vous avez essayé d'appliquer ce que vous avez appris par vous-même pour tirer le meilleur parti de cet article et développer vos compétences en programmation. J'espère également que vous avez trouvé cet article utile pour améliorer vos résultats de trading et obtenir des informations utiles liées au sujet de cet article. Si vous souhaitez lire d'autres articles similaires pour apprendre à concevoir un système de trading basé sur les indicateurs techniques les plus populaires, vous pouvez lire mes autres articles de cette série.

Traduit de l’anglais par MetaQuotes Ltd.
Article original : https://www.mql5.com/en/articles/11425

Apprenez à concevoir un système de trading basé sur l’Awesome Oscillator Apprenez à concevoir un système de trading basé sur l’Awesome Oscillator
Dans ce nouvel article de notre série, nous découvrirons un nouvel outil technique qui peut être utile dans notre trading. Il s’agit de l’indicateur Awesome Oscillator (AO). Nous apprendrons comment concevoir un système de trading basé sur cet indicateur.
Algorithmes d'optimisation de la population : Recherche en Banc de Poisson - Fish School Search (FSS) Algorithmes d'optimisation de la population : Recherche en Banc de Poisson - Fish School Search (FSS)
Le Fish School Search (FSS) est un nouvel algorithme d'optimisation inspiré du comportement des poissons dans un banc, dont la plupart (jusqu'à 80%) nagent au sein d'une communauté organisée de parents. Il a été prouvé que les agrégations de poissons jouent un rôle important dans l'efficacité de la recherche de nourriture et dans la protection contre les prédateurs.
Développer un Expert Advisor de trading à partir de zéro (Partie 22) : Nouveau système d’ordres (V) Développer un Expert Advisor de trading à partir de zéro (Partie 22) : Nouveau système d’ordres (V)
Nous allons continuer aujourd’hui à développer le nouveau système d’ordres. Il n'est pas facile de mettre en œuvre un nouveau système, car nous rencontrons souvent des problèmes qui compliquent considérablement le processus. Lorsque ces problèmes apparaissent, nous devons nous arrêter et réanalyser la direction dans laquelle nous avançons.
Lancement de MetaTrader VPS pour la première fois : Instructions étape par étape Lancement de MetaTrader VPS pour la première fois : Instructions étape par étape
Tous ceux qui utilisent des robots de trading ou des abonnements à des signaux reconnaissent tôt ou tard la nécessité de louer un serveur d'hébergement fiable 24 heures sur 24 et 7 jours sur 7 pour leur plateforme de trading. Nous recommandons l'utilisation de MetaTrader VPS pour plusieurs raisons. Vous pouvez facilement payer le service et gérer l'abonnement par le biais de votre compte MQL5.community. S