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

Apprendre à concevoir un système de trading basé sur les Fractales

MetaTrader 5Trading | 4 avril 2024, 10:38
305 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

Introduction

Voici un nouvel article avec un nouvel indicateur technique dans notre série. Nous apprendrons aujourd’hui comment concevoir un système de trading basé sur l'un des indicateurs techniques les plus populaires : l'indicateur Fractals. Nous l'apprendrons en détail à travers les rubriques suivantes :

  1. Définition des Fractales
  2. Stratégie Fractales
  3. Plan de la stratégie Fractales
  4. Système de trading Fractales
  5. Conclusion

Nous allons voir ce que c'est, ce qu'il mesure et comment le calculer manuellement pour comprendre son concept principal. Nous apprendrons comment le laisser jouer en notre faveur grâce à des stratégies de trading simples basées sur le concept de base de l'indicateur. Nous créerons ensuite un système de trading basé sur ces stratégies qui sera utilisé dans le terminal de trading MetaTrader 5 pour générer des signaux automatiques.

Nous utiliserons le langage MQL5 (MetaQuotes Language 5) intégré à l'IDE du terminal de trading MetaTrader 5 pour écrire le code. Si vous ne savez pas comment télécharger et utiliser MetaTrader 5 et MQL5, vous pouvez lire la section Ecrire du code MQL5 dans MetaEditorpour en savoir plus à ce sujet. Je vous conseille d’ailleurs d’essayer d’appliquer ce que vous avez appris par vous-même si vous souhaitez améliorer vos compétences en codage.

Vous devez tester toute stratégie mentionnée avant de l’utiliser dans votre compte réel car l’objectif principal de cet article est éducatif. En plus, il n’existe rien qui convienne à tout le monde. Vous devez donc vous assurer qu’il est adapté à 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 des Fractales

L'indicateur Fractals a été développé par Bill Williams. Il a été conçu pour tenter d'anticiper les mouvements potentiels de l'action des prix en donnant des signaux haussiers ou baissiers. Le signal haussier donne un mouvement potentiel à la hausse, et le signal baissier donne un mouvement potentiel à la baisse. On peut dire aussi que cet indicateur tente d'anticiper les hauts et les bas du graphique. Nous pouvons voir ces signaux en visualisant les flèches générées sur le graphique, en dessous et au-dessus des prix.

Il forme 2 flèches différentes : la flèche des fractales vers le haut et la flèche des fractales vers le bas. Si vous vous demandez comment sont calculées ces 2 flèches, voici la réponse à cette question :

L'indicateur Fractals nécessite qu'un modèle spécifique d'action des prix soit formé sur le graphique dans les 2 sens, vers le haut ou vers le bas.

Pour les fractales ascendantes, nous avons besoin des éléments suivants sur l’action des prix :

  • Au moins 5 bougies ou barres consécutives
  • Le Plus Haut dans la bougie du milieu (3ème)
  • Des sommets plus bas de chaque côté de ce sommet
  • Après la fermeture de la 5ème bougie avec les conditions précédentes, la flèche des fractales vers le haut se formera au-dessus de la bougie (la 3ème).

Pour les fractales baissières, nous avons besoin des éléments suivants sur l’action des prix :

  • Au moins 5 bougies ou barres consécutives
  • Le Plus Bas dans la bougie du milieu (3ème)
  • Des Plus Bas plus élevés de chaque côté de ce minimum
  • Après la fermeture de la 5ème bougie avec les conditions précédentes, la flèche descendante des fractales se formera sous la bougie (la 3ème).

Heureusement, nous n'avons pas besoin de suivre ces étapes pour dessiner nous-mêmes l'indicateur Fractals sur notre graphique. Il est prêt-à-l’emploi pour nous dans MetaTrader 5. Il nous suffit de choisir l'indicateur Fractals parmi les indicateurs disponibles. Nous pouvons le faire en ouvrant le terminal MetaTrader 5 et en choisissant

Insertion -> Indicateurs -> Bill Williams -> Fractales

Insertion des FractalesInsertion des

Après avoir choisi Fractals, la fenêtre suivante de paramètres de l'indicateur est affichée :

 Paramètres des Fractales

1- Détermine la couleur des flèches

2- Détermine l'épaisseur

Après avoir appuyé sur "OK", l'Expert est attaché au graphique de la manière suivante :

 Fractals attaché

Comme nous pouvons le voir, nous avons des flèches au-dessus et en-dessous des bougies faisant référence au mouvement potentiel des prix. Nous avons des flèches vers le bas et sous les bougies qui montrent un mouvement potentiel à la hausse, et des flèches vers le haut au-dessus des bougies qui montrent un mouvement potentiel à la baisse.

Stratégie Fractales

Nous apprendrons comment utiliser cet indicateur Fractales en nous basant sur des stratégies simples basées sur le concept de cet indicateur technique. Nous utiliserons l'indicateur Fractals de manière autonome, puis nous apprendrons comment l’utiliser avec d'autres indicateurs techniques pour obtenir plus d'informations et améliorer ses signaux.

1ère stratégie : Hauts et Bas des Fractales

    Selon cette stratégie, nous devons obtenir des signaux hauts et bas en fonction des positions des hauts et des bas des fractales. Si l'indicateur a généré la flèche inférieure, ce sera un signal bas. Si les fractales ont généré la flèche supérieure, ce sera un signal haut.

    Plus simplement :

    Flèche inférieure -> Fractales bas

    Flèche supérieure --> Fractales haut

    2ème stratégie : Fractales avec MA

      Selon cette stratégie, nous devons obtenir des signaux d'achat et de vente basés sur la direction des prix en fonction de la position du prix et de la moyenne mobile, en plus des signaux de l’indicateur Fractals générés. Si le cours de clôture est supérieur à la moyenne mobile et que l'indicateur Fractals a généré une flèche inférieure, ce sera un signal d'achat. Si le cours de clôture est inférieur à la moyenne mobile et que l'indicateur Fractals a généré la flèche supérieure, ce sera un signal de vente.

      Plus simplement :

      Prix de clôture > MA et flèche inférieure --> signal d'achat

      Prix de clôture < MA et flèche supérieure --> signal de vente

      3ème stratégie : Fractales avec Alligator

        Selon cette stratégie, nous devons obtenir des signaux d'achat et de vente basés sur la direction des prix en fonction de sa position avec l'indicateur Alligator, en plus des signaux générés par l'indicateur Fractals. Si la ligne des Lèvres de l'Alligator est au-dessus des Dents et des Mâchoires, la ligne des Dents est au-dessus des Mâchoires, le prix de clôture est au-dessus des Dents et le signal de l'indicateur Fractals est une flèche inférieure, ce sera un signal d'achat. Dans l’autre scénario, si la ligne des Lèvres est inférieure aux Dents et aux Mâchoires, si les Dents sont plus basses que les Mâchoires, si le cours de clôture est inférieur aux Dents et si le signal des fractales est une flèche supérieure, ce sera un signal de vente.

        Plus simplement :

        Lèvres > Dents et Mâchoires, Dents > Mâchoires, prix de clôture > Dents, et flèche inférieure --> signal d'achat

        Lèvres < Dents et Mâchoires, Dents < Mâchoires, prix de clôture < Dents, et flèche supérieure --> signal de vente

        Plan de la stratégie Fractales

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

        1. Hauts et Bas des Fractales

          Sur la base de cette stratégie, nous devons créer un système de trading qui peut être utilisé pour renvoyer les hauts et les bas de l'indicateur Fractals sous forme de commentaire sur le graphique en vérifiant en permanence la valeur de fracUp et de fracDown. Si fracUp est supérieur à 0 ou s'il n'a pas de valeur vide et que fracDown a une valeur vide, le système de trading doit renvoyer un signal sur le graphique sous forme de commentaire avec la valeur suivante :

            • Fractales Haut autour de : n

          Dans l'autre cas, si fracDown est supérieur à 0 ou s'il n'a pas de valeur vide et que fracUp a une valeur vide, le système de trading doit renvoyer un signal sur le graphique sous forme de commentaire avec la valeur suivante :

            • Fractales Bas autour de : n

          Voici le plan de cette stratégie :

          Plan des hauts et des bas des fractales

          2. Fractales avec MA

            Sur la base de cette stratégie, nous devons créer un système de trading qui peut être utilisé pour renvoyer des signaux d'achat et de vente sous forme de commentaire sur le graphique, basé sur une vérification continue des valeurs suivantes :

              • Le prix de clôture
              • Valeur de la Moyenne Mobile Exponentielle (MME, ou EMA en anglais).
              • valeur de fracDown
              • valeur de fracUp

            Si le cours de clôture est supérieur à la valeur de l’EMA et que la valeur fracDown n'est pas vide, le système de trading doit renvoyer les valeurs suivantes :

              • Acheter
              • EMA actuelle
              • Valeur Fractales Basse : n

            Dans l'autre cas, si le cours de clôture est inférieur à la valeur de l’EMA et que la valeur fracUp n'est pas vide, le système de trading doit renvoyer les valeurs suivantes :

              • Vendre
              • EMA actuelle
              • Valeur Fractales Haute : n

            Le graphique suivant correspond à ce plan :

            Frac avec plan MA

            3. Fractales avec Alligator

              Sur la base de cette stratégie de trading, nous devons créer un système qui peut être utilisé pour générer des signaux d'achat et de vente en vérifiant continuellement les positions des valeurs suivantes :

                • La valeur des Lèvres
                • La valeur des Dents
                • La valeur des Mâchoires
                • Le cours de clôture
                • La valeur fracDown
                • La valeur fracUp

              Si la valeur des Lèvres est supérieure à la valeur des Dents et des Mâchoires, si la valeur des Dents est supérieure à la valeur des Mâchoires, si le cours de clôture est supérieur à la valeur des Dents et si la valeur de fracDown n'est pas vide, le système de trading doit nous renvoyer un commentaire sur le graphique avec les valeurs suivantes :

                • Acheter
                • Valeur des Mâchoires n
                • Valeur des Dents n
                • Valeur des Lèvres n
                • Fractales Bas autour de : n

              Dans l'autre cas, si la valeur des Lèvres est inférieure aux valeurs des Dents et des Mâchoires, la ligne des Dents est inférieure à la valeur des Mâchoires, le cours de clôture est inférieur à la valeur des Dents et la valeur fracUp n'est pas égale à une valeur vide, le système de trading doit nous renvoyer les valeurs suivantes :

                • Vendre
                • Valeur des Mâchoires n
                • Valeur des Dents n
                • Valeur des Lèvres n
                • Fractales Haut autour de : n

              Le graphique suivant correspond à ce plan :

              Frac avec plan Alligator

              Système de trading Fractales

              Dans cette rubrique, nous apprendrons étape par étape comment créer un système de trading basé sur les stratégies mentionnées pour les exécuter dans le terminal MetaTrader 5. Nous allons commencer à créer un système de fractales simple qui peut être utilisé pour renvoyer des commentaires sur le graphique avec les valeurs de l'indicateur de fractales.

              Création de tableaux pour les fractales haussières et pour les fractales baissières de type double.

                 double fracUpArray[];
                 double fracDownArray[];

              Tri des données en utilisant la fonction "ArraySetAsSeries" : Ses paramètres sont :

              • array[] : nous utiliserons les tableaux créés fracUpArray et fracDownArray.
              • flag : nous utiliserons true.
                 ArraySetAsSeries(fracUpArray,true);
                 ArraySetAsSeries(fracDownArray,true);

              Définition de l'indicateur fractals en utilisant la fonction "iFractals" pour renvoyer le handle de l'indicateur Fractals. Ses paramètres sont :

              • symbol : nous utiliserons _Symbol pour l'appliquer au symbole actuel
              • period : nous utiliserons _Period pour l'appliquer à la période actuelle.
              int fracDef=iFractals(_Symbol,_Period);

              Définition des données et stockage des résultats avec la fonction "CopyBuffer" : Ses paramètres sont :

              • indicator_handle : pour déterminer le handle de l'indicateur, nous utiliserons fracDef
              • buffer_num : pour déterminer le numéro du buffer de l'indicateur, nous utiliserons UPPER_LINE pour fracUp et LOWER_LINE pour fracDown.
              • start_pos : pour déterminer la position de départ, nous utiliserons 1
              • count : pour déterminer le nombre d’éléments à copier, nous utiliserons 3.
              • buffer[] : pour définir le tableau cible à copier, nous utiliserons fracUpArray et fracDownArray.
                 CopyBuffer(fracDef,UPPER_LINE,2,1,fracUpArray);
                 CopyBuffer(fracDef,LOWER_LINE,2,1,fracDownArray);

              Obtention des valeurs des fractales haussières et baissières :

                 double fracUpValue=NormalizeDouble(fracUpArray[0],5);
                 double fracDownValue=NormalizeDouble(fracDownArray[0],5);

              Renvoi de la valeur zéro en cas de valeur vide pour fracUp ou pour faceDown.

                 if(fracUpValue==EMPTY_VALUE)
                    fracUpValue = 0;
                 if(fracDownValue==EMPTY_VALUE)
                    fracDownValue = 0;

              Utilisation de la fonction "Comment" pour renvoyer des commentaires sur le graphique avec les valeurs des fractales.

                 Comment("Fractals Up Value = ",fracUpValue,"\n",
                         "Fractals Down Value = ",fracDownValue);

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

              //+------------------------------------------------------------------+
              //|                                       Simple Fractals System.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 price array
                 double fracUpArray[];
                 double fracDownArray[];
              //Sorting data
                 ArraySetAsSeries(fracUpArray,true);
                 ArraySetAsSeries(fracDownArray,true);
              //define frac
                 int fracDef=iFractals(_Symbol,_Period);
              //define data and store result
                 CopyBuffer(fracDef,UPPER_LINE,2,1,fracUpArray);
                 CopyBuffer(fracDef,LOWER_LINE,2,1,fracDownArray);
              //get values of fracUp and fracDown
                 double fracUpValue=NormalizeDouble(fracUpArray[0],5);
                 double fracDownValue=NormalizeDouble(fracDownArray[0],5);
              //returning zero if there is empty value of fracUp
                 if(fracUpValue==EMPTY_VALUE)
                    fracUpValue = 0;
              //returning zero if there is empty value of fracDown
                 if(fracDownValue==EMPTY_VALUE)
                    fracDownValue = 0;
              //comment on the chart
                 Comment("Fractals Up Value = ",fracUpValue,"\n",
                         "Fractals Down Value = ",fracDownValue);
                }
              //+------------------------------------------------------------------+

              Après avoir compilé ce code, nous le trouverons dans le Navigateur :

              Fractales Navigator

              En le glissant et en le déposant sur le graphique souhaité, sa fenêtre est alors affichée :

               Fenêtre du système simple Frac

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

              Système de Frac simple attaché

              Comme nous pouvons le voir dans le coin supérieur droit du graphique, l'expert est attaché et nous sommes prêts à recevoir les signaux souhaités. Voici des exemples de tests :

               Signal du système Frac simple

              Comme nous pouvons le voir dans le coin supérieur gauche, nous avons les valeurs suivantes :

              • Valeur des fractales en hausse = n
              • Valeur des fractales en baisse = 0

              Et il est clair que la valeur de Fractals Down est nulle car nous avons une valeur pour Fractals up.

               Signal du système de Frac simple 2

              Nous avons deux valeurs :

              • Valeur des fractales en hausse = 0
              • Valeur des fractales en baisse = n

              Mais la valeur Fractals Up est nulle car nous avons une valeur pour Fractals down.

              1. Hauts et Bas des Fractales

                Voici le code complet permettant de créer un système de trading des hauts et des bas des fractales.

                //+------------------------------------------------------------------+
                //|                                      Fractals highs and lows.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 arrays
                   double fracUpArray[];
                   double fracDownArray[];
                //Sorting data
                   ArraySetAsSeries(fracUpArray,true);
                   ArraySetAsSeries(fracDownArray,true);
                //define frac
                   int fracDef = iFractals(_Symbol,_Period);
                //define data and store result
                   CopyBuffer(fracDef,UPPER_LINE,2,1,fracUpArray);
                   CopyBuffer(fracDef,LOWER_LINE,2,1,fracDownArray);
                //define values
                   double fracUpValue = NormalizeDouble(fracUpArray[0],5);
                   double fracDownValue = NormalizeDouble(fracDownArray[0],5);
                //returning zero in case of empty values
                   if(fracUpValue ==EMPTY_VALUE)
                      fracUpValue = 0;
                   if(fracDownValue ==EMPTY_VALUE)
                      fracDownValue = 0;
                //conditions of the strategy and comment on the chart with highs and lows
                //in case of high
                   if(fracUpValue>0)
                     {
                      Comment("Fractals High around: ",fracUpValue);
                     }
                //in case of low
                   if(fracDownValue>0)
                     {
                      Comment("Fractals Low around: ",fracDownValue);
                     }
                  }
                //+------------------------------------------------------------------+

                Différences dans ce code

                Conditions de la stratégie :

                En cas de haut :

                   if(fracUpValue>0)
                     {
                      Comment("Fractals High around: ",fracUpValue);
                     }

                En cas de bas :

                   if(fracDownValue>0)
                     {
                      Comment("Fractals Low around: ",fracDownValue);
                     }

                Après avoir compilé ce code et l'avoir attaché au graphique comme précédemment, les Experts des Hauts et des Bas des fractales sont attachés comme suit :

                 Fractales hautes et basses attachées

                Désormais, nous pouvons recevoir les résultats souhaités pour les hauts et les bas. En cas de bas :

                 Fractales hautes et basses - signal de bas

                Nous pouvons voir dans le graphique précédent dans le coin supérieur gauche que nous avons un valeur de bas de fractales car l'indicateur des fractales a formé un plus bas.

                En cas de hauts :

                Fractales hautes et basses - signal de haut

                Comme nous pouvons le voir, nous avons la valeur de haut des fractales car l'indicateur a formé un sommet sur le graphique.

                2. Fractales avec MA

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

                  //+------------------------------------------------------------------+
                  //|                                             Fractals with MA.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 arrays
                     double fracUpArray[];
                     double fracDownArray[];
                     MqlRates priceArray[];
                     double maArray[];
                  //Sorting data
                     ArraySetAsSeries(fracUpArray,true);
                     ArraySetAsSeries(fracDownArray,true);
                     ArraySetAsSeries(priceArray,true);
                     ArraySetAsSeries(maArray,true);
                  //define values
                     int fracDef = iFractals(_Symbol,_Period);
                     int Data = CopyRates(_Symbol,_Period,0,3,priceArray);
                     int maDef = iMA(_Symbol,_Period,50,0,MODE_EMA,PRICE_CLOSE);
                  //define data and store result
                     CopyBuffer(fracDef,UPPER_LINE,2,1,fracUpArray);
                     CopyBuffer(fracDef,LOWER_LINE,2,1,fracDownArray);
                     CopyBuffer(maDef,0,0,3,maArray);
                  //get values
                     double fracUpValue = NormalizeDouble(fracUpArray[0],5);
                     double fracDownValue = NormalizeDouble(fracDownArray[0],5);
                     double closingPrice = priceArray[0].close;
                     double maValue = NormalizeDouble(maArray[0],6);
                     bool isBuy = false;
                     bool isSell = false;
                  //conditions of the strategy and comment on the chart
                  //in case of buy
                     if(closingPrice > maValue && fracDownValue != EMPTY_VALUE)
                       {
                        Comment("Buy","\n",
                                "Current EMA: ",maValue,"\n",
                                "Fractals Low around: ",fracDownValue);
                        isBuy = true;
                       }
                  //in case of sell
                     if(closingPrice < maValue && fracUpValue != EMPTY_VALUE)
                       {
                        Comment("Sell","\n",
                                "Current EMA: ",maValue,"\n",
                                "Fractals High around: ",fracUpValue);
                        isSell = true;
                       }
                    }
                  //+------------------------------------------------------------------+

                  Différences dans ce code

                  Création de 2 tableaux supplémentaires de priceArray à l'aide de la fonction "MqlRates" pour stocker des informations sur les prix, les volumes et la répartition et maArray à l'aide de la fonction "double".

                     MqlRates priceArray[];
                     double maArray[];

                  Tri des données de ces 2 tableaux.

                     ArraySetAsSeries(priceArray,true);
                     ArraySetAsSeries(maArray,true);

                  Obtention des données historiques de MqlRates en utilisant la fonction "CopyRates". Ses paramètres sont :

                  • symbol : le nom du symbole, nous utiliserons _Symbol
                  • timeframe : pour déterminer la période, nous utiliserons _period.
                  • 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 3.
                  • rate_array[] : pour déterminer le tableau cible de la copie, nous utiliserons pArray.

                  Définition de la moyenne mobile en utilisant la fonction "iMA". Ses paramètres sont :

                  • symbol : pour déterminer le nom du symbole.
                  • period: pour déterminer la période.
                  • ma_period : pour déterminer la période de calcul de la moyenne, nous utiliserons 50.
                  • ma_shift : pour déterminer le décalage horizontal, on utilisera 0
                  • ma_method, pour déterminer le type de la moyenne mobile. Nous utiliserons une moyenne mobile exponentielle (MODE_EMA).
                  • apply_price : le type de prix, nous utiliserons le cours de clôture
                     int Data = CopyRates(_Symbol,_Period,0,3,priceArray);
                     int maDef = iMA(_Symbol,_Period,50,0,MODE_EMA,PRICE_CLOSE);

                  Tri des données.

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

                  Définition du cours de clôture et de la valeur MA.

                  double closingPrice = priceArray[0].close;
                  double maValue = NormalizeDouble(maArray[0],6);

                  Création de 2 variables booléennes pour isBuy et isSell pour éviter les conflits entre les signaux d'achat et de vente de la même bougie.

                     bool isBuy = false;
                     bool isSell = false;

                  Conditions de la stratégie

                  En cas de signal d’achat :

                     if(closingPrice > maValue && fracDownValue != EMPTY_VALUE)
                       {
                        Comment("Buy","\n",
                                "Current EMA: ",maValue,"\n",
                                "Fractals Low around: ",fracDownValue);
                        isBuy = true;
                       }

                  En cas de signal de vente :

                     if(closingPrice < maValue && fracUpValue != EMPTY_VALUE)
                       {
                        Comment("Sell","\n",
                                "Current EMA: ",maValue,"\n",
                                "Fractals High around: ",fracUpValue);
                        isSell = true;
                       }

                  Après avoir compilé ce code et l'avoir exécuté, nous trouverons l'Expert ci-attaché :

                   Frac avec MA attaché

                  Comme nous pouvons le voir, l'Expert des fractales avec MA est attaché au graphique dans le coin supérieur droit. Nous recevrons les signaux souhaités comme dans les exemples suivants :

                  En cas de signal d’achat :

                   Frac avec MA - signal d'achat

                  Comme nous pouvons le voir sur le graphique, nous avons un commentaire avec les valeurs suivantes :

                  • Acheter
                  • EMA actuelle
                  • Fractales Bas autour de : n

                  En cas de signal de vente :

                   Frac avec MA - signal de vente

                  Considérons que nous avons les données suivantes :

                  • Vendre
                  • EMA actuelle
                  • Fractales Haut autour de : n

                  3. Fractales avec Alligator

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

                    //+------------------------------------------------------------------+
                    //|                                      Fractals with Alligator.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 arrays
                       double fracUpArray[];
                       double fracDownArray[];
                       MqlRates priceArray[];
                       double jawsArray[];
                       double teethArray[];
                       double lipsArray[];
                    //Sorting data
                       ArraySetAsSeries(fracUpArray,true);
                       ArraySetAsSeries(fracDownArray,true);
                       ArraySetAsSeries(jawsArray,true);
                       ArraySetAsSeries(teethArray,true);
                       ArraySetAsSeries(lipsArray,true);
                    //define values
                       int fracDef=iFractals(_Symbol,_Period);
                       int Data = CopyRates(_Symbol,_Period,0,3,priceArray);
                       int alligatorDef=iAlligator(_Symbol,_Period,13,8,8,5,5,3,MODE_SMMA,PRICE_MEDIAN);
                    //define data and store result
                       CopyBuffer(fracDef,UPPER_LINE,2,1,fracUpArray);
                       CopyBuffer(fracDef,LOWER_LINE,2,1,fracDownArray);
                       CopyBuffer(alligatorDef,0,0,3,jawsArray);
                       CopyBuffer(alligatorDef,1,0,3,teethArray);
                       CopyBuffer(alligatorDef,2,0,3,lipsArray);
                    //get values
                       double fracUpValue=NormalizeDouble(fracUpArray[0],5);
                       double fracDownValue=NormalizeDouble(fracDownArray[0],5);
                       double closingPrice = priceArray[0].close;
                       double jawsValue=NormalizeDouble(jawsArray[0],5);
                       double teethValue=NormalizeDouble(teethArray[0],5);
                       double lipsValue=NormalizeDouble(lipsArray[0],5);
                    //creating bool variables to aviod buy ans sell signals at the same time
                       bool isBuy = false;
                       bool isSell = false;
                    //conditions of the strategy and comment on the chart
                    //in case of buy
                       if(lipsValue>teethValue && lipsValue>jawsValue && teethValue>jawsValue
                       && closingPrice > teethValue && fracDownValue != EMPTY_VALUE)
                         {
                          Comment("Buy","\n",
                                  "jawsValue = ",jawsValue,"\n",
                                  "teethValue = ",teethValue,"\n",
                                  "lipsValue = ",lipsValue,"\n",
                                  "Fractals Low around: ",fracDownValue);
                          isBuy = true;
                         }
                    //in case of sell
                       if(lipsValue<teethValue && lipsValue<jawsValue && teethValue<jawsValue
                       && closingPrice < teethValue && fracUpValue != EMPTY_VALUE)
                         {
                          Comment("Sell","\n",
                                  "jawsValue = ",jawsValue,"\n",
                                  "teethValue = ",teethValue,"\n",
                                  "lipsValue = ",lipsValue,"\n",
                                  "Fractals High around: ",fracUpValue);
                          isSell = true;
                         }
                      }
                    //+------------------------------------------------------------------+

                    Différences dans ce code

                    Création de 3 tableaux de composants de l’Alligator.

                       double jawsArray[];
                       double teethArray[];
                       double lipsArray[];

                    Tri des données dans ces tableaux à l'aide de la fonction "ArraySetAsSeries".

                       ArraySetAsSeries(jawsArray,true);
                       ArraySetAsSeries(teethArray,true);
                       ArraySetAsSeries(lipsArray,true);

                    Définition de l'Alligator avec la fonction "iAlligator". Ses paramètres sont :

                    • symbol : nous utiliserons _Symbol pour l'appliquer au symbole actuel.
                    • period : nous utiliserons _Period pour l'appliquer à la période actuelle.
                    • jaw_period : pour déterminer la période du calcul des Mâchoires, nous utiliserons 13.
                    • ma_shift : pour déterminer le décalage horizontal, nous utiliserons 8.
                    • teeth_period : pour déterminer la période de calcul des Dents, nous utiliserons 8.
                    • teeth_shift : pour déterminer le décalage horizontal des Dents, nous utiliserons 5.
                    • lips_period : pour déterminer la période du calcul des Lèvres, nous utiliserons 5.
                    • lips_shift : pour déterminer le décalage horizontal des lèvres, nous utiliserons 3.
                    • ma_method : pour déterminer le type de moyenne mobile, nous utiliserons MODE_SMA.
                    • applied_price : le type de prix, nous utiliserons PRICE_MEDIAN.
                    int alligatorDef=iAlligator(_Symbol,_Period,13,8,8,5,5,3,MODE_SMMA,PRICE_MEDIAN);

                    Définition des données et stockage des résultats avec la fonction "CopyBuffer". Ses paramètres sont :

                    • indicator_handle : pour déterminer le handle de l'indicateur, nous utiliserons alligatorDef
                    • buffer_num : pour déterminer le numéro du buffer de l’indicateur, nous utiliserons 0 pour les Mâchoires, 1 pour les Dents et 2 pour les Lèvres.
                    • 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 à copier, nous utiliserons jawsArray, teethArray et lipsArray.
                       CopyBuffer(alligatorDef,0,0,3,jawsArray);
                       CopyBuffer(alligatorDef,1,0,3,teethArray);
                       CopyBuffer(alligatorDef,2,0,3,lipsArray);

                    Récupération des valeurs des composants de l’Alligator :

                       double jawsValue=NormalizeDouble(jawsArray[0],5);
                       double teethValue=NormalizeDouble(teethArray[0],5);
                       double lipsValue=NormalizeDouble(lipsArray[0],5);

                    Conditions de la stratégie :

                    En cas de signal d’achat :

                       if(lipsValue>teethValue && lipsValue>jawsValue && teethValue>jawsValue
                       && closingPrice > teethValue && fracDownValue != EMPTY_VALUE)
                         {
                          Comment("Buy","\n",
                                  "jawsValue = ",jawsValue,"\n",
                                  "teethValue = ",teethValue,"\n",
                                  "lipsValue = ",lipsValue,"\n",
                                  "Fractals Low around: ",fracDownValue);
                          isBuy = true;
                         }

                    En cas de signal de vente :

                       if(lipsValue<teethValue && lipsValue<jawsValue && teethValue<jawsValue
                       && closingPrice < teethValue && fracUpValue != EMPTY_VALUE)
                         {
                          Comment("Sell","\n",
                                  "jawsValue = ",jawsValue,"\n",
                                  "teethValue = ",teethValue,"\n",
                                  "lipsValue = ",lipsValue,"\n",
                                  "Fractals High around: ",fracUpValue);
                          isSell = true;
                         }

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

                     Frac avec Alligator attaché

                    Nous obtenons les signaux souhaités sur la base de cette stratégie après avoir attaché cet expert au graphique, comme nous pouvons le voir dans le graphique précédent dans le coin supérieur droit.

                    Voici des exemples de signaux issus des tests :

                    En cas de signal d'achat

                     Frac avec Alligator - signal d'achat

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

                    • Acheter
                    • Valeur des Mâchoires
                    • Valeur des Dents
                    • Valeur des Lèvres
                    • Valeur des fractales basses

                     Frac avec Alligator - signal de vente

                    Nous avons les valeurs suivantes comme signal sur le graphique précédent :

                    • Vendre
                    • Valeur des Mâchoires
                    • Valeur des Dents
                    • Valeur des Lèvres
                    • Valeur des fractales hautes


                    Conclusion

                    L'indicateur technique Fractals est un outil utile et efficace dans le trading, même en tant qu'outil autonome ou accompagné d'un autre indicateur technique, car il donne des informations utiles identiques comme nous l’avons appris dans cet article. On suppose que vous avez appris ce que c'est, ce qu'il mesure, comment il peut être formé sur le graphique grâce à la méthode de calcul et comment insérer le module intégré dans le terminal MetaTrader 5. En plus de cela, nous avons appris comment l'utiliser grâce aux stratégies de trading simples suivantes :

                    • Hauts et bas des fractales : pour détecter les hauts et les bas de l'indicateur des fractales et obtenir un signal sur le graphique.
                    • Fractales avec MA : pour obtenir des signaux d'achat et de vente basés sur les signaux fractals générés en fonction de la position des prix et de leur moyenne mobile.
                    • Fractals avec Alligator : pour obtenir des signaux d'achat et de vente basés sur les signaux Fractals selon la position des prix et l'indicateur Alligator.

                    Nous avons également appris comment créer un système de trading basé sur chaque stratégie mentionnée pour obtenir des signaux automatiques sur le graphique MetaTrader 5 en codant ces stratégies en MQL5. J'espère que vous avez essayé de les appliquer par vous-même dans le but d'une compréhension approfondie et d'obtenir plus d'informations sur le sujet de cet article ou sur tout sujet connexe afin de tirer pleinement parti de la lecture de cet article.

                    Je confirme encore une fois que vous devez tester toute stratégie mentionnée avant de l'utiliser sur votre compte réel pour vous assurer qu'elle sera rentable. J'espère que vous avez trouvé cet article utile et que vous avez appris de nouvelles choses qui peuvent améliorer considérablement vos résultats de trading. Si vous avez trouvé cela et souhaitez lire d'autres articles similaires, vous pouvez lire mes autres articles de cette série sur la compréhension et la création 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/11620

                    Développer un Expert Advisor de trading à partir de zéro (Partie 26) : En route vers le futur (1) Développer un Expert Advisor de trading à partir de zéro (Partie 26) : En route vers le futur (1)
                    Aujourd'hui, nous allons faire passer notre système d’ordres au niveau supérieur. Mais avant cela, nous devons résoudre quelques problèmes. Nous nous posons maintenant quelques questions liées à la manière dont nous voulons travailler et aux choses que nous faisons pendant notre journée de trading.
                    Algorithmes d'optimisation de la population : Optimisation de la Lutte contre les Mauvaises Herbes Invasives (Invasive Weed Optimization, IWO) Algorithmes d'optimisation de la population : Optimisation de la Lutte contre les Mauvaises Herbes Invasives (Invasive Weed Optimization, IWO)
                    L'étonnante capacité des mauvaises herbes à survivre dans une grande variété de conditions est devenue l'idée d'un puissant algorithme d'optimisation. L'IWO est l'un des meilleurs algorithmes parmi ceux qui ont été examinés précédemment.
                    Développer un Expert Advisor de trading à partir de zéro (Partie 27) : Vers le futur (II) Développer un Expert Advisor de trading à partir de zéro (Partie 27) : Vers le futur (II)
                    Passons à un système d’ordres plus complet directement sur le graphique. Dans cet article, je vais montrer un moyen de corriger le système d’ordres, ou plutôt de le rendre plus intuitif.
                    Développer un Expert Advisor de trading à partir de zéro (Partie 25) : Assurer la robustesse du système (II) Développer un Expert Advisor de trading à partir de zéro (Partie 25) : Assurer la robustesse du système (II)
                    Dans cet article, nous franchirons la dernière étape pour améliorer les performances de l’EA. Alors préparez-vous à une longue lecture. Pour fiabiliser notre Expert Advisor, nous allons d'abord supprimer du code tout ce qui ne fait pas partie du système de trading.