
MQL5 Cookbook : Utilisation de différents modes d'impression
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
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
À 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
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
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
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
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





- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Vous acceptez la politique du site Web et les conditions d'utilisation