
MQL5 - Vous aussi, vous pouvez devenir un maître de ce langage
Introduction
Dans cet article, je vais faire quelque chose de différent de ce que j'ai fait dans les articles précédents. Fondamentalement, cet article est destiné à ceux qui ont peu ou pas de connaissances de MQL5 ou de la programmation en général. L'article sera donc une interview de moi-même, dans laquelle j'expliquerai un peu comment apprendre MQL5 à partir de zéro et devenir un professionnel.
Un peu d'histoire
Depuis que j'ai commencé à écrire des articles pour la communauté MQL5, j'ai reçu de nombreux commentaires. De nombreuses personnes me contactent pour me demander comment j'ai appris à programmer en MQL5 pour pouvoir faire les choses décrites dans mes articles. La plupart de ces personnes sont enthousiastes, à la recherche d'un guide de base pour faire leurs premiers pas dans la programmation. Cet article est donc dédié à vous tous, passionnés et novices de la programmation MQL5, désireux d'apprendre la programmation MQL5.
Avant d'aborder ce sujet, je dois dire quelque chose. Le but de cet article n'est pas de vous démotiver mais, au contraire, d'augmenter encore votre motivation.
Vous pourriez penser que je dois avoir de nombreuses années d'expérience en programmation MQL5. Mais au moment où j'écris cet article, je n'utilise le langage MQL5 que depuis un an et demi. C'est vrai, j'ai moins de 2 ans d'expérience en tant que programmeur MQL5. Vous vous demandez probablement comment quelqu'un avec si peu d'expérience en programmation MQL5 peut réussir à faire les choses pour MetaTrader 5 qui ont été montrées dans les articles.
En fait, les développeurs du langage de programmation MQL5 ont eu l'idée géniale de faire ressembler le langage au langage C/C++. Donc, si un programmeur a une grande expérience de C/C++, il sera assez facile d'apprendre MQL5, puisqu'il n'est pas nécessaire de réapprendre tous les concepts, la syntaxe et les commandes.
Pourquoi est-ce que je dis cela ? Parce que je suis un programmeur professionnel en C/C++ depuis le début des années 2000, c'est-à-dire que je programme en C/C++ depuis plus de 23 ans. Si je devais apprendre un nouveau langage pour faire quelque chose pour MetaTrader 5, il est fort probable que je finirais par abandonner.
Beaucoup de gens pensent que pour devenir un bon programmeur, il faut suivre des cours. Mais pour apprendre réellement à programmer, il ne faut pas avoir peur de faire des erreurs. Il ne faut jamais s'attacher à un code ou à une idée. Vous devez toujours chercher à expérimenter et à essayer de nouvelles choses.
Cela peut sembler un peu étrange, car de nombreuses nouvelles personnes aiment toujours faire la même chose et de la même manière. Mais une personne qui souhaite devenir un grand programmeur cherche toujours d'autres façons de faire la même chose. De nombreuses personnes ne comprennent pas non plus qu'un programmeur sera toujours inspiré par d'autres. Ils peuvent prendre un code source fonctionnel développé par un programmeur plus expérimenté et le modifier petit à petit, en expérimentant et en observant le résultat. Ils apprennent ainsi comment le programme est construit.
Certains pensent que pour apprendre MQL5, il faut commencer par étudier quelque chose. D'ailleurs, si quelqu'un qui n'a pas de connaissances préalables me demande comment apprendre, je lui recommande toujours de commencer par le plus simple. En d'autres termes, apprenez un peu de C pour connaître réellement la syntaxe et la logique de programmation, ainsi que les commandes. Une fois que vous avez compris les bases du langage C, commencez à étudier le C++ et, en même temps, à pratiquer MQL5. Le simple fait d'avoir déjà des connaissances de base en C vous aidera grandement à commencer à programmer dans MQL5.
Certaines personnes peuvent penser que le langage C est obsolète. Mais la vérité est que le langage C est extrêmement bien documenté et largement utilisé. Vous pouvez trouver beaucoup de matériel pour apprendre à utiliser le C. Notez que je ne dis pas que vous devez vous plonger dans le C. Bien au contraire, si vous apprenez quelques commandes de base, la syntaxe et les commandes, cela vous suffira pour démarrer avec MQL5.
Cela peut paraître un peu décourageant : apprendre le C pour développer des avancées dans MQL5 ? Peut-être, si vous faites beaucoup d'efforts et trouvez quelqu'un qui veuille bien vous enseigner, pourrez-vous commencer directement avec MQL5. Mais d'après ma première expérience et les avis d'autres personnes, je peux dire que la tâche ne sera pas si facile. Presque tout le matériel de qualité est concentré ici, dans la communauté MQL5. Dans le reste d'internet, le matériel est dispersé et peut être de mauvaise qualité, ce qui fera plus de mal que de bien. En ce qui concerne les langages C et C++, il existe une quantité énorme de documents excellents et très accessibles. C'est donc à vous de choisir par où commencer.
Mon premier code en MQL5
Beaucoup de gens pensent que puisque je sais déjà programmer en C/C++, je me suis immédiatement lancé dans des projets compliqués et élaborés en MQL5. J'aimerais pouvoir dire que c'est ainsi que tout a commencé. Mais la réalité s'est avérée bien différente.
Lorsque nous commençons à élaborer nos propres solutions, nous partons souvent de ce que nous pensons déjà savoir. Dans mon cas, lorsque j'ai commencé à utiliser MQL5, je ne disposais que de la documentation du langage. Je ne savais même pas qu'il existait une communauté dédiée à l'aide aux autres programmeurs intéressés.
J'ai donc commencé à expérimenter en étudiant la documentation et en examinant les codes sources fournis avec MetaEditor. Voici mon premier code réel que j'ai créé sur la base de ce que j'ai compris.
01. //+------------------------------------------------------------------+ 02. #property copyright "Daniel Jose" 03. #property version "1.00" 04. #property description "Modify special chart properties" 05. #property script_show_inputs 06. //+------------------------------------------------------------------+ 07. enum eWhat { 08. eScaleDate = CHART_SHOW_DATE_SCALE, //Time scale 09. eScalePrice = CHART_SHOW_PRICE_SCALE //Price scale 10. }; 11. enum eOp { 12. eFalse, //Makes hidden 13. eTrue //Makes visible 14. }; 15. //+------------------------------------------------------------------+ 16. input eWhat user00 = eScaleDate; //Graphic property 17. input eOp user01 = eFalse; //What to do? 18. //+------------------------------------------------------------------+ 19. void OnStart() 20. { 21. ChartSetInteger(0, (ENUM_CHART_PROPERTY_INTEGER) user00, user01); 22. } 23. //+------------------------------------------------------------------+
Code source de mon premier programme MQL5
Il n'y a rien d'extraordinaire ou d'innovant. Il s'agit principalement de code, dont l'objectif était de vérifier si j'avais bien compris la documentation et la manière dont les éléments pouvaient être définis et utilisés. La vidéo suivante montre le résultat de l'exécution du code.
Vidéo de démonstration
Il s'agit de quelque chose d'extrêmement basique. Mais le fait de pouvoir créer ce code de manière totalement autonome, sans l'aide de personne, à l'exception de la documentation et des codes sources de MetaEditor, m'a montré que je pouvais faire autre chose. Il m'a suffi d'adapter mes connaissances en C et C++ à MQL5. C'est à ce moment-là que les choses ont vraiment commencé à progresser.
Peut-être qu'en regardant le code simple ci-dessus, vous n'y trouvez rien d'intéressant. Mais comme d'habitude, la première tâche de tout débutant dans un langage de programmation est de créer un code connu sous le nom de "HELLO WORLD"où il s'agit d'afficher un message à l'écran.
Mais j'ai largement dépassé la phase du code du "HELLO WORLD". J'ai donc essayé quelque chose d'un peu plus compliqué. Mais comme je n'avais pas beaucoup d'expérience et de compréhension du fonctionnement de MQL5, j'ai commencé par développer un script. C'était quelque chose de beaucoup plus facile pour moi, étant donné le peu d'expérience et de connaissance de la façon dont les choses se passent réellement.
Ce n'est qu'après un certain temps que j'ai commencé à réaliser que MQL5 n'est pas un langage procédural, mais un langage événementiel. Cette découverte a radicalement changé mon approche de la programmation et de l'analyse de code. Voulant améliorer mes compétences, j'ai commencé à étudier et à lire des articles ici dans la communauté MQL5, et j'ai réalisé que même si beaucoup arrivaient à faire fonctionner leur code, ils apprenaient MQL5 d'une manière relativement basique, du moins à mon avis. J'ai donc commencé à développer et à expérimenter des solutions plus complexes qui exploreraient plus en profondeur les capacités de la plateforme MetaTrader 5 et du langage MQL5.
À un moment donné, j'ai décidé de commencer à partager les résultats de mes expériences. C'est ainsi que mon premier article est paru. C'est une chose de construire un code et c'en est une autre d'expliquer comment il est construit et conçu. Je savais que ces articles seraient lus aussi bien par des personnes expérimentées que par des débutants.
Les articles ont été modifiés tant dans leur forme que dans leur contenu. Je l'ai fait pour que même les personnes peu expérimentées puissent comprendre l'information. Et même si vous ne pouvez pas absorber immédiatement toutes les connaissances présentées dans le matériel, au fil du temps, à mesure que vous améliorez vos compétences en programmation, vous serez en mesure d'assimiler correctement ce que j'essaie de transmettre dans un article particulier.
Les connaissances doivent être partagées. Je ne vois aucune gloire à mourir avec toute sa sagesse sans laisser derrière soi quelque chose de précieux, quelque chose qui pourrait changer la vision du monde de quelqu'un, l'éveiller à quelque chose que beaucoup ne réalisent pas, parce qu'ils gardent toujours la tête baissée.
Mais revenons au code. Je veux vous montrer que même quelques lignes de code peuvent contenir beaucoup plus d'informations et de connaissances qu'un millier de lignes de code. Bien qu'à l'origine, toutes les informations qui ne font pas partie de la syntaxe C/C++, et donc de MQL5, n'étaient pas en anglais. Mais ce n'est qu'un détail. Voyons ce petit code et comprenons comment il fonctionne. Et surtout : Pourquoi cela fonctionne-t-il ?
Analyse du code
Les lignes 2, 3 et 4 pourraient être supprimées du code. En fait, elles ne servent à MetaTrader 5 qu'à informer l'utilisateur de l'objectif du code. En tant qu'utilisateur, vous pouvez simplement supprimer ces lignes de votre code d'apprentissage.
La ligne 5 est très importante car sans elle, MetaTrader 5 ne comprendra pas que le script peut être personnalisé par l'utilisateur à travers une certaine structure d'entrée, qui dans ce cas est 'inputs' montré sur les lignes 16 et 17. Nous y arriverons bientôt.
Il y a maintenant quelque chose que beaucoup ne comprennent peut-être pas. Surtout s'ils n'ont étudié que MQL5 ou s'ils viennent d'un autre langage très différent de C/C++. Je parle des énumérations qui sont présentes dans les lignes 07 et 11.
Il est fort probable que vous soyez dérouté par ces constructions. Vous pouvez même imaginer qu'il s'agit de quelque chose de trop compliqué pour vous. Mais c'est justement parce que MQL5 a été conçu pour attirer les programmeurs C/C++ qu'il est si agréable d'être utilisé par ceux qui ont déjà une petite expérience en C/C ++. Mais comprenons les énumérations, au moins superficiellement.
Une énumération peut être considérée comme une séquence de données à laquelle on peut attribuer ou non une valeur. Si vous n'attribuez pas de valeur, le décompte commencera toujours par la première valeur possible qui, dans ce cas, est 0. Par conséquent, l'énumération définie à la ligne 11 suit le même principe que la valeur 0 ou 1. En C/C++, comme en MQL5, la valeur 0 est considérée comme fausse, et la valeur 1 est considérée comme vraie.
Par conséquent, à la ligne 12, où la valeur eFalse est définie, nous avons la valeur0, et à la ligne 13, qui est la deuxième valeur de l'énumération, nous avons la valeur 1. Si nous avions plus de choses définies, elles suivraient la séquence, donc la suivante serait 2, 3, et ainsi de suite. C'est le cas le plus simple.
Je voudrais attirer votre attention sur un autre point. À la fin de la ligne 12, nous avons quelque chose qui serait un commentaire en C/C++. Nous avons également le même type de choses dans d'autres lignes. Concentrons-nous sur la ligne 12, mais cela s'applique également à tous les autres endroits.
Si nous regardons le script lorsqu'il est lancé sur le graphique, nous verrons la Figure 01. J'y souligne ce qui correspond exactement au commentaire de la ligne 12.
Figure 01 - Fenêtre d'interaction avec l'utilisateur
Ces éléments simplifient grandement le codage en MQL5. Dans d'autres langages, nous devrions faire plusieurs choses pour obtenir ce qui est fait ici dans MQL5 d'une manière aussi simple et pratique. Par conséquent, vous devez comprendre qu'écrire un commentaire dans le code est la bonne chose à faire, car cela vous permet non seulement de rendre le code plus compréhensible, mais aussi de personnaliser le message qui sera affiché à l'utilisateur.
Revenons maintenant à la ligne 07 où nous avons une autre énumération. Cette énumération est différente de celle que je viens d'expliquer. Il ne s'agit pas de choses totalement différentes : la différence est que nous attribuons maintenant des valeurs à chacun des éléments. C'est-à-dire que le compilateur utilisera les valeurs que nous avons spécifiées, qui dans ce cas sont des constantes définies dans MQL5. On peut se poser la question : Pourquoi ne pas utiliser directement les constantes au lieu de les assigner à une énumération ? La raison en est la facilité de mise en œuvre. Si nous devions utiliser les constantes directement, nous devrions créer quelque chose d'autre, comme un tableau ou une structure, ce qui est beaucoup plus difficile. En utilisant mon approche, vous pouvez insérer n'importe quelle valeur dans n'importe quelle position ou séquence. Et si une constante intéressante apparaît dans la séquence que je déclare, je n'ai pas vraiment besoin d'assigner ou de déclarer cette constante ; tout ce que j'ai à faire, c'est d'ajouter du contenu à l'énumération, et le langage se chargera de garantir que les valeurs correctes sont utilisées et assignées de manière appropriée.
Voyez comment le fait d'avoir une base solide et bien construite dans un langage comme C/C++ nous aide à écrire du code MQL5. Ce que nous montrons ici n'est pas souvent présent dans le code MQL5. En fait, j'ai remarqué que beaucoup ont recours à des constructions beaucoup plus complexes et plus longues pour obtenir le même résultat que celui qu'ils ont obtenu ici. Notez que je n'ai finalement écrit qu'une seule ligne de code (ligne 21).
Prêtez maintenant attention à ce qui suit : dans la ligne 21 elle-même, qui est en fait la seule qui sera exécutée, nous devons effectuer une conversion de type explicite. Cela est nécessaire pour que le compilateur le comprenne et, par conséquent, génère correctement le code final. Mais pourquoi la conversion explicite est-elle si importante ? La raison se trouve dans le compilateur. Cela n'a pas vraiment d'importance pour le processeur, car nous n'utilisons que des chiffres, et c'est ce que le processeur voit réellement. Les types n'intéressent pas le processeur, qui se contente d'observer les nombres. Mais le deuxième argument de la ligne 21, bien qu'étant une valeur numérique, n'est pas exactement ce qui est attendu par la fonction ChartSetInteger. Cette fonction attend un certain type, et non une valeur numérique. Même si la valeur représente le type attendu, c'est-à-dire que la valeur est exactement la constante que nous utilisons, le compilateur y verra une erreur. Pour résoudre ce problème, nous forçons explicitement la valeur numérique à être convertie dans un type attendu par la fonction ChartSetInteger. Ainsi, le compilateur pourra comprendre que nous sommes conscients des valeurs que nous transmettons à la fonction.
Quelques réflexions sur Python
Avant de clore notre conversation, cher lecteur et programmeur débutant, je souhaite partager quelques réflexions finales, fruits de mon expérience et de mes connaissances acquises au cours de plusieurs années de travail avec différents langages de programmation. Mon but est d'éviter toute frustration future qui pourrait survenir en essayant d'effectuer certaines actions dans MetaTrader 5.
Bien que notre sujet principal soit MQL5, la question suivante est souvent posée : faut-il ou non étudier Python ? En particulier pour ceux qui commencent à apprendre la programmation pour négocier sur les marchés financiers, la question se pose de savoir s'il vaut la peine d'approfondir leurs connaissances de Python pour travailler avec MetaTrader 5. Cette question est très pertinente, car apprendre Python est beaucoup plus facile et rapide que de passer par les difficultés de l'apprentissage du C, puis du C++, et enfin d'obtenir une base solide et consolidée pour le travail professionnel avec MQL5. Mais il y a un point à garder à l'esprit pour ne pas penser que vous avez perdu votre temps à apprendre (ou ne pas apprendre) Python.
Le langage de programmation Python (bien que certains préfèrent le qualifier de langage de script) n'est pas comparable à ce qui peut être fait dans MQL5 - c'est peut-être la raison pour laquelle certains ne le considèrent pas comme un langage de programmation, mais nous n'entrerons pas dans ce débat ici. Si votre objectif est d'apprendre et d'être capable de générer des codes pour tester, vérifier et analyser quelque chose d'une manière purement mathématique, la solution la plus courte et la plus facile est d'apprendre Python. En effet, il est plus facile d'exécuter des backtests et autres en Python, en interagissant directement avec MetaTrader 5, que d'essayer de faire la même chose avec MQL5.
Cela peut sembler étrange à certains, mais avec un peu de formation et beaucoup de dévouement, vous pouvez facilement créer un script Python qui peut faire la même chose qu'un programmeur avec beaucoup plus d'expérience peut faire avec MQL5. Souvent, le programmeur doit créer des indicateurs, des Expert Advisors, en plus de devoir configurer le testeur de stratégie, pour vérifier si un système d'exploitation donné, appelé SETUP, est rentable ou non. Sans parler du risque de tout mettre en péril en ne mettant pas tout en place correctement.
On pourrait penser qu'en utilisant MetaTrader 5, on a accès à des graphiques et à une belle présentation des résultats, ce qui faciliterait l'analyse. Mais considérez l'étendue des connaissances dont vous aurez besoin pour programmer toutes les fonctions nécessaires à l'exécution d'un simple backtest directement dans MetaTrader 5.
En travaillant avec Python, vous pouvez utiliser le package pour accéder aux données de MetaTrader 5. En utilisant tout ce qui peut être fait en Python, il est plus facile d'effectuer les mêmes recherches qu'un programmeur MQL5. Une fois la recherche terminée, vous pouvez exporter les données vers Excel ou un autre programme pour réaliser toutes les représentations graphiques qui peuvent être faites dans MetaTrader 5, facilitant ainsi l'analyse des résultats.
Je dois ajouter quelques brèves explications. Pourquoi utiliser Python au lieu d'Excel, puisque les résultats seraient tracés dans Excel ? La raison en est simple : Le VBA (Visual Basic for Application) ne nous donne pas un accès direct aux mêmes données que celles que nous aurions avec Python, étant donné l'utilisation des données de MetaTrader 5. Pour faire cela dans Excel, vous devez soit créer une DLL pour prendre en charge ce genre de choses, soit exporter de nombreux fichiers au format CSV afin d'obtenir les mêmes données.
Une fois dans Excel, vous aurez peut-être encore plus de travail pour produire tous les calculs qui seraient effectués dans Python. En revanche, si vous décidez de modifier la base de données, vous devrez refaire tout le travail dans Excel. Mais si vous utilisez Python, tout ce que vous avez à faire est d'indiquer à Python de modifier la base de données, et il le fournira directement à MetaTrader 5 sans aucun effort supplémentaire de votre part.
Mon conseil est donc d'essayer d'en apprendre le plus possible, car chaque outil a ses avantages et ses inconvénients. Bien que Python soit très utile, il ne permet pas de créer un indicateur à afficher sur un graphique ou un Expert Advisor pour vous aider à trader. Cela ne peut être mis en œuvre qu'avec MQL5. Il n'y a donc pas de meilleur ou de pire outil. Ils se complètent et servent des objectifs différents. Dans tous les cas, étudiez les deux, car vous ne savez jamais quand vous aurez besoin de l'un ou de l'autre.
Conclusion
Malgré toute la simplicité de l'exercice, il faut toujours garder à l'esprit ce qui suit : Vous débutez. N'essayez pas de faire quelque chose de compliqué tout de suite. Essayez de créer quelque chose qui fonctionne. Même si cela peut sembler complètement inutile à première vue, commencez par quelque chose de simple.
Commencez à expérimenter les fonctions petit à petit. Étudier le langage C/C++ pour étendre vos capacités de programmation MQL5. Entraînez-vous toujours et essayez de faire les choses à votre manière, différemment de ce que beaucoup font toujours, car, aussi compliquée que puisse paraître une tâche, il y a toujours moyen de mieux la faire.
Apprenez à simplifier vos codes, soyez patient et persévérant. N'abandonnez pas si vous rencontrez un problème qui dépasse un peu vos connaissances. Dans une telle situation, apprenez encore plus et essayez de créer une solution basée sur ce que vous savez déjà. Si vous avez déjà résolu un problème, cherchez une meilleure solution. Votre récompense ultime sera une connaissance vaste et profonde, une richesse que personne ne pourra vous enlever. La connaissance peut être empruntée, mais elle ne peut jamais être volée.
Soyez humble et essayez de partager vos connaissances avec les autres. Ce faisant, vous apprenez de nouvelles choses et vous montrez également de nouvelles possibilités à ceux qui se concentrent sur d'autres solutions. C'est tout pour aujourd'hui.
Traduit du portugais par MetaQuotes Ltd.
Article original : https://www.mql5.com/pt/articles/12071





- 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