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

Apprenez à concevoir un système de trading basé sur l’Awesome Oscillator

MetaTrader 5Trading | 25 octobre 2023, 09:01
1 204 1
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

Introduction

Voici un nouvel article de notre série sur l'apprentissage de la conception d'un système de trading basé sur les indicateurs techniques les plus populaires pour les débutants. Nous apprendrons un nouvel outil technique dans cet article. Il s’agit de l'indicateur Awesome Oscillator. Nous le verrons en détail pour savoir ce que c'est, ce qu'il mesure et comment l'utiliser avec des stratégies simples, et enfin comment créer un système de trading basé sur ces stratégies mentionnées.

Nous aborderons cet indicateur en détail comme mentionné au travers des sujets suivants :

  1. Définition de l’Awesome Oscillator
  2. Stratégie Awesome Oscillator
  3. Plan de la stratégie Awesome Oscillator
  4. Système de trading Awesome Oscillator
  5. Conclusion

Nous utiliserons le langage MQL 5 (MetaQuotes Language 5) pour écrire le code, et le terminal de trading MetaTrader 5 pour exécuter notre système de trading. Le MQL5 est intégré à MetaTrader 5. Si vous souhaitez savoir comment les obtenir et les utiliser, vous pouvez lire la rubrique Écrire du code MQL5 dans MetaEditor d'un article précédent. Je vous conseille de télécharger et d'essayer d'appliquer ce que vous avez appris par vous-même pour pratiquer et améliorer vos compétences en codage.

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 de l’Awesome Oscillator

Dans cette rubrique, nous découvrirons plus en détail l’indicateur Awesome Oscillator (AO). L'AO a été développé par Bill Williams pour mesurer le momentum. Il peut être utilisé pour identifier qui est en contrôle ou qui a le pouvoir : les acheteurs ou les vendeurs. Il mesure cet élan (le momentum) en comparant l'élan des 5 dernières barres avec l'élan des 34 dernières barres sur une période plus longue. En d'autres termes, il compare l'élan récent avec l'élan d'une période plus longue. Lorsque nous obtiendrons la confirmation du signal de l’AO par un autre indicateur ou un autre outil technique, cela sera significatif et plus important. Il vaudra mieux utiliser l’AO accompagné d’un autre outil technique. Nous allons voir comment calculer cet indicateur manuellement pour mieux le comprendre et approfondir notre compréhension en suivant les étapes suivantes :

L'AO est la différence entre la moyenne mobile simple sur 5 périodes et la moyenne mobile simple sur 34 périodes. Nous utiliserons le prix médian dans le calcul de l’AO :

PRIX MÉDIAN = (PLUS HAUT + PLUS BAS) / 2 

AO = SMA (PRIX MÉDIAN, 5) - SMA (PRIX MÉDIAN, 34)

Avec :

PRIX MEDIAN = le prix médian de l'instrument

PLUS HAUT = le prix le plus élevé

PLUS BAS = le prix le plus bas

AO = la valeur de l'Awesome Oscillator

SMA = moyenne mobile simple

Nous n'avons plus besoin de le calculer manuellement car il est disponible dans MetaTrader 5 en tant qu'indicateur technique intégré. Il suffit de le choisir sur le terminal de trading pour qu'il apparaisse sur le graphique.

Voici comment l'insérer dans le graphique. Dans le terminal de trading MetaTrader 5, allez dans le menu Insertion --> Indicateurs --> Bill Williams --> Awesome Oscillator

Insertion de l’AO

Les paramètres de l’AO sont alors affichés :

Paramètres de l’AO

Avec :

1 - la couleur des valeurs en hausse

2 - l'épaisseur de l'histogramme

3 - la couleur des valeurs en baisse

Après avoir déterminé ces paramètres, l'indicateur est inséré dans le graphique comme suit :

 Indicateur AO inséré

Comme nous pouvons le voir dans le graphique précédent, dans la partie inférieure du graphique, l'indicateur contient des barres d'histogramme oscillant autour de 0 — c'est la mesure de l'élan.


Stratégie Awesome Oscillator

Dans cette section, nous allons apprendre comment utiliser l'indicateur AO au travers de quelques stratégies simples à des fins éducatives uniquement basées sur le concept principal derrière l'indicateur. Vous devez tester n'importe quelle stratégie avant de les utiliser sur votre compte réel pour vous assurer qu'elle est utile, rentable et adaptée à votre trading. En fonction de cela, vous constaterez peut-être que les stratégies mentionnées doivent être optimisées. Leur objectif principal est uniquement destiné à l'éducation. Il sera préférable d'utiliser cet indicateur avec un autre indicateur technique pour obtenir des résultats plus efficaces. Soit dit en passant, c'est l'une des caractéristiques les plus importantes et les plus efficaces de l'analyse technique : nous pouvons utiliser de nombreux outils pour examiner et évaluer l'instrument sous-jacent sous différents angles, ce qui nous aidera à prendre des décisions d'investissement ou de trading appropriées pour obtenir de bons résultats. Dans cet article, nous combinerons un autre indicateur technique, la moyenne mobile, comme nous le verrons pour obtenir des signaux d'achat ou de vente plus efficaces.

    Première stratégie : Croisement AO Zéro

      Sur la base de cette stratégie, nous devons obtenir un signal haussier ou baissier basé sur le croisement entre la valeur actuelle de l'AO et le niveau 0. Si la valeur actuelle de l’AO est supérieure au niveau 0, ce sera un signal haussier. Si la valeur actuelle de l’AO est inférieure au niveau 0, ce sera un signal baissier.

      Plus simplement :

      AO actuel > 0 --> Haussier

      AO actuel < 0 --> Baissier

        Deuxième stratégie : Force de l’AO

          Selon cette stratégie, nous devons obtenir un signal de la force du mouvement de l’AO en fonction de la valeur actuelle de l’AO et de la moyenne sur 5 périodes des dernières valeurs de l’AO. Si la valeur actuelle de l'AO est supérieure à la moyenne mobile, ce sera un signal de la force du mouvement de l'AO. Si la valeur actuelle de l'AO est inférieure à la moyenne mobile, ce sera un signal de faiblesse du mouvement de l'AO.

          Plus simplement :

          AO actuel > MOYENNE-5 périodes de l’AO --> AO fort

          AO actuel < MOYENNE-5 périodes de l'AO --> AO faible

            3ème stratégie : Stratégie AO et MA

              Selon cette stratégie, nous devons obtenir des signaux d'achat et de vente en fonction de la position de la valeur actuelle de l'AO par rapport au niveau 0, en plus de la position du cours de clôture et de la moyenne mobile exponentielle sur 50 périodes. Si la valeur actuelle de l'AO est supérieure à 0 et que le cours de clôture est supérieur à l'EMA sur 50 périodes, ce sera un signal d'achat. Si la valeur actuelle de l'AO est inférieure à 0 et que le prix de clôture est inférieur à l'EMA, ce sera un signal de vente.

              Plus simplement :

              AO actuel > 0 et clôture > EMA-50 périodes --> signal d'achat

              AO actuel < 0 et clôture < EMA-50 périodes --> signal de vente

              Plan de la stratégie Awesome Oscillator

              Nous concevrons un plan étape par étape pour chaque stratégie afin de nous aider à créer facilement notre système de trading en organisant nos idées.

                Première stratégie : Croisement AO Zéro

                  Selon cette stratégie, nous devons créer un système de trading capable de générer des signaux haussiers ou baissiers basés sur la comparaison continue de 2 valeurs. Il s'agit de la valeur actuelle de l’AO et du niveau 0 pour déterminer la position de chaque valeur et décider du statut du marché. Si la valeur de l’AO est supérieure au niveau 0, le système de trading doit générer un commentaire sur le graphique avec les valeurs suivantes :

                  • Haussier
                  • La valeur de l’AO est n

                  Dans l'autre scénario, si la valeur actuelle de l'AO est inférieure à 0, le système de trading doit renvoyer un commentaire sur le graphique avec les valeurs suivantes :

                  • Baissier
                  • La valeur de l’AO est n

                  Ce qui suit décrit étape par étape ce système de trading :

                  Plan du système de trading algorithmique 1

                    Deuxième stratégie : Force de l’AO

                      Selon cette stratégie, nous devons créer un système de trading pouvant être utilisé pour générer des signaux de la force du mouvement de l'AO basé sur une comparaison continue de 2 valeurs : la valeur actuelle de l'AO et la moyenne des 5 dernières valeurs de l'AO. Si la valeur actuelle de l’AO est supérieure à la Moyenne Mobile, le système de trading doit renvoyer un commentaire avec les valeurs suivantes (le signal et les valeurs qui ont été à l'origine de ce signal) :

                      • Le mouvement de l’AO est fort
                      • AO CurrVal : n
                      • AO FirstVal : n
                      • AO SecondVal : n
                      • AO ThirdVal : n
                      • AO FourthVal : n
                      • AO FifthVal : n
                      • AO AvgVal : n

                      Dans l'autre cas, si la valeur actuelle de l'AO est inférieur à la Moyenne Mobile, le système de trading doit renvoyer également les valeurs suivantes sous forme de commentaire :

                      • Le mouvement de l’AO est faible
                      • AO CurrVal : n
                      • AO FirstVal : n
                      • AO SecondVal : n
                      • AO ThirdVal : n
                      • AO FourthVal : n
                      • AO FifthVal : n
                      • AO AvgVal : n

                      Ce qui suit est le plan étape par étape de ce système de trading :

                       Plan du système de trading algorithmique 11

                        3ème stratégie : Stratégie AO et MA

                          Sur la base de cette stratégie, identique à celle que nous avons apprise dans la partie précédente, nous devons créer un système de trading pouvant être utilisé pour renvoyer un commentaire avec des signaux d'achat et de vente correspondants sur le graphique, basé sur une comparaison continue de 4 valeurs :

                          • L'AO actuel
                          • Le niveau zéro de l'indicateur AO
                          • Le cours de clôture
                          • la 50ème période de la MA

                          Si l'AO actuel est supérieur au niveau 0 et que le cours de clôture est supérieur à la MA sur 50 périodes, nous avons besoin que le système de trading renvoie les valeurs suivantes sous forme de commentaire sur le graphique :

                          • Acheter
                          • Le cours de clôture est n
                          • La valeur de l’AO est n
                          • La valeur MA est n

                          Dans l'autre scénario, si la valeur actuelle de l'AO est inférieure au niveau 0 et que le cours de clôture est inférieur à la MA sur 50 périodes, le système de trading doit renvoyer un commentaire sur le graphique avec les valeurs suivantes :

                          • Vendre
                          • Le cours de clôture est n
                          • La valeur de l’AO est n
                          • La valeur MA est n

                          Ce qui suit est le plan étape par étape de ce système de trading :

                          Plan du système de trading algorithmique 111

                          Système de trading Awesome Oscillator

                          Dans ce sujet, nous apprendrons la chose la plus intéressante dans cet article : nous créerons des systèmes de trading pour nos stratégies de trading mentionnées. Nous allons tout d’abord créer un système de trading simple qui générera un signal sous forme de commentaire sur le graphique avec la valeur actuelle de l'AO. Nous l'utiliserons comme base pour d'autres systèmes de trading.

                          Ce qui suit explique comment créer, étape par étape, un système de trading pour ce signal souhaité :

                          Création d'un tableau aoArray en utilisant la fonction "double" :

                          double aoArray[];

                          Définition de l'indicateur AS_SERIES sur le tableau aoArray pour renvoyer à l'aide de la fonction "ArraySetAsSeries". Ses paramètres sont :

                          • array[] : nous utiliserons aoArray.
                          • flag : Nous utiliserons "true" comme direction d'indexation du tableau.
                          ArraySetAsSeries(aoArray,true);

                          Définition de l'indicateur AO en utilisant la fonction "iAO" pour renvoyer le handle de l'indicateur Awesome Oscillator. Ses paramètres sont :

                          • symbol : nous utiliserons _Symbol pour appliquer le symbole courant.
                          • period : nous utiliserons _période pour appliquer la période en cours.
                          int aoDef = iAO(_Symbol,_Period);

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

                          • Indicator_handle : nous utiliserons aoDef du handle de l'indicateur.
                          • buffer_num : pour déterminer le numéro du buffer de l'indicateur, nous utiliserons 0.
                          • 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 aoArray.
                          CopyBuffer(aoDef,0,0,3,aoArray);

                          Définition de la valeur de l’AO après avoir créé une variable de type ’double’ pour aoVal et l'avoir normalisée à l'aide de "NormalizeDouble". Les paramètres de "NormalizeDouble" sont :

                          • valeur : nombre à normaliser. Nous utiliserons aoArray[0].
                          • digits : pour déterminer le nombre de chiffres après la virgule. Nous utiliserons 7.
                          double aoVal = NormalizeDouble(aoArray[0],7);

                          Renvoi d’un commentaire sur le graphique avec la valeur actuelle de l’AO en utilisant la fonction "Comment".

                          Comment("AO Value is ",aoVal);

                          Voici donc le code complet pour créer ce système de trading :

                          //+------------------------------------------------------------------+
                          //|                                                    Simple AO.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"
                          //+------------------------------------------------------------------+
                          //| Expert initialization function                                   |
                          //+------------------------------------------------------------------+
                            void OnTick()
                            {
                             double aoArray[];
                             ArraySetAsSeries(aoArray,true);
                             int aoDef = iAO(_Symbol,_Period);
                             CopyBuffer(aoDef,0,0,3,aoArray);
                             double aoVal = NormalizeDouble(aoArray[0],7);
                             Comment("AO Value is ",aoVal);
                            }
                          //+------------------------------------------------------------------+

                          Après avoir compilé ce code et être sûr qu'il n'y a pas d'erreurs, nous trouverons l'expert dans la fenêtre du Navigateur comme suit :

                          AO Simple dans le Navigateur

                          En glissant-déposant cet expert sur le graphique souhaité, la fenêtre de cet expert sera affichée, identique à la suivante :

                          Fenêtre de l’AO Simple

                          Après avoir coché la case « Autoriser le trading algorithmique » et appuyé sur « OK », l'expert sera attaché au graphique comme suit :

                          AO Simple attaché

                          Comme nous pouvons le voir sur le graphique dans le coin supérieur droit, l'expert est attaché. Nous sommes maintenant prêts à recevoir le signal souhaité, comme celui-ci :

                          Signal AO Simple

                          Comme nous pouvons le voir sur le graphique précédent, nous avons le signal souhaité de l'AO actuel sous forme de commentaire dans le coin supérieur gauche.

                            Première stratégie : Croisement AO Zéro

                              Nous allons créer un système de trading basé sur cette stratégie pour recevoir les signaux souhaités. Voici le code complet :

                              //+------------------------------------------------------------------+
                              //|                                            AO Zero 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()
                                {
                                 double aoArray[];
                                 ArraySetAsSeries(aoArray,true);
                                 int aoDef = iAO(_Symbol,_Period);
                                 CopyBuffer(aoDef,0,0,3,aoArray);
                                 double aoVal = NormalizeDouble(aoArray[0],7);
                                 if(aoVal > 0)
                                   {
                                    Comment("Bullish","\n"
                                            "AO Value is ",aoVal);
                                   }
                              
                                 if(aoVal < 0)
                                   {
                                    Comment("Bearish","\n"
                                            "AO Value is ",aoVal);
                                   }
                                }
                              //+------------------------------------------------------------------+

                              Différence dans ce code.

                              Conditions de cette stratégie,

                              En cas de hausse :

                                 if(aoVal > 0)
                                   {
                                    Comment("Bullish","\n"
                                            "AO Value is ",aoVal);
                                   }

                              En cas de baisse :

                                 if(aoVal < 0)
                                   {
                                    Comment("Bearish","\n"
                                            "AO Value is ",aoVal);
                                   }

                              Après avoir compilé ce code et être sûr qu'il n'y a pas d'erreurs, nous pourrons l'utiliser et l'attacher au graphique comme précédemment. Il sera donc attaché comme suit :

                              Croisement AO Zero attaché

                              Comme nous pouvons le voir sur le graphique que nous avons, l'expert est attaché au graphique et il apparaît dans le coin supérieur droit. Nous sommes maintenant prêts à recevoir les signaux souhaités.

                              En cas de signal haussier :

                              Croisement AO Zero - signal haussier

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

                              • Haussier
                              • Valeur actuelle de l'AO

                              En cas de signal baissier :

                              Croisement AO Zero - signal baissier

                              Comme on peut le voir sur le graphique précédent, nous avons un commentaire comme signal avec les valeurs suivantes :

                              • Baissier
                              • Valeur actuelle de l'AO

                              Nous avons ainsi obtenu les signaux souhaités basés sur cette stratégie, en cas de tendance haussière et baissière.

                                Deuxième stratégie : Force de l’AO

                                  Voici le code complet de ce système de trading :

                                  //+------------------------------------------------------------------+
                                  //|                                                  AO 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()
                                    {
                                     double aoArray[];
                                     ArraySetAsSeries(aoArray,true);
                                     int aoDef = iAO(_Symbol,_Period);
                                     CopyBuffer(aoDef,0,0,6,aoArray);
                                  
                                  
                                     double aoCurrVal = NormalizeDouble(aoArray[0],6);
                                     double aoFifthVal = NormalizeDouble(aoArray[1],6);
                                     double aoFourthVal = NormalizeDouble(aoArray[2],6);
                                     double aoThirdVal = NormalizeDouble(aoArray[3],6);
                                     double aoSecondVal = NormalizeDouble(aoArray[4],6);
                                     double aoFirstVal = NormalizeDouble(aoArray[5],6);
                                  
                                     double aoAvgVal = NormalizeDouble((aoFifthVal+aoFourthVal+aoThirdVal+aoSecondVal+aoFirstVal)/5,6);
                                  
                                     if(aoCurrVal > aoAvgVal)
                                       {
                                        Comment("AO Movement is strong","\n",
                                                "AO CurrVal : ",aoCurrVal,"\n",
                                                "AO FirstVal : ",aoFifthVal,"\n",
                                                "AO SecondVal : ",aoFourthVal,"\n",
                                                "AO ThirdVal : ",aoThirdVal,"\n",
                                                "AO FourthVal : ",aoSecondVal,"\n",
                                                "AO FifthVal : ",aoFirstVal,"\n",
                                                "AO AvgVal : ",aoAvgVal
                                               );
                                       }
                                  
                                     if(aoCurrVal < aoAvgVal)
                                       {
                                        Comment("AO Movement is Weak","\n",
                                                "AO CurrVal : ",aoCurrVal,"\n",
                                                "AO FirstVal : ",aoFifthVal,"\n",
                                                "AO SecondVal : ",aoFourthVal,"\n",
                                                "AO ThirdVal : ",aoThirdVal,"\n",
                                                "AO FourthVal : ",aoSecondVal,"\n",
                                                "AO FifthVal : ",aoFirstVal,"\n",
                                                "AO AvgVal : ",aoAvgVal
                                               );
                                       }
                                  
                                    }
                                  //+------------------------------------------------------------------+

                                  Voici les différences dans ce code :

                                  En utilisant la fonction "NormalizeDouble", nous définissons les valeurs suivantes à partir des 5 dernières valeurs de l’AO :

                                     double aoCurrVal = NormalizeDouble(aoArray[0],6);
                                     double aoFifthVal = NormalizeDouble(aoArray[1],6);
                                     double aoFourthVal = NormalizeDouble(aoArray[2],6);
                                     double aoThirdVal = NormalizeDouble(aoArray[3],6);
                                     double aoSecondVal = NormalizeDouble(aoArray[4],6);
                                     double aoFirstVal = NormalizeDouble(aoArray[5],6);

                                  Définition de la moyenne de 5 périodes de l'AO :

                                  double aoAvgVal = NormalizeDouble((aoFifthVal+aoFourthVal+aoThirdVal+aoSecondVal+aoFirstVal)/5,6);

                                  Conditions de cette stratégie.

                                  En cas de force du mouvement AO :

                                     if(aoCurrVal > aoAvgVal)
                                       {
                                        Comment("AO Movement is strong","\n",
                                                "AO CurrVal : ",aoCurrVal,"\n",
                                                "AO FirstVal : ",aoFifthVal,"\n",
                                                "AO SecondVal : ",aoFourthVal,"\n",
                                                "AO ThirdVal : ",aoThirdVal,"\n",
                                                "AO FourthVal : ",aoSecondVal,"\n",
                                                "AO FifthVal : ",aoFirstVal,"\n",
                                                "AO AvgVal : ",aoAvgVal
                                               );
                                       }

                                  En cas de faiblesse du mouvement AO :

                                     if(aoCurrVal < aoAvgVal)
                                       {
                                        Comment("AO Movement is Weak","\n",
                                                "AO CurrVal : ",aoCurrVal,"\n",
                                                "AO FirstVal : ",aoFifthVal,"\n",
                                                "AO SecondVal : ",aoFourthVal,"\n",
                                                "AO ThirdVal : ",aoThirdVal,"\n",
                                                "AO FourthVal : ",aoSecondVal,"\n",
                                                "AO FifthVal : ",aoFirstVal,"\n",
                                                "AO AvgVal : ",aoAvgVal
                                               );
                                       }

                                  Après avoir compilé, et s’être assuré qu'il n'y a pas d'erreurs, l’expert peut être attaché comme suit :

                                  Force AO attaché

                                  Comme nous pouvons le voir sur le graphique en haut à droite, l'expert est attaché.

                                  En cas de force :

                                  Force AO - signal fort

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

                                  • Le mouvement de l’AO est fort
                                  • AO CurrVal : n
                                  • AO FirstVal : n
                                  • AO SecondVal : n
                                  • AO ThirdVal : n
                                  • AO FourthVal : n
                                  • AO FifthVal : n
                                  • AO AvgVal : n

                                  En cas de faiblesse :

                                  Force AO - signal faible

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

                                  • Le mouvement de l’AO est faible
                                  • AO CurrVal : n
                                  • AO FirstVal : n
                                  • AO SecondVal : n
                                  • AO ThirdVal : n
                                  • AO FourthVal : n
                                  • AO FifthVal : n
                                  • AO AvgVal : n

                                  Nous avons maintenant obtenu les signaux souhaités basés sur le système de trading de cette stratégie.

                                    3ème stratégie : Stratégie AO et MA

                                      Ce qui suit est le code complet de ce système de trading :

                                      //+------------------------------------------------------------------+
                                      //|                                             AO & MA Strategy.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 aoArray[];
                                         double maArray[];
                                      
                                         int Data=CopyRates(_Symbol,_Period,0,1,pArray);
                                         ArraySetAsSeries(aoArray,true);
                                         ArraySetAsSeries(maArray,true);
                                         
                                         int aoDef = iAO(_Symbol,_Period);
                                         int maDef = iMA(_Symbol,_Period,50,0,MODE_EMA,PRICE_CLOSE);
                                      
                                         CopyBuffer(aoDef,0,0,3,aoArray);
                                         CopyBuffer(maDef,0,0,3,maArray);
                                      
                                         double closingPrice = pArray[0].close;
                                         double aoVal = NormalizeDouble(aoArray[0],7);
                                         double maVal = NormalizeDouble(maArray[0],7);
                                      
                                         if(aoVal > 0 && closingPrice > maVal)
                                           {
                                            Comment("Buy","\n"
                                                    "Closing Price is ",closingPrice,"\n",
                                                    "AO Value is ",aoVal,"\n",
                                                    "MA Value is ",maVal);
                                           }
                                      
                                         if(aoVal < 0 && closingPrice < maVal)
                                           {
                                            Comment("Sell","\n"
                                                    "Closing Price is ",closingPrice,"\n",
                                                    "AO Value is ",aoVal,"\n",
                                                    "MA Value is ",maVal);
                                           }
                                      
                                        }
                                      //+------------------------------------------------------------------+

                                      Différences dans ce code.

                                      Création de 3 tableaux pArray, aoArray et maArray. Nous utiliserons la fonction double comme précédemment, à l'exception de pArray por lequel nous utiliserons la fonction MqlRates pour stocker des informations sur le prix, le volume et le spread.

                                         MqlRates pArray[];
                                         double aoArray[];
                                         double maArray[];

                                      Définition de l'indicateur AS_SERIES sur des tableaux aoArray et maArray comme mentionné précédemment. 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 : Nous utiliserons _Symbol pour appliquer le symbole actuel.
                                      • timeframe : Nous utiliserons _Period pour appliquer la période en cours.
                                      • start_pos : pour déterminer la position de départ, nous utiliserons 0. 
                                      • count : pour déterminer le nombre de données à copier, nous utiliserons 1.
                                      • rate_array[] : pour déterminer le tableau cible de la copie, nous utiliserons pArray.
                                         int Data=CopyRates(_Symbol,_Period,0,1,pArray);
                                         ArraySetAsSeries(aoArray,true);
                                         ArraySetAsSeries(maArray,true);

                                      Définition de l'AO et de la MA :

                                      AO en utilisant la fonction "iOA" de la même manière que nous l'avons mentionné.

                                      MA en utilisant la fonction "iMA". Ses paramètres sont :

                                      • symbol : nous utiliserons _Symbol 
                                      • period : nous utiliserons _period
                                      • ma_period : pour déterminer la période de la moyenne mobile, on utilisera 50 
                                      • ma_shift : pour déterminer le décalage horizontal, on utilisera 0 
                                      • ma_method : pour déterminer le type de moyenne mobile, nous utiliserons la MA exponentielle 
                                      • apply_price : pour déterminer le type de prix utilisable, nous utiliserons le cours de clôture
                                         int aoDef = iAO(_Symbol,_Period);
                                         int maDef = iMA(_Symbol,_Period,50,0,MODE_EMA,PRICE_CLOSE);

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

                                         CopyBuffer(aoDef,0,0,3,aoArray);
                                         CopyBuffer(maDef,0,0,3,maArray);

                                      Définition du cours de clôture, aoArray et maArray.

                                         double closingPrice = pArray[0].close;
                                         double aoVal = NormalizeDouble(aoArray[0],7);
                                         double maVal = NormalizeDouble(maArray[0],7);

                                      Conditions de la stratégie.

                                      En cas de signal d'achat :

                                         if(aoVal > 0 && closingPrice > maVal)
                                           {
                                            Comment("Buy","\n"
                                                    "Closing Price is ",closingPrice,"\n",
                                                    "AO Value is ",aoVal,"\n",
                                                    "MA Value is ",maVal);
                                           }

                                      En cas de signal de vente :

                                         if(aoVal < 0 && closingPrice < maVal)
                                           {
                                            Comment("Sell","\n"
                                                    "Closing Price is ",closingPrice,"\n",
                                                    "AO Value is ",aoVal,"\n",
                                                    "MA Value is ",maVal);
                                           }

                                      Après avoir compilé ce code et l'avoir attaché, nous pouvons le voir comme suit :

                                       AO & MA attachés

                                      Comme nous pouvons le voir, nous avons l'indicateur attaché au graphique dans le coin supérieur gauche du graphique précédent. Nous sommes prêts à recevoir nos signaux.

                                      En cas de signal d'achat :

                                       AO & MA - signal d'achat

                                      Comme nous pouvons le voir, nous avons notre signal sous forme de commentaire dans le coin supérieur gauche avec les valeurs suivantes :

                                      • Acheter
                                      • Le cours de clôture est n
                                      • La valeur de l’AO est n
                                      • La valeur MA est n

                                      En cas de vente :

                                       AO & MA - signal de vente

                                      On peut voir le commentaire dans ce cas avec les valeurs suivantes de notre signal :

                                      • Vendre
                                      • Le cours de clôture est n
                                      • La valeur de l’AO est n
                                      • La valeur MA est n


                                      Conclusion

                                      Je suppose maintenant que vous avez compris l'indicateur Awesome Oscillator en détail, ce qu'est l'AO, ce qu'il mesure, comment nous pouvons le calculer manuellement et comment nous pouvons l'insérer dans le graphique à partir des indicateurs intégrés de MetaTrader 5. Nous avons également appris comment l'utiliser grâce à des stratégies simples basées sur son concept principal. Ces stratégies étaient les suivantes :

                                      • 1ère stratégie : Croisement AO Zero - pour obtenir des signaux haussiers ou baissiers basés sur les croisements avec le niveau 0.
                                      • 2ème stratégie : Force AO - pour obtenir un signal de la force du mouvement de l’AO en fonction de la position de la valeur actuelle de l’AO et de la moyenne de ses 5 dernières valeurs. 
                                      • 3ème stratégie : Stratégie AO & MA - pour obtenir des signaux d'achat ou de vente en fonction de la position actuelle de l'AO et du niveau 0, et de la position du prix de clôture et de l'EMA à 50 périodes.

                                      Après cela, nous avons conçu un plan étape par étape pour chaque stratégie mentionnée afin de créer un système de trading de manière simple, fluide et efficace après avoir organisé nos idées. Nous avons ensuite créé un système de trading pour chaque stratégie mentionnée afin d'obtenir des signaux d'automatisation après les avoir exécutés dans le terminal de trading MetaTrader 5.

                                      J'espère que vous avez essayé d'appliquer ce que vous avez appris par vous-même, car il s'agit d'une étape très importante dans tout processus d'apprentissage si nous devons développer et améliorer nos compétences. De plus, cela vous donnera plus d'informations sur ce que vous apprenez ou sur tout sujet connexe. . Je dois confirmer ici encore que vous devez tester toute stratégie mentionnée avant de l'utiliser pour vous assurer qu'elle convient à votre trading, car il n'y a rien qui convienne à tout le monde.

                                      J'espère que vous trouverez cet article utile pour votre trading et si vous souhaitez lire des articles similaires, vous pouvez lire mes autres articles de cette série sur l'apprentissage de la conception d'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/11468

                                      Fichiers joints |
                                      Simple_AO.mq5 (1.01 KB)
                                      AO_Strength.mq5 (2.07 KB)
                                      Derniers commentaires | Aller à la discussion (1)
                                      Khalid Akkoui
                                      Khalid Akkoui | 12 nov. 2023 à 01:54
                                      Jdbbi so ivdsa o ivevwojw
                                      .
                                      Joevvvce
                                      Knwvvijw.         Jdioke i.   Wow.   Wkkkkkw.    W 
                                      Hs9 


                                      Wifcw
                                      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.
                                      Apprenez à concevoir un système trading basé sur le Relative Vigor Index Apprenez à concevoir un système trading basé sur le Relative Vigor Index
                                      Un nouvel article de notre série sur la façon de concevoir un système de trading à l'aide de l'indicateur technique le plus populaire. Dans cet article, nous apprendrons comment procéder grâce à l’indicateur Relative Vigor Index.
                                      Développer un Expert Advisor de trading à partir de zéro (Partie 23) : Nouveau système d'ordres (VI) Développer un Expert Advisor de trading à partir de zéro (Partie 23) : Nouveau système d'ordres (VI)
                                      Nous allons rendre le système d’ordres plus flexible. Nous examinerons ici les modifications à apporter au code pour le rendre plus flexible, ce qui nous permettra de modifier les niveaux d'arrêt des positions beaucoup plus rapidement.
                                      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.