English Русский 中文 Español Deutsch 日本語 Português 한국어 Italiano Türkçe
Assistant MQL5 : Création d'Expert Advisors sans programmation

Assistant MQL5 : Création d'Expert Advisors sans programmation

MetaTrader 5Systèmes de trading | 17 novembre 2021, 16:34
898 0
MetaQuotes
MetaQuotes

Introduction

Lorsque vous créez des systèmes de trading automatisés, il est nécessaire de rédiger des algorithmes d'analyse de la situation du marché et de génération de signaux de trading, des algorithmes de suivi de vos positions ouvertes, ainsi que des systèmes de gestion de l'argent et de gestion des risques.

Une fois le code des modules rédigé, la tâche la plus difficile est d'assembler toutes les pièces et de déboguer le code source du robot de trading. Ici, le rôle clé est incarné par l'architecture d'interaction des modules : si elle est mal construite, la plupart du temps sera consacrée à la recherche et à la correction des erreurs, et si vous remplacez l'algorithme de n'importe quel module, cela conduira à la réécriture l'intégralité du code source. .

Dans MQL5, l'utilisation de l'approche orientée-objet facilite considérablement l'écriture et le test des systèmes de trading automatisés.

MetaQuotes Software Corp. a élaboré des cours pour implémenter des stratégies de trading. Vous pouvez maintenant générer le code Expert Advisors automatiquement directement dans MetaEditor en sélectionnant les signaux du trading requis (il y en a actuellement 20), suivi (4) et Gestion d’argent (5) modules. En combinant ces modules, vous pouvez obtenir de nombreuses variantes de systèmes de trading prêts à l'emploi.

Vous pouvez également utiliser vos propres classes avec l'implémentation de l'un de ces modules. Créez-les vous-même ou commandez-les via le service Jobs.

Dans cet article, nous examinerons la génération automatique du code source d'Expert Advisor à l'aide de MQL5 Wizard. Et il n'y aura rien à programmer !


1. Création d'un robot de trading à l'aide de l'assistant MQL5

Le code source d'Expert Advisor est généré à l'aide de MQL5 Wizard dans MetaEditor.

Les cours de base des stratégies de trading sont situés dans le dossier '\<client_terminal_directory>\MQL5\Include\Expert\'. Des algorithmes prêts à l'emploi pour les classes de signaux de trading, les classes de positions ouvertes de suivi et les classes d'argent et de gestion des risques se trouvent dans les sous-dossiers Signal, suivi et Argent. L'assistant MQL5 analyse les fichiers de ces dossiers et les utilise pour générer le code d'Expert Advisor.

Pour lancer l'assistant MQL5, vous devez cliquer sur le bouton "Nouveau" de la barre d'outils ou sélectionner "Nouveau" dans le menu "Fichier" (ou simplement appuyer sur Ctrl+N) :

Figure 1. Lancement de l'assistant MQL5

Fig. 1. Lancement de l'assistant MQL5

Sélectionnez ensuite le type de programme que vous souhaitez créer. Dans notre cas, sélectionnez l'option "Expert Advisor (générer)":

Figure 2. Sélection du type de programme

Fig. 2. Sélection du type de programme


Étape 1. Propriétés générales de l'Expert Advisor

Ensuite, la boîte de dialogue s'ouvre, dans laquelle vous pouvez définir les propriétés générales d'Expert Advisor :

Figure 3. Propriétés générales d'Expert Advisor

Fig. 3. Propriétés générales de l'Expert Advisor

Indiquez le nom de votre Expert Advisor, le nom de l'auteur et le lien vers votre site web dans les champs "Nom", "Auteur" et "Lien" (respectivement).

Expert Advisor dispose également des paramètres d'entrée suivants :

  • Symbole (le type de chaîne) - Symbole de travail pour Expert Advisor.
  • Délai (le type de délai) - Délai de travail pour Expert Advisor.

À l'étape suivante, sélectionnez le type de signaux de trading sur lesquels l'expert tradera.


Étape 2. Sélectionnez le module de Signaux de Trading

L'algorithme d'ouverture et de clôture des positions est déterminé par le module de signaux de trade Les modules de signaux de trade contiennent des règles d'ouverture/clôture/inversion de positions.

La bibliothèque standard comprend des modules de signaux de trade prêts à l'emploi :

  1. CSignalAC - Le module de signaux basé sur les modèles de marché de l'indicateur Accelerator Oscillator.
  2. CSignalAMA - Le module de signaux basé sur les modèles de marché de l'indicateur Adaptive Moving Average.
  3. CSignalAO - Le module de signaux basé sur les modèles de marché de l'indicateur Awesome Oscillator.
  4. CSignalBearsPower - Le module de signaux basé sur les modèles de marché de l'oscillateur Bears Power.
  5. CSignalBullsPower - Le module de signaux basé sur les modèles de marché de l'oscillateur Bulls Power.
  6. CSignalCCI - Le module de signaux basé sur les modèles de marché de l'oscillateur Commodity Channel Index.
  7. CSignalDeM - Le module de signaux basé sur les modèles de marché de l'oscillateur DeMarker.
  8. CSignalDEMA - Le module de signaux basé sur les modèles de marché de l'indicateur Double moyenne mobile exponentielle.
  9. CSignalEnvelopes - Le module de signaux basé sur les modèles de marché de l'indicateurEnvelopes.
  10. CSignalFrAMA - Le module de signaux basé sur les modèles de marché de l'indicateurFractal Adaptive Moving Average.
  11. CSignalITF - Le module de filtrage des signaux par le temps.
  12. CSignalMACD - Le module de signaux basé sur les modèles de marché de l'oscillateur MACD.
  13. CSignalMA - Le module de signaux basé sur les modèles de marché de l'indicateur Moving Average.
  14. CSignalSAR - Le module de signaux basé sur les modèles de marché de l'indicateur Parabolic SAR.
  15. CSignalRSI - Le module de signaux basé sur les modèles de marché de l'oscillateur Relative Strength Index.
  16. CSignalRVI - Le module de signaux basé sur les modèles de marché de l'oscillateur Relative Vigor Index.
  17. CSignalStoch - Le module de signaux basé sur les modèles de marché de l'oscillateur Stochastic.
  18. CSignalTRIX - Le module de signaux basé sur les modèles de marché de l'oscillateur Triple Exponential Average.
  19. CSignalTEMA - Le module de signaux basé sur les modèles de marché de l'indicateur Triple Exponential Moving Average.
  20. CSignalWPR - Le module de signaux basé sur les modèles de marché de l'oscillateur Williams Percent Range.

    Le type de signaux de trade est sélectionné dans la liste déroulante "Nom".

    Après avoir appuyé sur le bouton Suivant, vous verrez une fenêtre :

    Fig. 4. Sélection des signaux de trade d'Expert Advisor

    Fig. 4. Sélection de signaux de trade d'Expert Advisor

    Pour ajouter un module de signaux de trade, appuyez sur le bouton "Ajouter".

    Ajoutons des signaux de trade, basés sur l'indicateur de moyenne mobile.


    Fig. 5. Sélectionnez l'algorithme des signaux de trade

    Fig. 5. Sélectionnez l'algorithme des signaux de trade

    Chaque module de signaux de trade dispose de ses propres paramètres. Vous pouvez utiliser les valeurs par défaut.

    Il existe deux modes de création de paramètres. Vous pouvez basculer entre eux en double-cliquant sur le bouton gauche de la souris sur l'icône du paramètre. Si le paramètre a l'icône en surbrillance , il sera alors disponible en tant que variable d'entrée d'Expert Advisor. Ces paramètres peuvent en outre être utilisés pour une optimisation experte dansStrategy Tester.. Si le paramètre a l'icône grise , alors il aura la valeur fixe que vous ne pouvez pas modifier à partir des propriétés d'Expert Advisor.

    Le module de signaux de trade apparaîtra dans la liste :

    Fig. 6. Un module de signaux de trade a été ajouté

    Fig. 6. Le module de signaux de trade a été ajouté


    Étape 3. Sélectionnez le module des positions de suivi ouvertes

    L'étape suivante consiste à sélectionner le algorithme des positions de suivi ouvertes (Stop Suiveur). L'utilisation du suivi vous permet d'épargner les bénéfices gagnés.

    La bibliothèque standard propose plusieurs façons de suivre les positions ouvertes :

    1. CTrailingNone - Le Stop Suiveur n'est pas utilisé.
    2. CTrailingFixedPips - Le Stop Suiveur basé sur un niveau d'arrêt fixe.
    3. CTrailingMA - Le Stop Suiveur basé sur MA.
    4. CTrailingPSAR - Stop Suiveur basé sur Parabolic SAR.

    Dans notre Expert Advisor, sélectionnez "Stop Suiveur basé sur un niveau d'arrêt fixe":

    Figure 6. Sélectionnez l'algorithme des positions ouvertes de suivi

    Fig. 7. Sélectionnez l'algorithme des positions ouvertes de suivi

    Ce type de suivi a deux paramètres : le StopLevel et le ProfitLevel (en points pour les cotations à 2 et 4 chiffres après la virgule), qui seront utilisés pour suivre les positions ouvertes :

    Figure 7. Définition des paramètres de l'algorithme sélectionné des positions ouvertes de suivi

    Fig. 9. Définition des paramètres de l'algorithme sélectionné des positions ouvertes suivi


    Étape 4. Sélectionnez le module de Gestion de l'Argent et des Risques

    À la dernière étape, vous devez sélectionner le système de gestion de l'argent et des risques, qui sera utilisé dans votre Expert Advisor.

    Le but de cet algorithme est de déterminer le volume de trading (en lots) pour les opérations de trading, ainsi que la gestion des risques. Lorsque la valeur de la perte dépasse la limite autorisée (par exemple, 10 % des capitaux propres), le module de gestion de l'argent et des risques clôturera de force la position non rentable.

    La bibliothèque standard fournit plusieurs implémentations prêtes à l'emploi relatives aux algorithmes de gestion de l'argent et des risques :

    1. CMoneyFixedLot - Trading avec un volume de trade fixe.
    2. CMoneyFixedMargin - Trading avec marge fixe.
    3. CMoneyFixedRisk - Trading avec un risque fixe.
    4. CMoneyNone - Trading avec un volume de trade minimal autorisé.
    5. CMoneySizeOptimized - Trading avec un volume de trade optimisé.

    Figure 8. Sélectionnez l'algorithme de gestion de l'argent et des risques

    Fig. 9. Sélectionnez l'algorithme de gestion de l'argent et des risques

    Sélectionnez l'algorithme « Trading avec un volume de trade fixe ».

    Le module que nous avons sélectionné a deux paramètres :

    • Lots - volume de transactions en lots.
    • Pourcentage - pourcentage de risque maximal autorisé.

    Figure 9. Définition des paramètres de l'algorithme sélectionné de gestion de l'argent et des risques

    Fig. 10. Définition des paramètres de l'algorithme sélectionné de gestion de l'argent et des risques

    Après avoir cliqué sur "Terminer", le fichier TestExpert.mq5 apparaîtra dans le dossier \teminal_data_filder\MQL5\Experts\. Le nom de fichier correspond au nom indiqué d'Expert Advisor.


    2. La structure d'Expert Advisor créée à l'aide de l'assistant MQL5

    Le code source d'Expert Advisor, généré par l'assistant MQL5, se présente comme suit :

    //+------------------------------------------------------------------+
    //|                                                   TestExpert.mq5 |
    //|                        Copyright 2012, MetaQuotes Software Corp. |
    //|                                             https://www.mql5.com |
    //+------------------------------------------------------------------+
    #property copyright "Copyright 2012, MetaQuotes Software Corp."
    #property link      "https://www.mql5.com"
    #property version   "1.00"
    //+------------------------------------------------------------------+
    //| Include                                                          |
    //+------------------------------------------------------------------+
    #include <Expert\Expert.mqh>
    //--- available signals
    #include <Expert\Signal\SignalMA.mqh>
    //--- available trailing
    #include <Expert\Trailing\TrailingFixedPips.mqh>
    //--- available money management
    #include <Expert\Money\MoneyFixedLot.mqh>
    //+------------------------------------------------------------------+
    //| Inputs                                                           |
    //+------------------------------------------------------------------+
    //--- inputs for expert
    input string             Expert_Title                  ="TestExpert"; // Document name
    ulong                    Expert_MagicNumber            =23689;        // 
    bool                     Expert_EveryTick              =false;        // 
    //--- inputs for main signal
    input int                Signal_ThresholdOpen          =10;           // Signal threshold value to open [0...100]
    input int                Signal_ThresholdClose         =10;           // Signal threshold value to close [0...100]
    input double             Signal_PriceLevel             =0.0;          // Price level to execute a deal
    input double             Signal_StopLevel              =50.0;         // Stop Loss level (in points)
    input double             Signal_TakeLevel              =50.0;         // Take Profit level (in points)
    input int                Signal_Expiration             =4;            // Expiration of pending orders (in bars)
    input int                Signal_MA_PeriodMA            =85;           // Moving Average(85,0,...) Period of averaging
    input int                Signal_MA_Shift               =0;            // Moving Average(85,0,...) Time shift
    input ENUM_MA_METHOD      Signal_MA_Method              =MODE_SMA;      // Moving Average(85,0,...) Method of averaging
    input ENUM_APPLIED_PRICE  Signal_MA_Applied             =PRICE_CLOSE;    // Moving Average(85,0,...) Prices series
    input double             Signal_MA_Weight              =1.0;          // Moving Average(85,0,...) Weight [0...1.0]
    //--- inputs for trailing
    input int                Trailing_FixedPips_StopLevel  =30;           // Stop Loss trailing level (in points)
    input int                Trailing_FixedPips_ProfitLevel=50;           // Take Profit trailing level (in points)
    //--- inputs for money
    input double             Money_FixLot_Percent          =10.0;         // Percent
    input double             Money_FixLot_Lots             =0.1;          // Fixed volume
    //+------------------------------------------------------------------+
    //| Global expert object                                             |
    //+------------------------------------------------------------------+
    CExpert ExtExpert;
    //+------------------------------------------------------------------+
    //| Initialization function of the expert                            |
    //+------------------------------------------------------------------+
    int OnInit()
      {
    //--- Initializing expert
       if(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber))
         {
          //--- failed
          printf(__FUNCTION__+": error initializing expert");
          ExtExpert.Deinit();
          return(-1);
         }
    //--- Creating signal
       CExpertSignal *signal=new CExpertSignal;
       if(signal==NULL)
         {
          //--- failed
          printf(__FUNCTION__+": error creating signal");
          ExtExpert.Deinit();
          return(-2);
         }
    //---
       ExtExpert.InitSignal(signal);
       signal.ThresholdOpen(Signal_ThresholdOpen);
       signal.ThresholdClose(Signal_ThresholdClose);
       signal.PriceLevel(Signal_PriceLevel);
       signal.StopLevel(Signal_StopLevel);
       signal.TakeLevel(Signal_TakeLevel);
       signal.Expiration(Signal_Expiration);
    //--- Creating filter CSignalMA
       CSignalMA *filter0=new CSignalMA;
       if(filter0==NULL)
         {
          //--- failed
          printf(__FUNCTION__+": error creating filter0");
          ExtExpert.Deinit();
          return(-3);
         }
       signal.AddFilter(filter0);
    //--- Set filter parameters
       filter0.PeriodMA(Signal_MA_PeriodMA);
       filter0.Shift(Signal_MA_Shift);
       filter0.Method(Signal_MA_Method);
       filter0.Applied(Signal_MA_Applied);
       filter0.Weight(Signal_MA_Weight);
    //--- Creation of trailing object
       CTrailingFixedPips *trailing=new CTrailingFixedPips;
       if(trailing==NULL)
         {
          //--- failed
          printf(__FUNCTION__+": error creating trailing");
          ExtExpert.Deinit();
          return(-4);
         }
    //--- Add trailing to expert (will be deleted automatically))
       if(!ExtExpert.InitTrailing(trailing))
         {
          //--- failed
          printf(__FUNCTION__+": error initializing trailing");
          ExtExpert.Deinit();
          return(-5);
         }
    //--- Set trailing parameters
       trailing.StopLevel(Trailing_FixedPips_StopLevel);
       trailing.ProfitLevel(Trailing_FixedPips_ProfitLevel);
    //--- Creation of money object
       CMoneyFixedLot *money=new CMoneyFixedLot;
       if(money==NULL)
         {
          //--- failed
          printf(__FUNCTION__+": error creating money");
          ExtExpert.Deinit();
          return(-6);
         }
    //--- Add money to expert (will be deleted automatically))
       if(!ExtExpert.InitMoney(money))
         {
          //--- failed
          printf(__FUNCTION__+": error initializing money");
          ExtExpert.Deinit();
          return(-7);
         }
    //--- Set money parameters
       money.Percent(Money_FixLot_Percent);
       money.Lots(Money_FixLot_Lots);
    //--- Check all trading objects parameters
       if(!ExtExpert.ValidationSettings())
         {
          //--- failed
          ExtExpert.Deinit();
          return(-8);
         }
    //--- Tuning of all necessary indicators
       if(!ExtExpert.InitIndicators())
         {
          //--- failed
          printf(__FUNCTION__+": error initializing indicators");
          ExtExpert.Deinit();
          return(-9);
         }
    //--- ok
       return(0);
      }
    //+------------------------------------------------------------------+
    //| Deinitialization function of the expert                          |
    //+------------------------------------------------------------------+
    void OnDeinit(const int reason)
      {
       ExtExpert.Deinit();
      }
    //+------------------------------------------------------------------+
    //| "Tick" event handler function                                    |
    //+------------------------------------------------------------------+
    void OnTick()
      {
       ExtExpert.OnTick();
      }
    //+------------------------------------------------------------------+
    //| "Trade" event handler function                                   |
    //+------------------------------------------------------------------+
    void OnTrade()
      {
       ExtExpert.OnTrade();
      }
    //+------------------------------------------------------------------+
    //| "Timer" event handler function                                   |
    //+------------------------------------------------------------------+
    void OnTimer()
      {
       ExtExpert.OnTimer();
      }
    //+------------------------------------------------------------------+
    

    Le code de l'Expert Advisor se compose de plusieurs sections.

    Section décrivant les propriétés du programme :

    #property copyright "Copyright 2012, MetaQuotes Software Corp."
    #property link      "https://www.mql5.com"
    #property version   "1.00"
    

    Fichiers inclus :

    #include <Expert\Expert.mqh>
    //--- available signals
    #include <Expert\Signal\SignalMA.mqh>
    //--- available trailing
    #include <Expert\Trailing\TrailingFixedPips.mqh>
    //--- available money management
    #include <Expert\Money\MoneyFixedLot.mqh>

    Le code de la classe CExpert (son instance est utilisée dans Expert Advisor) se trouve dans le fichier Expert.mqh.  

    Le fichier SignalMA.mqh contient le code source de la classe de signaux de trade sélectionnée - CSignalMA. Le fichier TrailingFixedPips.mqh contient le code source de la classe d'algorithme des positions ouvertes de suivi - CTrailingFixedPips. La gestion de l'argent et des risques sera implémentée par la classe CMoneyFixedLot comprise dans le fichier MoneyFixedLot.mqh.

    Viennent ensuite les paramètres d'entrée d'Expert Advisor :

    //--- inputs for expert
    input string             Expert_Title                  ="TestExpert"; // Document name
    ulong                    Expert_MagicNumber            =23689;        // 
    bool                     Expert_EveryTick              =false;        // 
    //--- inputs for main signal
    input int                Signal_ThresholdOpen          =10;           // Signal threshold value to open [0...100]
    input int                Signal_ThresholdClose         =10;           // Signal threshold value to close [0...100]
    input double             Signal_PriceLevel             =0.0;          // Price level to execute a deal
    input double             Signal_StopLevel              =50.0;         // Stop Loss level (in points)
    input double             Signal_TakeLevel              =50.0;         // Take Profit level (in points)
    input int                Signal_Expiration             =4;            // Expiration of pending orders (in bars)
    input int                Signal_MA_PeriodMA            =85;           // Moving Average(85,0,...) Period of averaging
    input int                Signal_MA_Shift               =0;            // Moving Average(85,0,...) Time shift
    input ENUM_MA_METHOD      Signal_MA_Method              =MODE_SMA;     // Moving Average(85,0,...) Method of averaging
    input ENUM_APPLIED_PRICE   Signal_MA_Applied             =PRICE_CLOSE;  // Moving Average(85,0,...) Prices series
    input double             Signal_MA_Weight              =1.0;          // Moving Average(85,0,...) Weight [0...1.0]
    //--- inputs for trailing
    input int                Trailing_FixedPips_StopLevel  =30;           // Stop Loss trailing level (in points)
    input int                Trailing_FixedPips_ProfitLevel=50;           // Take Profit trailing level (in points)
    //--- inputs for money
    input double             Money_FixLot_Percent          =10.0;         // Percent
    input double             Money_FixLot_Lots             =0.1;          // Fixed volume
    

    Les trois premiers paramètres (Expert_Title, Expert_MagicNumber et Expert_EveryTick) sont généraux. Ils sont toujours présents quels que soient les signaux de trading sélectionnés, les algorithmes de suivi et de gestion de l'argent et des risques.

    Le paramètre de chaîne Expert_Title indique le nom de l'Expert Advisor, Expert_MagicNumber indique son ID (cette valeur sera utilisée dans les paramètres des demandes de trade) et le paramètre Expert_EveryTick est utilisé pour définir le mode de fonctionnement d' EA. Si Expert_EveryTick est défini sur vrai, Expert Advisor appellera les fonctions du gestionnaire (vérification des conditions du trade, validation des opérations de trade, position d'ouverture de suivi) chaque fois qu'un nouveau tick arrive pour le symbole de travail.

    Après les paramètres généraux d'Expert Advisor viennent les paramètres d'entrée pour l'algorithme de signaux de trade sélectionné (dans notre cas, il s'agit des paramètres utilisés dans la classe CSignalMA).

    Nous avons sélectionné la classe CTrailingStopFixedPips de positions ouvertes de suivi. Il suit la position ouverte à une distance fixe déterminée par les niveaux Stop Loss et Take Profit, dont les valeurs sont définies en points "normaux" à 2/4 chiffres. Lorsque le prix se rapproche de la position ouverte par distance, qui dépasse le nombre de points défini par le niveau Trailing_FixedPips_StopLevel, Expert Advisor modifie les valeurs des niveaux Stop Loss et Take Profit (si Trailing_FixedPips_ProfitLevel > 0).  

    Les paramètres d'entrée Money_FixLot_Percent et Money_FixLot_Lots correspondent aux paramètres de l'algorithme avec un lot de trade fixe, implémenté dans la classe CMoneyFixedLot. Dans notre cas, la trade sera effectué avec un volume fixe égal à la valeur de Money_FixLot_Lots.

    La classe CMoneyFixedLot implémente également l'algorithme de gestion des risques : s'il y a une perte (en pourcentage donné des fonds propres actuels) indiquée dans le paramètre Inp_Money_FixLot_Percent, la classe CMoneyFixedLot recommandera à l'Expert Advisor de clôturer de force la position non rentable, et de fait, il sera achevé.

    Après les paramètres d'entrée de l'Expert Advisor, l'objet ExtExpert de la classe CExpert est déclaré :

    CExpert ExtExpert;
    

    C'est l'instance de la classe de stratégie de trading.

    Étant une instance de la classe CExpert, l'objet ExtExpert comporte des références aux objets d’enfants du CExpertSignal (la classe de base des signaux de trade), le CExpertMoney (la classe de base de gestion de l'argent et des risques) et le CExpertTrailing (la classe de base des positions ouvertes de suivi) cours. De plus, la classe CExpert comporte des instances des classes CExpertTrade, SSymbolInfo, CAccountInfo, CPositionInfo, COrderInfo et le conteneur CIndicators.

    Pour définir les paramètres d'Expert Advisor, vous devez créer des instances de classes correspondantes et indiquer des références aux objets créés dans la classe ExtExpert.

    Examinons la fonction OnInit de l'initialisation d'Expert Advisor. Ici, nous initialisons et configurons les propriétés de la classe ExtExpert.


    1. Initialisation de la classe ExtExpert :

    //--- Initializing expert
       if(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber))
         {
          //--- failed
          printf(__FUNCTION__+": error initializing expert");
          ExtExpert.Deinit();
          return(-1);
         }

    L'objet ExtExpert est initialisé à l'aide de la méthode Init. Ici, nous définissons le symbole, le délai, le drapeau de la méthode appelant à chaque tick, l'ID d'Expert Advisor, et créons et initialisons également des objets privés de classes (à cette étape, les classes CExpertSignal, CExpertMoney et CExpertTrailing sont utilisées comme objets de gestion des signaux, suivi et argent).

    Si l'objet ExtExpert ne s'initialise pas correctement, Expert Advisor sera résilié avec le code retour -1.


    2. Créez et configurez les propriétés de l'objet Signal

    //--- Creating signal
       CExpertSignal *signal=new CExpertSignal;
       if(signal==NULL)
         {
          //--- failed
          printf(__FUNCTION__+": error creating signal");
          ExtExpert.Deinit();
          return(-2);
         }
    //---
       ExtExpert.InitSignal(signal);
       signal.ThresholdOpen(Signal_ThresholdOpen);
       signal.ThresholdClose(Signal_ThresholdClose);
       signal.PriceLevel(Signal_PriceLevel);
       signal.StopLevel(Signal_StopLevel);
       signal.TakeLevel(Signal_TakeLevel);
       signal.Expiration(Signal_Expiration);
    //--- Creating filter CSignalMA
       CSignalMA *filter0=new CSignalMA;
       if(filter0==NULL)
         {
          //--- failed
          printf(__FUNCTION__+": error creating filter0");
          ExtExpert.Deinit();
          return(-3);
         }
       signal.AddFilter(filter0);
    //--- Set filter parameters
       filter0.PeriodMA(Signal_MA_PeriodMA);
       filter0.Shift(Signal_MA_Shift);
       filter0.Method(Signal_MA_Method);
       filter0.Applied(Signal_MA_Applied);
       filter0.Weight(Signal_MA_Weight);
    

    La configuration de l'objet signaux de trade consiste en plusieurs étapes :

    • Création de l'objet signal et réglage de ses paramètres ;
    • Création d'un module de signaux de trade et son ajout à l'instance de classe CExpertSignal.

    Si l'objet ExtExpert ne s'initialise pas avec succès, Expert Advisor sera résilié avec un code de retour (de -2 à -3), cela dépend de l'étape à laquelle une erreur s'est produite.

    Selon la façon dont les paramètres ont été indiqués dans l'assistant MQL5, le code approprié est généré.

    //--- Set signal parameters
       filter0.PeriodMA(85);                        //--- Parameter was set as fixed in MQL5 Wizard
                                                       //--- (gray icon - fixed value equal to 85)
       filter0.SlowPeriod(Signal_MA_Shift);      //--- Parameter was set as input variable
                                                       //--- (blue icon - input parameter of Expert Advisor)
    

    Si le paramètre est fixé et que sa valeur ne diffère pas de la valeur par défaut, il ne sera pas porté dans le code généré. Dans ce cas, la valeur par défaut du paramètre (indiquée dans la classe correspondante) sera utilisée.


    3. Créez et configurez les propriétés de l'objet de suivi

    //--- Creation of trailing object
       CTrailingFixedPips *trailing=new CTrailingFixedPips;
       if(trailing==NULL)
         {
          //--- failed
          printf(__FUNCTION__+": error creating trailing");
          ExtExpert.Deinit();
          return(-4);
         }
    //--- Add trailing to expert (will be deleted automatically))
       if(!ExtExpert.InitTrailing(trailing))
         {
          //--- failed
          printf(__FUNCTION__+": error initializing trailing");
          ExtExpert.Deinit();
          return(-5);
         }
    //--- Set trailing parameters
       trailing.StopLevel(Trailing_FixedPips_StopLevel);
       trailing.ProfitLevel(Trailing_FixedPips_ProfitLevel);
    La configuration de l'objet de suivi consiste également en plusieurs étapes :
    • Création de l'objet de suivi ;
    • Ajout de suivi à l'expert ;
    • Définition des paramètres de suivi.

    Si l'objet de suivi ne s'initialise pas avec succès, Expert Advisor sera résilié avec un code de retour (de -4 à -5), qui dépend de l'étape à laquelle une erreur s'est produite.


    4. Créez et configurez les propriétés de l'objet argent

    //--- Creation of money object
       CMoneyFixedLot *money=new CMoneyFixedLot;
       if(money==NULL)
         {
          //--- failed
          printf(__FUNCTION__+": error creating money");
          ExtExpert.Deinit();
          return(-6);
         }
    //--- Add money to expert (will be deleted automatically))
       if(!ExtExpert.InitMoney(money))
         {
          //--- failed
          printf(__FUNCTION__+": error initializing money");
          ExtExpert.Deinit();
          return(-7);
         }
    //--- Set money parameters
       money.Percent(Money_FixLot_Percent);
       money.Lots(Money_FixLot_Lots);

    La configuration de l'objet de gestion de l'argent et des risques consiste également de 4 étapes :

    • Création d'objet argent;
    • Ajout de l'argent à l'expert ;
    • Réglage des paramètres d'argent.

    Si l'objet argent ne s'initialise pas avec succès, Expert Advisor sera résilié avec un code de retour (de -6 à -7), cela dépend de l'étape à laquelle une erreur s'est produite.


    5. Initialisez tous les indicateurs utilisés dans les classes

    //--- Check all trading objects parameters
       if(!ExtExpert.ValidationSettings())
         {
          //--- failed
          ExtExpert.Deinit();
          return(-8);
         }
    //--- Tuning of all necessary indicators
       if(!ExtExpert.InitIndicators())
         {
          //--- failed
          printf(__FUNCTION__+": error initializing indicators");
          ExtExpert.Deinit();
          return(-9);
         }
    //--- ok
       return(0);

    Après avoir créé et initialisé des objets de signaux de trade, de suivi et de gestion de l'argent, la méthode ValidationSettings() d'ExtExpert est appelée. Après cela, la méthode InitIndicators() de l'objet ExtExpert est appelée. Elle initialise les indicateurs utilisés dans les objets signal, suivi et argent.

    La gestion des événements OnDeinit, OnTick, OnTrade et OnTimer est effectuée en appelant les méthodes appropriées de la classe ExtExpert.

    Si vous souhaitez connaître les détails de l'implémentation des méthodes CExpert, vous pouvez consulter le code source de l'indicateur, situé dans '\<client_terminal_directory>\MQL5\Include\Expert\expert.mqh'.


    3. Vérification du conseiller expert créé dans le Testeur de Stratégie MetaTrader 5

    Si tous les composants de la Bibliothèque Standard sont présents, le code de l'Expert Advisor généré se compile avec succès :

    Figure 10. Compilation réussie du code source d'Expert Advisor créé dans l'assistant MQL5

    Figure 10. Compilation réussie du code source d'Expert Advisor créé dans l'assistant MQL5

    L'Expert Advisor résultant négociera selon des algorithmes sélectionnés de signaux de trade, de positions ouvertes de suivi et de gestion de l'argent et des risques.

    Vous pouvez vérifier le fonctionnement de votre système de trading nouvellement créé à l'aide de Strategy Tester à partir de MetaTrader 5 terminal client . Sur la figure 11, vous pouvez voir les résultats des tests sur les données historiques avec les paramètres par défaut (EURUSD, H1, 2010.01.01-2011.06.01) :

    Figure 11. Résultats des tests d’Expert Advisor sur les données historiques (EURUSD, H1)

    Figure 11. Résultats des tests d’Expert Advisor sur les données historiques (EURUSD, H1)


    Le meilleur ensemble de paramètres d'Expert Advisor peut être trouvé après optimization dans MetaTrader 5 Strategy Tester.


    Conclusion

    L'utilisation des classes de stratégies de trading facilite considérablement la création et le test de vos idées de trading. Désormais, l'intégralité du code source d'Expert Advisor peut être construit directement dans MetaEditor à l'aide de son assistant MQL5 sur la base de modules de bibliothèque standard prêts à l'emploi ou de votre propres modules

    Si vous ne souhaitez pas ou ne pouvez pas rédiger votre propre module de signaux de trading, vous pouvez toujours bénéficier du service Jobs et commander soit un robot de trading complet, soit uniquement les modules requis. Cette approche offre des avantages supplémentaires :

    • Le coût de l’élaboration d'un module séparé doit être inférieur au coût de l'ensemble de l'Expert Advisor.
    • Le module obtenu peut être réutilisé pour créer à la fois un Expert Advisor autonome et toute une famille de robots de trading (basés sur ce module) à l'aide de l'assistant MQL5.
    • Le module commandé doit être strictement conforme aux exigences supplémentaires de l'assistant MQL5, ce qui donne un contrôle supplémentaire sur la qualité du code.

    Traduit du russe par MetaQuotes Ltd.
    Article original : https://www.mql5.com/ru/articles/171

    Fichiers joints |
    testexpert.mq5 (7.49 KB)
    L'exemple simple de création d'un indicateur à l'aide d'une logique floue L'exemple simple de création d'un indicateur à l'aide d'une logique floue
    L’article est consacré à l’application pratique du concept de logique floue pour l’analyse des marchés financiers. Nous proposons l’exemple de l’indicateur générant des signaux basés sur deux règles floues fondées sur l’indicateur Enveloppes. L’indicateur développé utilise plusieurs tampons d’indicateurs: 7 tampons pour les calculs, 5 tampons pour l’affichage des graphiques et 2 tampons de couleur.
    Gaz neuronal en croissance : Implémentation en MQL5 Gaz neuronal en croissance : Implémentation en MQL5
    L'article étale un exemple de comment élaborer un programme MQL5 mettant en implémentant l'algorithme adaptatif de groupement appelé Growing neural gas (GNG). L'article est destiné aux utilisateurs qui ont étudié la documentation du langage et qui ont certaines compétences en programmation et des connaissances de base dans le domaine de la neuro-informatique.
    Créez votre propre Veille du Marché en utilisant les classes de bibliothèque standard Créez votre propre Veille du Marché en utilisant les classes de bibliothèque standard
    Le nouveau terminal client MetaTrader 5 et le langage MQL5 offrent de nouvelles opportunités pour présenter des informations visuelles au trader. Dans cet article, nous proposons un ensemble de classes universel et extensible, qui gère tout le travail d'organisation de l'affichage des informations textuelles arbitraires sur le graphique. L'exemple de l'indicateur Veille du Marché est présenté.
    Le gestionnaire d'événements "New Bar" Le gestionnaire d'événements "New Bar"
    Le langage de programmation MQL5 est en mesure de résoudre des problèmes à un tout nouveau niveau. Même ces tâches, qui offrent déjà de telles solutions, grâce à la programmation orientée objet peuvent atteindre un niveau supérieur. Dans cet article, nous prenons un exemple particulièrement simple de vérification d'une nouvelle barre sur un graphique, qui a été transformé en un outil plutôt puissant et polyvalent. Quel outil ? Découvrez-le dans cet article.