English Русский 中文 Español Deutsch 日本語 Português 한국어 Italiano Türkçe
MQL5 Cookbook : Utilisation de différents modes d'impression

MQL5 Cookbook : Utilisation de différents modes d'impression

MetaTrader 5Exemples | 13 janvier 2022, 09:40
114 0
Anatoli Kazharski
Anatoli Kazharski


Introduction

Ceci est le premier article de la série MQL5 Cookbook. Je commencerai par des exemples simples pour permettre à ceux qui font leurs premiers pas en programmation de se familiariser petit à petit avec le nouveau langage. Je me souviens de mes premiers efforts pour concevoir et programmer des systèmes de trading qui, je peux le dire, étaient assez difficiles, étant donné que c'était le premier langage de programmation de ma vie. Jusque-là, je pensais que je n'étais pas fait pour ça et que je ne pourrais presque jamais le comprendre.

Cependant, cela s'est avéré plus facile que je ne le pensais et il ne m'a fallu que quelques mois avant de pouvoir développer un programme assez complexe. Vous pouvez en savoir plus à ce sujet dans l'article intitulé "Opportunités illimitées avec MetaTrader 5 et MQL5".

Ici, je vais essayer de guider les développeurs débutants d'Expert Advisors tout au long du processus de programmation, en allant du simple au complexe. Je ne vais pas copier ici les informations disponibles sous Aide dans le menu MetaEditor 5, alors préparez-vous à devoir appuyer sur F1 assez souvent. Dans le même temps, cette série d'articles vous fournira de nombreux exemples, fonctions et schémas prêts à l'emploi qui peuvent être utilisés dans vos développements de manière originale et personnalisée.

Alors commençons. Dans cet article, nous allons créer un script simple qui imprime certaines des propriétés du symbole dans différents modes. Lors de l'élaboration d'un programme, en particulier au début du processus d'apprentissage, il y aura souvent des situations où le programme ne répondra pas comme prévu. Si cela se produit, vous devrez vérifier les valeurs de certaines variables impliquées dans les calculs. Dans notre cas, nous examinerons de près trois méthodes où nous utiliserons les fonctions Print(), Comment() et Alert(). Et vous pourrez ensuite décider vous-même quelle méthode vous convient le mieux.


L’assistant MQL5

Mon étude de MQL5 a commencé avec des scripts. C'est assez facile et rapide. Lorsque le script est chargé, il exécute la fonction que vous avez créée et est ensuite supprimé du graphique. Cela vous permet d'expérimenter en déplacement et de voir dans quelle direction vous déplacer.

Si vous n'avez pas encore installé le terminal de trading MetaTrader 5, vous pouvez l'installer dès maintenant. Après l'installation, démarrez le terminal et ouvrez MetaEditor 5 en appuyant sur F4. Ce bouton peut être utilisé pour basculer rapidement entre le terminal de trading MetaTrader 5 et MetaEditor 5. Vous pouvez également démarrer MetaEditor 5 en cliquant sur le bouton approprié dans la barre d'outils du terminal. Assurez-vous d'étudier très bien l'interface du programme en utilisant Aide (F1) dans le terminal de trading et MetaEditor 5, car nous ne pouvons aborder que brièvement certains problèmes, voire pas du tout.

Démarrez MetaEditor 5 et appuyez sur Ctrl+N ou sur le bouton Nouveau sous le menu principal du panneau MetaEditor. Une fenêtre de l'assistant MQL5 s'ouvrira dans laquelle vous pourrez sélectionner le type de programme que vous souhaitez créer. Dans notre cas, nous sélectionnons Script et appuyons sur Suivant :

Fig. 1. Assistant MQL5 - Script

Fig. 1. Assistant MQL5 - Script

Vous devrez ensuite saisir le nom du script (nom de fichier). Par défaut, les scripts sont créés sous Metatrader 5\MQL5\Scripts\file_name.mq5. Dans ce répertoire, vous pouvez également créer d'autres dossiers pour regrouper vos fichiers selon leur objectif.

Fig. 2. Assistant MQL5 - Nom de fichier

Fig. 2. Assistant MQL5 - Nom de fichier

À ce stade, vous pouvez également ajouter des paramètres d'entrée, si nécessaire. Lorsque tout est défini et prêt, cliquez sur Terminer. Un nouveau document sera créé à l'aide du modèle et vous pourrez continuer avec le script :

//+------------------------------------------------------------------+
//|                                                   PrintModes.mq5 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
    
  }
//+------------------------------------------------------------------+


Écrire un code

Tout ce qui suit une double barre oblique est un commentaire et n'affecte pas l'exécution du programme. Il est toujours conseillé de fournir des commentaires détaillés à votre code car cela facilite considérablement la compréhension de la logique du programme, surtout après une longue pause.

Tout ce qui suit#property dans les trois premières lignes de code ci-dessus concerne les propriétés du programme. Vous trouverez plus d'informations sur chaque fonction et propriété dans MQL5 Reference. Pour visualiser rapidement la description d'une fonction donnée, il vous suffit de double-cliquer sur la fonction afin de la sélectionner et d'appuyer sur F1. La fenêtre d'aide s'ouvrira et vous fournira une description de la fonction sélectionnée.

Il est suivi de la fonction de script principale - OnStart() qui est celle qui contient toutes les autres fonctions et calculs.

Nous devons permettre la possibilité de sélectionner une méthode pour imprimer les informations requises avant l'exécution du programme. Cela signifie que nous devrions avoir un paramètre externe qui nous permettra de sélectionner le mode nécessaire dans la liste déroulante. De plus, nous devons spécifier une autre propriété (#property) qui sera responsable de l'ouverture d'une fenêtre avec les paramètres externes du script avant l'exécution du programme. Cette propriété est script_show_inputs. Nous l'ajouterons en dessous de toutes les autres propriétés que nous avons déjà dans le code :

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

Pour avoir la liste déroulante dans les paramètres externes, nous devons créer une énumération de tous les modes. Insérons ce code après les propriétés du programme :

// ENUMERATION
enum ENUM_PRINT_MODE
  {
   PRINT   = 0,
   COMMENT = 1,
   ALERT   = 2
  };
//---

Ceci est suivi du seul paramètre externe dans ce script - PrintMode:

// INPUT PARAMETERS
input ENUM_PRINT_MODE printMode=PRINT; // Print mode

Les paramètres d'entrée sont en règle générale situés au début du programme, le modificateur input qui définit le paramètre externe étant placé avant le type de variable. Si nous exécutons le script maintenant, une fenêtre de programme s'ouvrira et nous pourrons sélectionner un mode d'impression dans la liste déroulante du paramètre Mode d'impression :

Fig. 3. Fenêtre des paramètres du script

Fig. 3. Fenêtre des paramètres du script

Ensuite, nous créons des variables et leur attribuons des valeurs (dans notre cas, nous imprimerons des données de symboles) pour les imprimer davantage en utilisant le mode spécifié par l'utilisateur dans le paramètre externe. À cette fin, nous devons organiser une fonction utilisateur distincte - PrintSymbolProperties() - qui sera appelée dans la fonction principale OnStart().

Pour créer la fonction, il suffit d'insérer le code comme indiqué ci-dessous :

//+------------------------------------------------------------------+
//| PRINTING SYMBOL PROPERTIES                                       |
//+------------------------------------------------------------------+
void PrintSymbolProperties()
  {
    
  }

Le type de la valeur à renvoyer doit être spécifié avant le nom de la fonction. Alternativement, si la fonction ne retourne rien, comme dans notre cas, nous devrions mettre void. De plus, nous devons écrire le code restant dans le corps de la fonction PrintSymbolProperties(), entre les accolades. Créons d'abord les variables :

string symb_symbol    = "";  // Symbol
int    symb_digits    = 0;   // Number of decimal places

int    symb_spread    = 0;   // Difference between the ask price and bid price (spread)
int    symb_stoplevel = 0;   // Stop levels
double symb_ask       = 0.0; // Ask price
double symb_bid       = 0.0; // Bid price

Le type de variable dépend du type de données qui lui seront affectées. Attribuons maintenant des valeurs à ces variables. Pour obtenir les propriétés des symboles, MQL5 fournit des fonctions spéciales pour chaque type de données.

symb_symbol    =Symbol();
symb_digits    =(int)SymbolInfoInteger(_Symbol,SYMBOL_DIGITS);
symb_spread    =(int)SymbolInfoInteger(_Symbol,SYMBOL_SPREAD);
symb_stoplevel =(int)SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL);
symb_ask       =SymbolInfoDouble(_Symbol,SYMBOL_ASK);
symb_bid       =SymbolInfoDouble(_Symbol,SYMBOL_BID);
//---

Pour assurer un apprentissage adéquat du matériel, utilisezMQL5 Reference pour étudier chaque fonction et tous les paramètres qu'ils transmettent. Toutes les propriétés des symboles y sont affichées dans un tableau auquel vous devrez souvent vous référer.

Maintenant que les variables ont des valeurs qui leur sont attribuées, il nous suffit d'écrire un code approprié pour chaque mode d'impression. Voilà à quoi ça ressemble :

//---
// If it says to print to the journal
   if(printMode==PRINT)
     {
      Print("Symbol: ",symb_symbol,"\n",
            "Digits: ",symb_digits,"\n",
            "Spread: ",symb_spread,"\n",
            "Stops Level: ",symb_stoplevel,"\n",
            "Ask: ",symb_ask,"\n",
            "Bid: ",symb_bid
            );
     }
//---
// If it says to print to the chart
   if(printMode==COMMENT)
     {
      int mb_res=-1; // Variable with the option selected in the dialog box
      //---
      Comment("Symbol: ",symb_symbol,"\n",
              "Digits: ",symb_digits,"\n",
              "Spread: ",symb_spread,"\n",
              "Stops Level: ",symb_stoplevel,"\n",
              "Ask: ",symb_ask,"\n",
              "Bid: ",symb_bid
              );
      //---
      // Open a dialog box
      mb_res=MessageBox("Do you want to delete comments from the chart?",NULL,MB_YESNO|MB_ICONQUESTION);
      //---
      // If "Yes" is clicked, remove the comments from the chart 
      if(mb_res==IDYES) { Comment(""); }
      //---
      return;
     }
//---
// If it says to print to the alert window
   if(printMode==ALERT)
     {
      Alert("Symbol: "+symb_symbol+"\n",
            "Digits: "+IntegerToString(symb_digits)+"\n",
            "Spread: "+IntegerToString(symb_spread)+"\n",
            "Stops Level: "+IntegerToString(symb_stoplevel)+"\n",
            "Ask: "+DoubleToString(symb_ask,_Digits)+"\n",
            "Bid: "+DoubleToString(symb_bid,_Digits)
            );
     }
//---

Si vous sélectionnez PRINT pour le paramètre externe de l'Expert Advisor, les informations seront imprimées dans le journal des Expert Advisors (Toolbox- onglet Experts) :

Fig. 4. Boîte à outils - Onglet Experts

Fig. 4. Boîte à outils - Onglet Experts

Si vous sélectionnez COMMENT (commentaire), les informations seront affichées dans le coin supérieur gauche du graphique. Une fois que les informations apparaissent dans le graphique, la fonction MessageBox() ouvre une boîte de dialogue qui vous invite à supprimer les commentaires du graphique :

Fig. 5. Commentaires dans le coin supérieur gauche du graphique

Fig. 5. Commentaires dans le coin supérieur gauche du graphique

Si vous optez pour ALERT, après avoir exécuté le script, une fenêtre d'alerte contenant les informations demandées ou un simple message utilisateur apparaîtra. Dans ce cas, comme dans le cas de l'option PRINT, les informations sont également imprimées dans le journal mais elles sont en plus accompagnées d'une notification sonore.

Fig. 6. Fenêtre d'alerte

Fig. 6. Fenêtre d'alerte

Vous trouverez ci-dessous le code complet du script :

//+------------------------------------------------------------------+
//|                                                   PrintModes.mq5 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright   "Copyright 2012, MetaQuotes Software Corp."
#property link        "http://tol64.blogspot.com"
#property description "email: hello.tol64@gmail.com"
#property version     "1.00"
#property script_show_inputs
//---
//--- ENUMERATION
enum ENUM_PRINT_MODE
  {
   PRINT   = 0,
   COMMENT = 1,
   ALERT   = 2
  };
//---
// INPUT PARAMETERS
input ENUM_PRINT_MODE printMode=PRINT; // Print mode
//---
//+------------------------------------------------------------------+
//| MAIN FUNCTION                                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   PrintSymbolProperties();
  }
//+------------------------------------------------------------------+
//| PRINTING SYMBOL PROPERTIES                                       |
//+------------------------------------------------------------------+
void PrintSymbolProperties()
  {
   string symb_symbol    = "";  // Symbol
   int    symb_digits    = 0;   // Number of decimal places
   int    symb_spread    = 0;   // Difference between the ask price and bid price (spread)
   int    symb_stoplevel = 0;   // Stop levels
   double symb_ask       = 0.0; // Ask price
   double symb_bid       = 0.0; // Bid price
//---
   symb_symbol    =Symbol();
   symb_digits    =(int)SymbolInfoInteger(_Symbol,SYMBOL_DIGITS);
   symb_spread    =(int)SymbolInfoInteger(_Symbol,SYMBOL_SPREAD);
   symb_stoplevel =(int)SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL);
   symb_ask       =SymbolInfoDouble(_Symbol,SYMBOL_ASK);
   symb_bid       =SymbolInfoDouble(_Symbol,SYMBOL_BID);
//---
// If it says to print to the journal
   if(printMode==PRINT)
     {
      Print("Symbol: ",symb_symbol,"\n",
            "Digits: ",symb_digits,"\n",
            "Spread: ",symb_spread,"\n",
            "Stops Level: ",symb_stoplevel,"\n",
            "Ask: ",symb_ask,"\n",
            "Bid: ",symb_bid
            );
     }
//---
// If it says to print to the chart
   if(printMode==COMMENT)
     {
      int mb_res=-1; // Variable with the option selected in the dialog box
      //---
      Comment("Symbol: ",symb_symbol,"\n",
              "Digits: ",symb_digits,"\n",
              "Spread: ",symb_spread,"\n",
              "Stops Level: ",symb_stoplevel,"\n",
              "Ask: ",symb_ask,"\n",
              "Bid: ",symb_bid
              );
      //---
      // Open a dialog box
      mb_res=MessageBox("Do you want to delete comments from the chart?",NULL,MB_YESNO|MB_ICONQUESTION);
      //---
      // If "Yes" is clicked, remove the comments from the chart  
      if(mb_res==IDYES) { Comment(""); }
      //---
      return;
     }
//---
// If it says to print to the alert window
   if(printMode==ALERT)
     {
      Alert("Symbol: "+symb_symbol+"\n",
            "Digits: "+IntegerToString(symb_digits)+"\n",
            "Spread: "+IntegerToString(symb_spread)+"\n",
            "Stops Level: "+IntegerToString(symb_stoplevel)+"\n",
            "Ask: "+DoubleToString(symb_ask,_Digits)+"\n",
            "Bid: "+DoubleToString(symb_bid,_Digits)
            );
     }
  }

//+------------------------------------------------------------------+


Conclusion

Nous terminerons cet article ici. En plus des méthodes décrites ci-dessus, vous pouvez également écrire des données dans un fichier. Il peut s'agir d'un fichier texte brut ou même d'un rapport HTML joliment formaté à l'aide de CSS. Mais ces méthodes sont beaucoup plus compliquées pour les débutants et celles fournies ci-dessus devraient suffire pour débuter.

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

Fichiers joints |
printmodes.mq5 (3.54 KB)
MQL5 Cookbook : Obtention des propriétés de la position MQL5 Cookbook : Obtention des propriétés de la position
Dans cet article, nous allons créer un script qui récupère toutes les propriétés de position et les affiche à l'utilisateur dans une boîte de dialogue. Lors de l'exécution du script, vous pourrez sélectionner l'un des deux modes disponibles dans la liste déroulante des paramètres externes : soit pour afficher les propriétés de position uniquement sur le symbole actuel, soit pour afficher les propriétés de position sur tous les symboles.
Le MQL5 Market fête ses un an Le MQL5 Market fête ses un an
Une année s'est écoulée depuis le lancement des ventes sur le MQL5 Market. Ce fut une année de travail acharné, qui a transformé le nouveau service en le plus grand magasin de robots de trading et d’indicateurs techniques pour la plate-forme MetaTrader 5.
MQL5 Cookbook : Propriétés de position dans le panneau d'informations personnalisé MQL5 Cookbook : Propriétés de position dans le panneau d'informations personnalisé
Cette fois, nous allons créer un simple Expert Advisor qui obtiendra les propriétés de position sur le symbole actuel et les affichera sur le panneau d'informations personnalisé pendant le trading manuel. Le panneau d'informations sera créé à l'aide d'objets graphiques et les informations affichées seront actualisées à chaque tick. Cela va être beaucoup plus pratique que d'avoir tout le temps à exécuter manuellement le script décrit dans l'article précédent de la série intitulé "MQL5 Cookbook : Getting Position Properties".
Widgets de signaux de trading MetaTrader 4 et MetaTrader 5 Widgets de signaux de trading MetaTrader 4 et MetaTrader 5
Récemment, les utilisateurs de MetaTrader 4 et MetaTrader 5 ont eu l'opportunité de devenir un fournisseur de signaux et de réaliser des bénéfices supplémentaires. Maintenant, vous pouvez afficher votre succès de trading sur votre site Web, votre blog ou votre page de réseau social à l'aide des nouveaux widgets. Les avantages de l'utilisation des widgets sont évidents : ils augmentent la popularité des fournisseurs de signaux, établissent leur réputation de traders prospères et attirent de nouveaux abonnés. Tous les traders qui placent des widgets sur d'autres sites Web peuvent profiter de ces avantages.