Vous êtes sur la page 1sur 155

Introduction à MetaTrader 5 et programmation avec

MQL5

Créez votre1er robot d’investissement avec MQL5 étape par étape à


partir de ZÉRO.

Tous les droits réservés. Ce livre électronique ou toute autre partie de celui-
ci ne peut être reproduit ou utilisé de quelque façon que ce soit sans
l’autorisation écrite expresse de l’auteur ou de l’éditeur, à l’exception de
l’utilisation de courtes citations dans un examen du livre électronique.

Première édition, 2018.

Auteur : Rafael F. V.C. Santos (rafaelfvcs@gmail.com)

Spécialiste de la gestion stratégique des risques appliqué au marché financier.


Il travaille à l’élaboration de stratégies d’investissement automatisées
(Robots d’investissement - Expert Advisor) à l’aide de l’apprentissage
automatique et des statistiques spatiales. Diplômé en génie chimique de
l’Université fédérale du Pernambouc (UFPE) - Brésil. Il est titulaire d’une
maîtrise et d’un doctorat en génie civil (UFPE) dans les domaines de la
caractérisation, de la modélisation et de la simulation statistique, appliqués
aux puits de pétrole et aux réservoirs. Il a plusieurs articles, sur le thème des
statistiques appliquées, publiés dans des magazines et congrès nationaux et
internationaux.

Copyright©2018 de Rafael F. V.C. Santos.


résumé
1. Introduction
1.1. Ère numérique
1.2. intelligence artificielle
1.3. Trading haute fréquence - HFT
1.4. programmation
1.5. Qu’allons-nous apprendre?
1.6. Pourquoi MetaTrader 5?
1.7. Stratégie d’EE
1.8. Avantages de l’utilisation de l’EE
1.9. Résumé du livre électronique
2. MetaTrader 5 (en)
2.1. Téléchargement et installation de MetaTrader 5
2.2. Principaux éléments du MetaTrader 5
2.3. Champ navigator
2.4. Boîte à outils sur le terrain
2.5. Vous cherchez Candels
2.6. Enregistrement des modèles
2.7. Dessin d’objets
2.8. Transition entre les temps graphiques
2.9. Ajout d’indicateurs
2.10. Fenêtre de données
3. Communauté MQL5
4. MetaEditor MQL5
4.1. MetaEditor (en)
4.2. Création d’un nouveau projet
4.3. OnInit()
4.4. OnDeinit ()
4.5. OnTick ()
4.6. Accessoires de programmation
4.6.1. Commentaires
4.7. Propriétés EA
4.8. Types de fichiers MetaTrader et MetaEditor
4.9. Ajout de bibliothèques
5. Logique de programmation de base avec MQL5
5.1. Types de variables
5.2. Déclaration des variables
5.2.1. Integer Type
5.2.2. Type Double
5.2.3. Chaîne de type
5.2.4. Type bool
5.2.5. Date de type
5.3. Déclarer des constantes
5.4. Variables vectorielles : Tableaux
5.5. Pour boucle
5.6. Enum (enum)
5.7. Variables de type d’entrée
5.8. Variables locales et mondiales
5.8.1. Variables locales
5.8.2. Variables globales
5.9. Variables prédéfinis par MQL5
5.10. Opérations mathématiques
5.11. Relations logiques et conditionnelles
5.12. Opérateur ternaire
5.13. Méthodes ou fonctions
5.14. Bougies et variables de tiques
5.15. Fonctions Commentaire () et Alerte ()
5.15.1. Commentaire ()
5.15.2. Alerte ()
5.16. Ajout d’indicateurs MQL5
6. Programmation de l’EE
6.1. Aperçu de la stratégie
6.1.1. Moyennes mobiles
6.1.2. Indice de force relative (RSI)
6.2. Création d’EA
6.3. Déclaration des variables mondiales
6.3.1. Variables pour l’utilisateur
6.3.2. Variables globales
6.4. Fonction OnInit ()
6.5. Fonction OnDeinit ()
6.6. Fonctions de conseiller expert
6.6.1. Traitement des erreurs
6.7. Fonction: OnTick()
7. Backtests (backtests)
7.1. Backtest dans MetaTrader 5
7.2. Analyse du backtest
7.3. Graphiques de performance
Chapitre 1
1. Introduction
1.1.

Ère numérique

Nous vivons à l’ère numérique. Aujourd’hui, l’information et la connaissance


voyagent à travers les fibres optiques. Tout est en développement constant
et croissance accélérée. Cette dynamique évolutive est sans précédent dans
l’histoire de l’humanité.
Les appareils et les objets deviennent de plus en plus intelligents et
indépendants. Aujourd’hui, il est possible de trouver, à vendre, des
téléphones intelligents et des montres qui rechargent la batterie avec même
la température du corps humain. Les recherches montrent que d’ici 2025, au
moins la moitié de la flotte américaine voyagera de manière totalement
autonome. C’est vrai, la profession de chauffeur, chauffeur de taxi et bien
d’autres, comptent leurs jours. Et pour le marché financier, ce n’est pas
différent. Les traders professionnels sont remplacés par des algorithmes.
Ce ne sont là que de petits exemples de l’avalanche de modifications et
d’avantages apportés par le monde qui demande le changement. Nous
changeons le monde et le monde nous forçant à nous transformer en un
cercle vertueux de prospérité.

intelligence artificielle

Les systèmes embarqués dominent progressivement notre vie quotidienne.


Les gens et les choses sont de plus en plus connectés à Internet. Une nouvelle
intelligence est créée à partir de ce nouveau cosmos. Nous ouvrons les portes
de l’intelligence artificielle (IA). Pratiquement tout le monde bénéficie (ou
bénéficiera) en quelque sorte des merveilles apportées par l’IA.
1.2.

Beaucoup disent que cette nouvelle génération peut nous apporter des
problèmes, mais nous devons être optimistes quant aux incertitudes, car
nous sommes sur la voie d’une voie inévitable et non-retour.
Plusieurs entreprises et fonds d’investissement travaillent actuellement
beaucoup sur l’utilisation de l’intelligence artificielle pour prendre leurs
décisions d’investissement. À partir de l’IA, nous pouvons filtrer et regrouper
les informations et les connaissances cachées dans des données et une
connexion numériques apparemment dénuées de sens.
Dans cette course, il est avantageux de dominer les matières et les
connaissances liées aux mathématiques, aux statistiques et à la
programmation informatique.

Trading haute fréquence - HFT

Les investisseurs et les spéculateurs sur le marché financier savent que le


principal ennemi pour faire de l’argent dans ce monde est précisément le
facteur émotionnel. Les êtres humains ont des désirs, des désirs, de la
cupidité, des peurs et des peurs qui font de l’activité le meilleur moment pour
acheter et/ou vendre un véritable défi.
Lorsque nous travaillons avec Investment Robots, nous discutons d’une
stratégie qui a déjà été définie et structurée afin qu’elle puisse être exécutée
en temps opportun. Heureusement, les robots ne se fatiguent pas, ne stresse
pas ou n’ont pas de sentiments qui permettent des malentendus et / ou des
biais lors de l’achat ou la vente.
Les fibres optiques ont permis une révolution dans la communication. Dans
le monde de l’investissement, par exemple, chaque millième de seconde peut
1.3.

coûter des millions de dollars. Les traders à haute fréquence (HFT) opérant
sur les principales bourses du monde prennent des décisions à des vitesses
infinitésimales et menacent ainsi de nombreux courtiers et traders
professionnels.
La décision des HFT d’acheter et/ou de vendre est prise en millisecondes,
jusqu’à dix à cinquante fois plus vite qu’un simple clin d’œil humain (d’une
durée d’environ 300 millisecondes). Il est pratiquement impossible et injuste
de comparer de façon irréalisable tout système informatique de cette
catégorie avec un être humain normal.
Des données récentes (année 2018) montrent que plus de 50% des opérations
financières américaines sont réalisées par des robots d’investissement. Et les
résultats montrent que ces robots peuvent augmenter les rendements
financiers jusqu’à 15%. Il y a certaines bourses où plus de 90% des opérations
sont réalisées par des robots d’investissement.

programmation

La plupart des gens ont les objections suivantes quand il s’agit de


programmation: c’est très difficile, a besoin de beaucoup de pratique, doit
connaître beaucoup de mathématiques, je n’ai jamais été bon avec les
chiffres. Cependant, bon nombre de ces objections ne sont rien de plus
qu’une mauvaise compréhension de cette activité de programmation, qui est
aussi triviale que de raconter une brève histoire avec le début du milieu et de
la fin.
La chose intéressante est que toute personne capable d’écrire les étapes de
l’exécution d’une recette de gâteau sur une feuille de papier est en mesure
1.4.

de créer un programme informatique. Programmer, c’est communiquer avec


l’extérieur, avec l’autre, afin de mener des actions. Pour notre cas, cet autre
est la machine.
Nous avons une structure d’activités à suivre et nous avons besoin, pour une
bonne réalisation de celui-ci, d’une séquence adéquate d’ordre d’exécution.
La programmation est de maîtriser un langage que la machine comprend et
sait positionner nos besoins délibératifs dans le temps et l’espace, afin qu’ils
soient exécutés correctement.
Par conséquent, c’est à chaque investisseur curieux et avec la patience
d’apprendre quelque chose de nouveau à regarder dans le monde de la
programmation. C’est parce que la planification des ordinateurs est une
activité beaucoup plus simple que beaucoup l’imaginent.

Qu’allons-nous apprendre?

Dans ce livre électronique, nous apprendrons à créer, étape par étape, une
stratégie d’investissement automatisée. Nous allons créer un robot
d’investissement (Expert Advisor EA) à partir de zéro en utilisant le langage
de programmation MetaTrader 5 et MQL5.
Ainsi, ayant un programme écrit dans un langage de haut niveau (MQL5) (ceux
qui sont les plus proches de la compréhension de l’homme, les langues de bas
niveau sont plus proches de la compréhension des machines), nous serons en
mesure de laisser le travail ardu et épuisant de surveillance de l’achat et la
vente d’un actif financier en bourse pour le robot.
Nous passerons quelques heures à programmer un robot connu sous le nom
de Conseiller expert et passerons le reste du temps à surveiller l’exécution
1.5.

de la stratégie d’une manière beaucoup plus silencieuse et plus sûre. Cela


laisse plus de temps pour une vie contemplative et agréable.
1.6.

Pourquoi MetaTrader 5?

MetaTrader 5 est une plate-forme puissante pour visualiser, exploiter et


planifier des stratégies d’investissement pour différents types de marchés
financiers.
Il a été créé en 2005 et continue d’être amélioré et distribué par
MetaQuotes(https://www.metaquotes.net). Nous pouvons utiliser
MetaTrader 5 pour opérer sur les marchés boursiers, contrats à terme,
options, paires de devises (FOREX) entre autres.
MetaTrader 5 a été choisi pour construire notre premier EA, car il s’agit d’un
outil « gratuit », assez puissant et complet du point de vue des principales
fonctionnalités qu’une plate-forme trader devrait avoir.
À l’intérieur de MetaTrader 5, nous avons la possibilité de créer des scripts,
des indicateurs et, bien sûr, des robots d’investissement utilisant le langage
de programmation MQL5. Cette langue est très similaire à C ++, Java et C #.
Ainsi, toute personne qui connaît déjà l’un d’eux se sentira extrêmement à
l’aise d’apprendre MQL5.

Stratégie d’EE

Nous développerons à partir de zéro une stratégie de franchissement de deux


moyennes mobiles (une rapide et une lente) avec la possibilité d’un filtre
d’entrée dans les opérations avec l’indicateur plutôt populaire RSI (indice de
force relative).
1.7.

Notre robot sera multi-stratégie. Il sera en mesure de travailler, en utilisant


comme déclencheurs d’entrée dans les opérations, seulement le croisement
des moyennes mobiles, seulement le RSI ou les deux (franchissement des
moyennes plus RSI).
Nous apprendrons également à faire des backtests du robot créé. Ainsi, nous
serons en mesure de tester diverses configurations sur les données
historiques de divers actifs financiers. Le livre est plein de lignes directrices,
avec des captures d’écran, en utilisant les parties clés de MetaTrader 5 et
MetaEditor.
Nous apprendrons la syntaxe de programmation dans MetaEditor. Nous
avons plusieurs fonctionnalités lors de la programmation avec MQL5. Il
présente déjà un ensemble très important de bibliothèques pour travailler
avec la manipulation graphique, les opérations mathématiques, les
statistiques, avec des structures de prix et le contrôle de l’envoi des ordres de
négociation.

Avantages de l’utilisation de l’EE

Passons aux avantages de l’utilisation de robots d’investissement. Ils sont


nombreux, mais nous allons aux principaux:
- Élimine tout côté émotionnel;
- Testez des stratégies prêtes avec des backtests;
- Simuler des situations défavorables sur le marché;
- Ea sont exempts de fatigue, de stress, perdent de l’attention ou ne
parviennent pas à exécuter la stratégie;
- Nous pouvons optimiser la stratégie à partir d’un robot;
1.8.

- EA sont infiniment disciplinés et rapide par rapport à nous;


- Des validations statistiques peuvent être effectuées. Les EE validées
statistiquement sont gagnantes et cohérentes à moyen et à long
terme.
- EA a un seul état d’esprit qui est d’exécuter la stratégie planifiée;
- EA opère de la première seconde de l’ouverture du marché à la
dernière seconde avant la clôture, sans trêve et sans inconduite.

Résumé du livre électronique

Ainsi, pour atteindre l’objectif de créer notre premier conseiller expert, cet
e-book organise et simplifie de manière didactique les étapes nécessaires
avec les informations de connaissance et d’utilisation de MetaTrader 5 et
son langage de programmation MQL5.
Voici un résumé de ce que vous apprendrez de la lecture de cet e-book:
- Apprenez à installer MetaTrader 5;
- Connaître les principaux avantages du portail en ligne MetaTrader;
- Comprendre les principales caractéristiques et différences entre
MetaTrader et
MQL5:
- Apprenez à ajouter des indicateurs et de l’EE;
- Connaître MetaEditor et certains des principaux raccourcis pour faciliter la
programmation;
- Apprenez la syntaxe de programmation de MQL5;
- Comprendre les principales fonctions des bibliothèques de développement
MQL5.- Créer une stratégie à l’aide d’indicateurs de tendance (moyennes
1.9.

mobiles) et d’indicateurs de marché consolidés (Indice de force relative -


RSI);
- Programme étape par étape une EE multistratégique;
- Faites des backtests de l’EA créé;
- Connaître les statistiques backtest;- Et bien plus encore.

Nous nous dirigeons maintenant vers l’avenir des investissements.


Félicitations pour votre décision d’entrer dans ce monde grandiose et
fascinant d’investissements automatisés.
Merci de votre confiance dans l’achat de ce matériel. L’avenir est là et nous
le construirons ensemble.
Tout le monde une grande lecture!
Note importante[1].
Chapitre 2
2. MetaTrader 5

MetaTrader est une plateforme développée pour aider à la visualisation des


prix des actifs financiers et à l’exécution des ordres d’achat et de vente en
bourse. Il est également possible de créer des scripts (algorithmes pour des
actions spécifiques), des indicateurs et des robots d’investissement.
Il s’agit d’un outil gratuit développé et distribué par MetaQuotes Softwares
(https://www.metaquotes.net/). Initialement, il a été développé en pensant
au marché forex. Toutefois, plusieurs maisons de courtage ont permis
l’utilisation sur le marché boursier, les options et les contrats à terme.

Nous avons besoin d’une entreprise (courtier en investissement) pour fournir


des données de prix de routage pour la plate-forme. De nombreux courtiers
en placement offrent ce service gratuitement. Certains offrent même un
compte démo où nous pouvons simuler acheter et vendre des opérations sur
le marché financier avec de l’argent factice. En outre, dans le compte
démo,nous pouvons mettre nos robots à l’épreuve en temps réel avant de les
utiliser dans un vrai compte.
MetaTrader 4 a été créé en 2005 et depuis lors a subi une transformation
majeure des améliorations de son système et les fonctionnalités de sécurité.
Il en est actuellement à sa deuxième version majeure appelée MetaTrader 5
qui est sorti en 2010.
Nous pouvons utiliser MetaTrader à la fois sur le bureau et les smartphones.
Il est disponible pour travailler sur le Web, sur mac, Linux, Windows et
android. Les principaux navigateurs Internet sur le marché soutiennent
MetaTrader 5 en ligne.

MetaTrader 5 n’est pas seulement un outil de visualisation et de routage des


commandes (achat/vente) d’actifs financiers, mais aussi une excellente plate-
forme pour développer des stratégies d’investissement à partir de scripts,
d’indicateurs et de robots (Expert Advisors). Pour cela, il compte sur
l’environnement de développement de la langue MQL5 (MetaQuotes
Language) qui présente / affiche de grandes similitudes avec C ++, Java et C #.
Par conséquent, ceux qui ont eu une certaine connaissance dans l’un de ces
langages de programmation se sentiront à l’aise avec la syntaxe MQL5.
Par rapport à MetaTrader 4, MetaTrader 5 permet de développer des
stratégies en utilisant le paradigme de programmation orienté objet (OOP).
2.1. Téléchargement et installation de MetaTrader 5

Dans le monde, plusieurs maisons de courtage offrent l’utilisation gratuite de


MetaTrader 5. Tout ce dont nous avons besoin, c’est que nous sommes un
client du courtier en placement. Nous devons, après avoir téléchargé la plate-
forme, demander la publication d’une démo et/ou d’un compte réel afin que
nous puissions avoir accès au routage des données des actifs financiers.
Le téléchargement direct de la plate-forme peut être fait par le site:
https://www.metaquotes.net/en/metatrader5/.
Comme dit auparavant, plusieurs courtiers à travers le monde offrent un
routage gratuit, mais beaucoup pour le marché forex. Certains courtiers Forex
n’ont besoin que d’un numéro de téléphone valide pour libérer un compte
démo. Dans ce livre électronique, nous utiliserons les systèmes avec les prix
des actifs financiers présents à la Bourse BM&FBovespa de São Paulo (Brésil).
Cependant, pour suivre les études dans le livre, vous n’avez pas
nécessairement besoin d’avoir un compte avec un courtier en investissement
brésilien.
Le processus d’installation est très simple et simple. Après deux clics sur le
fichier, un assistant d’installation nous guidera avec les étapes nécessaires.

Il suffit d’aller de l’avant jusqu’à la fin de l’installation. À la fin, on vous


demandera un compte avec connexion et mot de passe. Il est nécessaire
pour nous d’utiliser les données sur les prix des actifs financiers. Dans cet e-
book, nous utiliserons un compte démo de XP Investimentos.
Voir ci-dessous le programme ouvert demandant la connexion, mot de passe
et type de serveur (si réel ou démo).

2.2. Principaux éléments du MetaTrader 5

L’un de nos principaux intérêts est de visualiser les prix des actifs à partir de
bougies (chandeliers). Alors, nous allons connaître les principales
fonctionnalités de visualisation de la plate-forme MetaTrader 5.
Dans le menu: Voir -> Symboles, nous avons la possibilité de choisir les actifs
financiers que nous souhaitons travailler.
Nous pouvons choisir entre Bovespa et BMF Assets (série continue). Dans les
actifs de Bovespa, nous avons les OPTIONS (appels et puts), les actions d’A
VISTA et les INDICES (marché à terme) négociés sur le marché brésilien.
Il est important de noter que chaque courtage fournira un routage de
données distinct. Certains avec plus de données et d’autres avec moins. Par
exemple, si nous étions avec une certaine maison de courtage qui fonctionne
avec le marché forex, les options qui apparaîtraient dans cette fenêtre d’actifs
serait complètement différent.

L’ajout d’un symbole qui représente une entreprise, qui est consulté dans les
prix, peut être exécuté dans le Market Watch.
Dans ce domaine d’observation du marché, nous pouvons ajouter les actifs
liés aux sociétés négociées en bourse dans lesquelles la société de courtage
est libérée pour fonctionner.
Toujours dans le domaine market watch, nous avons l’onglet Détails qui
offre des informations supplémentaires concernant l’actif financier en cours
d’évaluation. Ci-dessous, par exemple, nous pouvons voir les informations sur
cet onglet pour les actions Petrobras. Dans l’onglet Trading, nous avons
plusieurs options où nous pouvons faire des achats et des ventes en un seul
clic.
2.3. Champ navigator

Le navigateur de champ est l’endroit où il contient les informations


concernant le type de compte de l’utilisateur si démo ou réelle, ainsi que les
indicateurs et robots d’investissements disponibles par la plate-forme et ceux
qui ont été développés par nous-mêmes.
Dans ce domaine, nous pouvons choisir le type d’indicateur, de script ou d’EE
et le glisser directement vers le tableau des actifs financiers d’intérêt.

Une autre façon d’ajouter des indicateurs ou EA est du menu Insert ->
Indicateurs,Insert -> Expert (Robots).
Ajoutons un indicateur du menu :

Dans le chiffre ci-dessus, nous pouvons voir que les indicateurs sont séparés
par des indicateurs de tendance, oscillateurs, volumes, Bill Williams et
Custom. Les indicateurs de tendance, comme son nom l’indique, sont plus
susceptibles d’avertir lorsque le marché est dans un comportement
directionnel bien défini. D’autre part, les indicateurs oscillateurs sont plus
adéquats pour avertir des opportunités au sein d’un marché latéral, un
marché en consolidation.
Bill Williams[2] est un trader très populaire qui a développé plusieurs
indicateurs importants et largement utilisés. Par conséquent, une section
spécifique a été créée pour les indicateurs créés par elle.
Il est intéressant de la possibilité que nous devons utiliser des indicateurs et
ea natif de MetaTrader lui-même et les indicateurs et EA créé par nous ou
même offert dans l’onglet Marché de la boîte à outils de champ.
2.4. Boîte à outils sur le terrain

Dans le domaine de la boîte à outils, nous pouvons trouver plusieurs


informations importantes concernant la vente des principaux indicateurs et
robots d’investissement développés pour la plate-forme MetaTrader. Nous
pouvons également télécharger ceux fournis gratuitement (onglet
Bibliothèques). Nous pouvons voir les principales nouvelles (tab Nouvelles)
en temps réel de négociation comme marché aux enchères et la production
de nouvelles pertinentes pourle marché.

Dans l’onglet Experts, nous pouvons consulter les principaux journaux


d’information concernant le fonctionnement de nos robots. Ici, nous sommes
informés de l’envoi et de l’exécution des ordres, des problèmes avec les
variables, des erreurs d’exécution et des opérations.
Maintenant que nous connaissons déjà, en général, les principaux domaines
de MetaTrader 5, nous allons dans le champ graphique principal, qui est la
fenêtre de visualisation des bougies de prix.

2.5. À la recherche de Candels

La plate-forme MetaTrader 5 nous permet de personnaliser la façon dont


nous visualisons les prix de différentes manières. Par exemple, nous pouvons
changer l’arrière-plan de l’écran, les couleurs des contours et le remplissage
des bougies haute/basse/doji, les lignes de séparation des périodes, des
grilles, parmi plusieurs autres propriétés.
Nous pouvons passer de trois types de visualisation des prix des actifs
financiers. Ces types visuels sont donnés par barchart, candlestick ou line
chart.
2.6. Enregistrement des modèles

Il est important de noter que chaque fois qu’un nouveau graphique est
demandé pour être ouvert dans MetaTrader, il apparaîtra à l’écran avec les
paramètres par défaut. Cependant, il existe un moyen d’enregistrer notre
personnalisation de prévisualisation de l’écran de la création d’un modèle.
Par exemple, mettons en place un modèle. Pour cela, nous devons faire nos
personnalisations. Avec un clic droit sur le champ graphique, nous pouvons
choisir propriétés et faire les paramètres de couleur appropriés à notre goût.

Examinons les changements suivants :


Puis cliquez à droite sur l’écran graphique et aller à Template -> Enregistrer
des modèles. On a choisi un nom et c’est tout.

Donc, il suffit de charger le modèle enregistré, à un nouveau graphique, de


sorte que les paramètres sont immédiatement appliqués. De cette façon,
nous avons beaucoup de flexibilité pour être en mesure de configurer des
modèles de visualisation pour les configurations de différentes stratégies.
2.7. Dessin d’objets

Vous pouvez dessiner plusieurs objets dans les graphiques de prix. Nous
pouvons ajouter des canaux, des lignes de soutien et de résistance, Fibonacci,
flèches de haut en bas, etc.
De cette façon, il est possible de rendre une analyse technique visuelle très
complète avec les principaux objets graphiques présents dans la plate-forme.

Cliquez à droite sur le graphique, vous pouvez voir la liste des objets et faire
différents types de modifications comme modifier les sous-titres, les
couleurs, etc.
Il vaut la peine de passer un certain temps à vous familiariser avec l’utilisation
de graphiques et d’objets.
2.8. Transition entre les temps graphiques

La transition entre les échelles graphiques de l’observation de la formation


des bougies est assez simple et rapide. Il suffit de cliquer à droite sur le dessus
du tableau, aller à Timeframes et choisir l’heure des bougies.

Nous pouvons également changer l’heure de la bougie de la barre raccourcie,


comme indiqué ci-dessous:
2.9. Ajout d’indicateurs

Les indicateurs, pour de nombreux traders, sont les principaux facteurs


directeurs de la prise de décision. Ce sont les indicateurs qui nous avertit
souvent d’entrer et de sortir d’une opération en temps opportun. Et quand
vous parlez d’indicateurs, MetaTrader ne vous laisse pas vouloir.
Actuellement, la plate-forme a plus de 2.000 indicateurs disponibles en
téléchargement gratuit. Ce téléchargement peut être effectué soit par le site
lui-même, soit par la plate-forme dans le champ Boîte à outils sur l’onglet
Base de code.
Ajoutons, par exemple, des moyennes mobiles au graphique. Nous pouvons
le faire soit par le menu Insert -> Indicateurs ou en cliquant directement sur
le champ Navigator -> indicateurs, cliquezet maintenez l’indicateur choisi
et faites glisser vers la fenêtre graphique.
À titre d’exemple, insérons un indicateur de moyenne mobile :

Ajoutons maintenant deux moyennes mobiles. Nos moyennes devraient avoir


des périodes de 72 et 32 avec zéro décalage, méthodes exponentielles et
appliquées aux prix de clôture:
Après avoir cliqué sur'ok',nous avons l’ajout immédiat au graphique d’actif
sélectionné.

Ajoutons maintenant l’indice de force relative (RSI). Cet indicateur est


intéressant car il est dessiné dans une fenêtre séparée de la fenêtre principale
du prix des bougies (voir les chiffres ci-dessous).
Laissons une période de 9 appliquée au cours de clôture :

Le résultat est :
Le RSI est un indicateur utilisé pour avertir sur les surachetés et/ou
surventes. Fondamentalement, nous avons deux niveaux de référence que
nous devons choisir pour le déclencheur d’activation de la suracheté ou
survendu. Nous pouvons choisir les niveaux de 30 (survendu) et 70
(suracheté).
Par exemple, les valeurs de RSI supérieures à 70 indiquent que le prix est
suracheté, c’est-à-dire qu’à tout moment dans un marché consolidé, nous
pouvons commencer à voir une baisse des prix. D’autre part, si la valeur de
l’IFR est inférieure à 30, nous pouvons dire que le prix est survendu et qu’un
prix soudain élevé est éminent.
Ces deux indicateurs ont été présentés, puisqu’ils seront utilisés pour créer
notre robot d’investissement. À l’avenir, nous utiliserons trois stratégies :
l’une avec le franchissement des moyennes mobiles, l’autre avec seulement
le RSI et l’autre avec les deux indicateurs.

2.10. Fenêtre de données

Un domaine très important, qui facilite grandement la visualisation des prix


et des valeurs des indicateurs, est la fenêtre de données. Pour l’ouvrir, nous
pouvons: aller au menu Afficher -> Fenêtre de données ou utiliser le
raccourci clavier Ctrl + D.

Cette action ouvrira, pour nous, un nouveau champ : Fenêtre de données.


Maintenant, nous pouvons positionner le curseur de souris sur n’importe
quelle bougie du graphique pour obtenir des informations détaillées sur les
prix et les indicateurs à l’endroit choisi.

Voir l’exemple ci-dessous, où nous mettons la souris sur la bougie surlignée


en vert et la fenêtre de données nous donne les informations détaillées:
Chapitre 3
3. Communauté MQL5

Comme nous l’avons vu précédemment, au chapitre 2, MQL5 est un langage


de programmation offert dans MetaTrader 5. Les programmeurs partagent
souvent des codes et des questions sur des problèmes spécifiques dans un
langage de programmation.
Il est très important de participer à des communautés de développeurs, car
avec cela notre apprentissage et le côté motivationnel sont améliorés. Le
partage des connaissances et des doutes génère la durabilité de notre
développement et de notre croissance en tant que programmeur et
utilisateur de la langue.
Il est toujours bon d’avoir un endroit pour échanger des connaissances, poser
des questions et discuter des idées de projet. Plus un langage de
programmation est largement utilisé et documenté, meilleure est la courbe
d’apprentissage des marins qui en sont à leur première expérience. Par
conséquent, un environnement commun où tous sont destinés à la même fin
est tout à fait valable.
En ce sens, pour la langue MQL5, nous sommes bien couverts, parce que nous
sommes confrontés à un outil mature, avec beaucoup de développeurs et une
communauté très active et généreuse qui offre des articles et des doutes avec
agilité dans les forums.
Nous pouvons accéder à la communauté à partir du site:
https://www.mql5.com/en.
Après avoir lu ce livre électronique et /ou même maintenant, le lecteur est
invité à faire un compte et commencer à ajouter leurs connaissances et poser
des questions à partir du portail.
Peu de temps après l’enregistrement, nous aurons accès à un ensemble très
intéressant de fonctionnalités. Par exemple, nous pouvons accéder au
terminal Web MetaTrader 5, à la documentation qui est vaste et à jour, aux
informations clés sur le marché financier mondial et à d’autres avantages.
Quelque chose de très important pour tous ceux qui commencent avec la
langue MQL5 sont les échantillons de code open source disponibles dans
CodeBase. À cet endroit, nous aurons accès à des codes pour les langues
MQL4 et MQL5. Il est extrêmement utile de passer du temps à faire des
recherches et à étudier ces codes.
Nous avons également la section des articles où des tutoriels avec
d’excellentes didactiques sont ajoutés. C’est l’un des domaines
indispensables pour tous ceux qui ont le prétexte de maîtriser la langue
MQL5.
Toute personne qui souhaite construire une EA avec une stratégie plus
robuste et complexe peut embaucher des programmeurs MQL5 à partir de
commandes sur le portail Freelance. En outre, pour ceux qui ont commencé
à maîtriser l’outil et veulent des revenus supplémentaires, ils peuvent
accepter des projets et offrir leurs services de production de robots, des
indicateurs et des scripts d’investissement.
Sur le marché sur le terrain, nous pouvons acheter des indicateurs et EA
offerts par des particuliers et des entreprises spécialisées.
Nous avons un domaine très intéressant qui est signaux d’investissement.
Grâce à elle, nous pouvons suivre l’entrée et la sortie des opérations de
commerçant. Nous avons l’évolution des rendements, le niveau de fiabilité,
le profit maximum, entre autres informations, pour chacun des commerçants
qui étaient prêts à fournir les signaux de leurs opérations. Certains services
de signaux peuvent être contractés (payés) et l’exécution automatique peut
être synchronisée avec nos comptes.
Après avoir trouvé une stratégie et des configurations cohérentes et prouver
la validité en testant le compte démo, une étape importante est d’embaucher
un service de machine virtuelle. Ce type de service nous permettra d’être plus
sûrs et protégés face au manque d’énergie et d’Internet.

Les oscillations dans le réseau énergétique et Internet sont des problèmes qui
peuvent compromettre le bon fonctionnement de nos robots
d’investissement. Une alternative à la résolution de ce problème est en
embauchant un serveur privé virtuel (VPS) machine virtuelle. Le portail MQL5
lui-même fournit ce type de service.
Il ya la possibilité de contracter le service de machine virtuelle VPS par
d’autres entreprises, telles que Amazon AWS
(https://aws.amazon.com/en/vpc/)qui offre même une année gratuite
d’utilisation.
Nous avons le champ forum qui est l’endroit où nous allons probablement
passer une bonne partie de notre voyage d’apprentissage à répondre et à
mettre nos doutes sur les codes MQL5. C’est un bon endroit pour échanger
des expériences, nouer des amitiés et des partenariats.
Chapitre 4
4. MetaEditor MQL5

Le langage MQL5 (MetaQuotes Language 5) a un grand nombre de fonctions


utiles pour analyser les prix des actifs financiers. Nous avons besoin de
connaître ces fonctions afin de ne pas recréer la roue. Mais avant cela, il est
important de connaître autant que possible notre environnement de
programmation linguistique (MetaEditor).
4.1. MetaEditor

MetaEditor est un environnement de développement intégré (IDE) pour la


langue MQL5 qui est inclus dans MetaTrader 5. Faites-nous maintenant
connaître les principales caractéristiques des développements offerts par
MetaEditor.
Pour ouvrir MetaEditor, nous devons cliquer sur l’icône surlignée dans l’image
ci-dessous ou appuyer sur le raccourci F4.

Après avoir cliqué sur l’icône de MetaEditor, nous aurons un environnement


de développement avec trois domaines principaux qui nous aideront dans
l’élaboration de nos codes.
Zone 1: Navigateur - où nous gérerons nos archives de bibliothèque de code
et bibliothèques en développement.

Zone 2: Fenêtre où les codes sont correctement tapés.

Zone 3: Boîte à outils - c’est ici que nous suivrons le développement de nos
tests de compilation et de débogage. Nous avons 6 onglets (Erreurs,
Recherche, Articles, Base de Code, Projets Publics et Journal).
Fondamentalement, pour la création de nos algorithmes, nous n’utiliserons
que les onglets Erreurs et Journal.

4.2. Création d’un nouveau projet


Cliquant sur la nouvelle icône, puis choisissons parmi l’assistant MQL5 le type
de projet que nous voulons créer.

Nous pouvons remarquer que nous avons plusieurs options de conception. Ce


Wizard nous permet même de créer des robots d’investissement sans
connaissance de programmation. Bien sûr, dans ce cas, nous serons aveugles
à la plupart des étapes et nous ne ferons presque rien avec confiance et
sécurité.
Comme cet ebook a l’intention de fournir les premières étapes avec l’outil
MQL5, nous n’aurons que la première option Expert Advisor (modèle). Il y
adeux [3] autres ebooks du même auteur qui vous montrent comment
développer des codes d’indicateur et de scripts.
Nomons notre robot d’investissement (Expert Advisor). Nous l’appellerons
EA_MA_Cros_RSI (Conseiller expert des croix mobiles mobiles avec le
Dindicator RSI). Ce n’est qu’un nom temporaire pour la présentation
MetaEditor.
Après avoir cliqué sur Terminer le MQL5 Wizard crée pour nous le corps de
base nécessaire pour le développement de tout robot d’investissement. Par
conséquent, nous avons déjà une structure divisée avec les principales
méthodes pour le fonctionnement d’une EE.
La structure d’une EE, pour son bon fonctionnement, contiendra toujours au
moins ces trois fonctions ou méthodes : OnInit (), OnDeinit () et OnTick ().
4.3.
OnInit()

La première fonction exécutée dans un EA est OnInit (). Il n’est déclenché que
lorsque nous initialisons le robot. Nous utilisons cette fonction pour initialiser
les pointeurs (poignées) des indicateurs, des variables, ainsi que pour
effectuer des configurations et des charges antérieures de variables et de
modèles.
4.4.
OnDeinit ()

La fonction OnDeinit () est appelée lorsque le robot est retiré de MetaTrader.


Par exemple, nous utilisons cette fonction pour nettoyer les poignées
d’indicateurs, les variables, supprimer les objets graphiques et textuels de
l’écran, et ainsi de suite.
4.5.
OnTick ()

L’un des plus importants est la fonction OnTick() parce que c’est là que
beaucoup de notre logique de programmation est en cours d’exécution. Cette
fonction est l’une des plus demandées par notre robot, puisqu’elle est
appelée chaque fois qu’une opération de marché se produit. À chaque
nouvelle vente, acheter, libérer et commander l’annulation de cette fonction
est appelée.
Il convient de mentionner que cette fonction n’est appelée que lorsque nous
avons EA dans les heures de négociation. C’est parce que ce n’est qu’avec le
commerce en cours, c’est que nous avons des changements sur le marché.
Si nous travaillons sur le développement d’un robot et que nous ne sommes
pas dans les heures de négociation, nous ne verrons aucun appel de cette
fonction. Alternativement, nous pouvons utiliser la fonction OnTimer() pour
minimiser ces problèmes et pour faire des tests et des débogages à travers
elle (en utilisant lafonction Imprimer(). Plus tard dans le chapitre 5, nous
verrons un exemple d’utilisation de la fonction OnTimer().
Il convient de souligner qu’il existe plusieurs autres fonctions prédéfinie
comme OnChartEvent (), OnTrader (), OnTester (), et d’autres. Cependant,
nous n’étudierons que les principaux. Plus de détails concernant ces autres
fonctions peuvent être trouvés dans la documentation MetaTrader 5.

Accessoires de programmation

Nous avons quelques éléments (fonctions) qui nous aident dans la lisibilité et
l’organisation de nos codes robot.

4.6.1.Commentaires
4.6.

Commenter nos algorithmes est de la plus haute importance pour la lisibilité


et la compréhension des étapes clés.
Par exemple, nous avons l’élément de commentaire que nous pouvons
représenter par // ou / * * /

Ce type de structure (//) amène le compilateur à ne pas interpréter


immédiatement les caractères qu’il a vus. Ainsi, nous pouvons faire de petits
rappels et des commentaires explicatifs pour rendre le code clair et lisible
pour l’édition par d’autres développeurs et même nous.
Le deuxième type de commentaire / * * / vous permet d’écrire des
paragraphes entiers entre eux.

Nous avons quelques raccourcis vers les commentaires. Par exemple, si nous
voulons
commenter plusieurs lignes, nous pouvons faire la sélection d’entre eux et
appuyez sur (Ctrl + ~). Pour supprimer les commentaires, il suffit de
sélectionner et d’appuyer (Ctrl + Ç).

Le raccourci (Ctrl +. ) Vous permet de créer la chaîne annotée suivante. Ceci


est utile pour séparer de grandes sections de code.

Le raccourci (Ctrl +;) vous permet de créer une petite séparation avec les
chaînes suivantes :

4.7. Propriétés EA

Il est toujours bon d’informer les détails du développement de robots. Ainsi,


directive #propriété :sert à décrire les informations de basesur l’EE. Dans
l’exemple ci-dessous, lorsque nous avons la directive sur les biens, nous
pouvons observer des informations concernant le droit d’auteur, lien dirigé
vers un site Web et une version du robot.
Après avoir appuyé sur le bouton Compile :

Nous notons que dans le champ Boîte à outils sur l’onglet Erreurs, le
compilateur n’a soulevé aucun problème.

Donc, automatiquement dans la plate-forme MetaTrader dans le domaine


Navigator -> en cliquant sur le plus de consultant expert, nous pouvons
trouver notre EA compilé (.exe5). Vous pouvez maintenant cliquer, tenir et
faire glisser vers le tableau des bougies et observer les informations
depropriété # présentes.

Comme nous n’avons pratiquement rien programmé à partir du robot ces


informations dans l’onglet Commun ci-dessus, sont les seuls disponibles à ce
jour. Ensuite, avec chaque nouvelle modification apportée dans le code avec
MetaEditor, nous pouvons observer les changements dans le domaine
Navigator dans la partie des experts.

4.8. Types de fichiers MetaTrader et MetaEditor

Le type de fichier généré avec MetaEditor a l’extension '.mql'. Nous pouvons


vérifier cela dans le champ MetaEditor Navigator où nous avons notre fichier
d’édition robot appelé EA_MA_Cros_RSI.mql5.
Après avoir cliqué sur le bouton Compiler un fichier avec l’extension
'EA_MA_Cros_RSI.exe5' est automatiquement créé dans le champ Navigator
-> Expert Advisor de MetaTrader.
Il est important de noter la différence entre MetaTrader et MetaEditor. Dans
MetaEditor nous avons des fichiers avec extension '.mql5' etdans
MetaTrader nous avons '.exe5' fichiers.
4.9. Ajout de bibliothèques

Nous pouvons ajouter des bibliothèques spéciales fournies par MQL5. Pour
cela, nous avons juste besoin de connaître le nom de la bibliothèque avec la
structure de code suivante:

L’exemple ci-dessus ajoute un ensemble de classes et de méthodes prêtes à


générer des chiffres Fibonacci dans le premier inclure <ChartObjects
/ChartObjectsFibo.mqh>, et de travailler avec l’envoi et la gestion des
commandes de vente dans le second comprennent <Trade /Trade.mqh>.
Notez que l’extension de ces fichiers comprennent des fichiers est de type
'.mqh'. MetaEditor vous permet également de créer ce type de fichier. À
partir de cela, nous pouvons créer des algorithmes complexes qui
fonctionnent avec la partie graphique et même des animations visuelles.
Nous pouvons rechercher et étudier les principales bibliothèques MQL5 à
partir du site :
Dans le chapitre 5, nous connaîtra et étudierons de meilleures fonctionnalités
MetaEditor à partir de l’étude de la syntaxe MQL5.
Chapitre 5
5. Logique de programmation de base avec MQL5

Comme mentionné précédemment, la langue MQL5 a de grandes similitudes


avec les langues C ++, Java et C #. Par conséquent, toute personne qui a une
connaissance de ces langues aura une grande facilité à comprendre la syntaxe
d’exploitation MQL5.
Chaque algorithme, chaque recette de gâteau, commence par la description
des ingrédients. Faisons donc une analogie et commençons à étudier les
ingrédients de notre EA, notre gâteau.
Comprenons d’abord les principaux types de variables présentes dans MQL5.
Nous devons également savoir comment cette langue déclare et attribue des
valeurs aux variables.
5.1. Types de variables

La variable est l’unité de base du stockage de données dans n’importe quel


langage de programmation. Presque tous les algorithmes ont besoin de
variables. Dans MQL5 nous avons besoin de déclarer une variable toujours
avec un certain type.
Les principaux types de variables utilisées pour créer des robots sont: Integer
(int), point flottant - valeurs décimales (flotteur et double), caractères
alphanumériques (chaîne), logique (bool) et dates (datetime).
Contrairement à MQL5, certaines langues ont une dactylographie
automatique avec, par exemple, Python.
Avoir à déclarer explicitement le type variable présente des avantages
pratiques en matière de sécurité et facilite la confusion des erreurs de
compilation. Lorsque nous limitons le type de variable, nous la protégeons
contre d’éventuelles erreurs arithmétiques, des erreurs d’affectation et des
erreurs logiques de programmation.

5.2. Déclaration de variables

Chaque variable MQL5 doit avoir un type et un nom. Le type de cette variable
doit toujours être spécifié avant le nom. Ensuite, nous pouvons attribuer des
valeurs correspondant au type variable. Étudions les plus utilisés et cela fera
partie de la structure de notre EE.

5.2.1.Type d’entier

Nous avons quelques particularités concernant la consommation de mémoire


nécessaire pour stocker une variable. Dans la plupart des EE ce n’est pas un
problème, mais nous discuterons de ces questions au cas où vous voulez
laisser votre robot optimisé pour l’exigence de consommation de mémoire de
traitement.
Par exemple, nous avons les variables de type char, court, int, uchar, ushort,
uint qui servent pour les variables entier.

char - utilise seulement 1 au-être de la mémoire. Vous pouvez autoriser des


valeurs de l’âge de -128 à 127.
court - utilise 2 octets de mémoire. Peut soutenir des valeurs de l’âge de -32
768 à 32 767.
int - utilise 4 octets de mémoire. Vous pouvez autoriser des valeurs de l’âge
de -2 147 48 648 à 2 147 483 647. uchar - utilise 1 au-être de la mémoire. La
gamme de valeurs est de 0 à 255. ushort - utilise 2 octets de mémoire. La
fourchette de valeurs est de 0 à 65 535. uint - utilise 4 octets de mémoire.
La fourchette de valeurs est de 0 à 4 294 967 295.

Voir l’exemple ci-dessous:

Dans ce cas, nous avons une variable avec le nom 'movingAveragePeriod, qui
accepte les valeurs integer (int). Nous pouvons voir une affectation de valeur
égale à 24. Si aucune valeur n’est attribuée à la variable, le MQL5 attribue
immédiatement zéro.

5.2.2.Type Double

Lorsque nous sommes intéressés à stocker des variables avec des nombres
décimales, le plus approprié est d’utiliser le double type. Le double type
consomme 8 octets de mémoire. Plus économique, nous avons le type de
flotteur qui consomme la moitié, 4 octets.
La principale différence entre ces deux types (flotteur et double) est que la
précision des chiffres significatifs est plus grande pour le type double (15
chiffres significatifs) alors que le flotteur n’a que 7 chiffres significatifs.
Comme la différence dans la consommation de mémoire pour nos robots ne
sera pas pertinente, nous n’utiliserons que le double type qui est plus précis.
Par exemple, la division, dans la figure ci-dessous, n’implique pas beaucoup
de chiffres numériques. Par conséquent, le type double ou flottant ne fait
aucune différence. D’autre part, si nous avions un problème où le résultat
était une dîme périodique multipliée par un certain nombre ou d’autres
décimales, les erreurs cumulatives d’arrondi pourraient interférer avec
l’exactitude des résultats.

À l’heure actuelle, ne vous inquiétez pas de ne pas observer les résultats des
opérations. Nous le ferons plus tard avec l’utilisation de la fonction
Imprimer(). Pour l’instant, examinons la structure de l’état des variables.

5.2.3.Type Chaîne

Les variables de caractère textuel sont tapées avec de la chaîne. La langue


MQL5 permet la concaténation des cordes d’une manière très simplifiée
comme indiqué ci-dessous.
Pour une chaîne si aucune valeur n’est attribuée, une chaîne vide (NULL) est
placée.

bool 5.2.4.Type

Lorsque l’intérêt est d’avoir une variable avec des caractéristiques boolean,
c’est-à-dire, qui ne permettent que les vraies valeurs (vrai) ou faux (faux) nous
pouvons utiliser le type bool:

Il convient de noter que dans le cas où la variable « bool response » a été


déclarée sans valeur initiale, de sorte que la valeur de (faux) est
immédiatement attribuée. Ce n’est qu’alors, voir figure ci-dessus, que nous
avons un changement de valeur à vrai, parce que x est inférieur à y.

5.2.5.Type Datetime

C’est l’un des types les plus utilisés, puisque les données sur les prix des actifs
sont recueillies sur une certaine échelle de temps. Nous serons toujours en
mesure de faire des évaluations des heures et des jours pour les opérations.
Par conséquent, nous devrions être bien conscients de l’utilisation de ce type
de variable.
Le format de date et d’heure pour MQL5 est défini comme suit :
{D’yyyy.mm.dd hh: mm: ss'} c’est à dire {year.mon.day hours: minutes:
seconds}
La lettre majuscule D placée au début de la date fait en sorte que la variable
a la durée de la date constante.
5.3. Déclarer des constantes

Nous avons un moyen de créer des constantes à partir de déclarations


mondiales au début de notre code à partir dela directive # définir.

Bien sûr, les valeurs des constantes ne peuvent pas être changées. S’il y a une
tentative de modification de la valeur, nous aurons une erreur de compilation.
Il est standard de considérer les noms des constantes avec des caractères
majus en haut du boîtier.
5.4. Variables vectorielles : Tableaux

Un tableau est une variable qui prend en charge plusieurs valeurs. Nous
pouvons penser qu’un tableau est quelque chose comme une liste de valeurs
avec un certain type. Dans cette liste, nous pouvons faire des itérations en
traversant chacune de ses valeurs.

Nous utiliserons souvent des tableaux variables pour stocker principalement


des informations sur les prix des actifs financiers et des variables
d’indicateurs.
Voici un exemple d’une déclaration de tableau à trois positions pour le
stockage des numéros d’entier :

Si nous essayons de faire:

Cette erreur de compilation se produit parce que nous avons fait une
déclaration initiale (myArray [3]) pour allouer seulement 3 emplacements de
mémoire et nous essayons d’ajouter une quatrième position.
Nous pouvons faire de notre tableau une liste du type de variable que nous
voulons. Toutefois, à l’avance, MQL5 doit connaître la taille de la liste des
valeurs dont nous avons besoin pour le tableau. Donc, mettre une certaine
valeur entre parenthèses peu de temps après le nom variable est nécessaire.
Une autre façon de déclarer les tableaux est de lui attribuer directement des
valeurs. Nous devrions le faire de la manière suivante :
5.5. Pourboucle

Nous allons maintenant étudier une boucle de répétition très importante


utilisée dans le développement de robots d’investissement. Lorsque nous
voulons que l’ordinateur effectue des activités répétitives dans certaines
limites prédéterminées, une façon pratique d’informer la machine est à
travers la boucle for.
Lorsque nous tapons le mot pour metaeditor nous aurons un petit ensemble
comme indiqué ci-dessous:

Lorsque nous appuyez sur Tab, l’éditeur va autocomplete toute la structure


de la boucle for.

Cette structure signifie que nous allons itérer de l’entier 0 (zéro) à l’entier
(total-1) avec une incrément d’itération « i » d’une unité (i ++ est le même
que i = i + 1, ainsi que i - est le même que i = i-1).
Donc, si nous voulons faire un scan à l’intérieur des éléments d’un tableau,
nous pouvons faire à partir de la boucle for comme suit:
5.6. Enum

La structure de l’enum est un type particulier d’entier où nous pouvons


définir, à travers une liste, les constantes d’affectation. Avec l’enum, nous
pouvons personnaliser les types de variables qui conviennent le mieux à notre
problème.
Par exemple, créons un enum pour représenter les saisons de l’année. Nous
savons qu’il n’y a que 4 saisons de l’année : printemps, été, automne et hiver.
Lorsque vous tapez le mot énumér, nous avons une petite flèche pointant
vers la droite, comme indiqué ci-dessous:

,
Un autre onglet, nous avons autocomplete. Notre enum devrait ressembler à
ceci :

Nous pouvons maintenant utiliser 'SEASONS' comme un type de variable à


déclarer. Dans de nombreuses situations, cela est très utile pour rendre notre
code plus intuitif et organisé.
La valeur de la production était de 1 (un) parce que l’énumération considère
la commande d’entiers à partir de zéro. Dans notre cas, nous avons le
printemps (0), l’été (1), l’automne (2), l’hiver (3). Intéressant et très utile
l’enum, non?
5.7. Variables de type d’entrée

Les variables d’entrée sont les seules qui permettent à l’utilisateur des
indicateurs ou de l’EE de leur attribuer des valeurs. Ces variables sont utilisées
pour fournir à l’utilisateur la possibilité de modifier les configurations des
indicateurs, stop loss, prendre des bénéfices, le nombre de lots, etc.
Les variables d’entrée peuvent être de n’importe quel type, y compris les
types d’œuvre. Prenons un exemple pour le rendre plus facile à comprendre.

Après avoir compilé le code ci-dessus, nous aurons dans MetaTrader la


possibilité suivante de définir l’EA:
Par conséquent, la directive d’entrée nous permet de dialoguer avec
l’utilisateur sur l’onglet Entrée de notre EE.
5.8. Variables locales et mondiales

Il est très important de connaître la distinction entre les variables locales et


les variables globales. La confusion entre ces deux types de variables conduit
à de nombreuses erreurs de compilation et d’exécution de l’EE. Par
conséquent, nous devons être très prudents et prêter une attention
particulière à l’endroit où nous faisons la déclaration des variables.

5.8.1.Variables locales

Créons une fonction pour montrer un exemple de variables locales. Lorsque


les variables sont déclarées dans une fonction ou des méthodes, elles ne
seront utilisées que dans les fonctions avec les valeurs assignées. Nous avons
donc des variables locales parce qu’elles sont déclarées selon une méthode
ou une fonction.

5.8.2.Variables globales

Lorsque nous voulons qu’une variable soit utilisée par n’importe quelle
fonction/méthode n’importe où dans notre algorithme, nous devons la
déclarer globalement comme le montre l’exemple ci-dessous. Portez une
attention particulière à cet exemple car il est très important de comprendre
la différence entre les variables.

Prenons un autre exemple important, maintenant avec l’enchaînement d’une


structure avec le Boolean si conditionnelle. Évaluez soigneusement cet
exemple.
5.9. Variables prédéfinis par MQL5

Le langage MQL5 a plusieurs variables couramment utilisées pour


l’élaboration de stratégies. Ces variables ont leur propre notation et sont
précédées d’un soulignement (_).
Les principales variables les plus utilisées et que nous appliquerons pour créer
notre première EE sont les suivante :
_Symbol :représente le symbole de l’actif financier présent sur le graphique
actuel affiché à l’écran.
_Period: se réfère à la période, en quelques minutes, du tableau actuel des
bougies.
_Point: représente la taille des points qui caractérisent l’actif financier.
_Digits :représente le nombre de chiffres décimales de l’actif actuel.
L’utilisation de ces variables deviendra plus claire lorsque nous développerons
notre EE.
5.10.Opérations mathématiques

Nous avons déjà vu plusieurs opérations mathématiques. Étudions un peu


plus d’entre eux. Le langage MQL5 nous fournit une structure très intuitive et
simple pour travailler avec des opérations mathématiques.

La langue elle-même est déjà livré avec un ensemble de fonctions


mathématiques et statistiques pour travailler en lien avec les opérations les
plus diverses. Nous avons les fonctions avec radical MathXXX très utile:
5.11. Relationslogiques et conditionnelles

Dans la structure de nos algorithmes, nous utilisons généralement des


relations logiques qui retournent des valeurs de vrai ou de faux. Les
principales relations sur laquelle nous travaillerons sont représentées comme
suit par MQL5 :

Voir l’utilisation de la si conditionnelle plus les conjonctifs logiques & & (ET)
et || (OR) :

Passons maintenant à la structure conditionnelle du type d’autre. L’autre


est activé si le « si »conditionneln’est pas vrai. Par conséquent, si le «si »est
faux automatiquement l’autre devient vrai et tout à l’intérieur des touches
de cette structure est exécuté.
L’autre si la structure est très utile dans de nombreux cas. Lorsque la chaîne
de conditions est étendue, nous pouvons utiliser cette structure. Si ce n’est
pas le cas, d’autre s’exécute automatiquement.

5.12. Opérateur ternaire

L’opérateur ternaire existe dans plusieurs langages de programmation de


haut niveau et dans MQL5 ce n’est pas différent. Il s’agit d’un opérateur très
utile pour simplifier les structures conditionnelles qui pourraient utiliser si et
autrement.
L’opérateur ternaire a la structure d’exploitation suivante :
(conditionnelle)? (alternative 1 si c’est vrai): (alternative 2 si faux)

Prenons un exemple :

Dans l’endroit où nous utilisons la variable conditionnelle, nous pourrions


faire n’importe quelle structure en utilisant les évaluateurs logiques (> =, <=,
&&, ||).

5.13. Méthodes ou fonctions

Lorsque nous travaillons avec la programmation orientée objet (OOP), nous


utilisons constamment les classes. Les classes sont les plans maîtres de
l’architecture des objets. Ne vous inquiétez pas si cela semble compliqué
parce que nous n’utiliserons pas
programmation orientée objet.
Parmi les classes, nous trouvons habituellement des méthodes et des
attributs. Le terme fonction est le plus couramment utilisé lorsque nous
travaillons avec des programmes procéduraux. La langue MQL5 nous permet
de programmer à la fois dans le paradigme orienté objet et procédural. Ce
livre est sur la programmation procédurale, donc nous allons parler des
méthodes et des fonctions comme si elles étaient la même chose.
Mais qu’est-ce que les méthodes ou les fonctions? Ce sont des blocs de code
qui vous permettent d’effectuer une tâche spécifique. Habituellement, les
fonctions ont des paramètres d’entrée et de retour. En d’autres termes, les
fonctions traiter les entrées de paramètres selon une logique bien définie et
renvoie un résultat.
Voici un exemple pour clarifier davantage tout cela :

Dans une fonction, nous pouvons avoir plusieurs types de retours et de


paramètres d’entrée. Le traitement effectué dépend de la logique du
problème.
Prenons un autre exemple où nous avons des fonctions utilisées pour calculer
la somme, la multiplication et la division de deux nombres :
Les fonctions qui ne retournent pas les valeurs ont une déclaration de type
vide. Toutefois, si la fonction a une sorte de retour, nous sommes tenus de
retourner quelque chose par rapport au type de retour.

5.14. Bougies et variables de tiques

La langue MQL5 dispose d’un ensemble de bibliothèques prêtes à travailler à


l’acquisition et à la manipulation des prix des bougies. Nous avons la
structure MqlRates qui stocke les informations sur les prix de l’ouverture, la
fermeture, le maximum, le minimum, le volume, l’étalement et le temps.
Les informations sur les tiques se réfèrent à celles recueillies dans le livre
d’offres telles que demander (enchère), soumission (vente), dernière
entreprise, etc. Ces informations peuvent être consultées à partir de la
structure MqlTick.
Voyons comment déclarer une bougie variable et cocher. Nous devons nous
méfier, car nous devons d’abord déclarer la variable après avoir fait le
chargement approprié des données dans la variable déclarée à partir d’autres
fonctions spécifiques.
Afin de charger, nous devons spécifier l’actif financier (qui peut être l’actuel
du graphique en utilisant _Symbole) et la période des bougies (pour utiliser
le graphique actuel que nous mettons _Période).
Par exemple, nous créerons un nouveau conseiller expert avec le nom de
Study_Var (étude des variables). Dans l’assistant maintenant, nous allons
ajouter l’option OnTimer.
Nous avons décidé d’ajouter la fonction OnTimer() parce qu’avec elle, nous
pouvons travailler et afficher nos codes de débogage en dehors des heures de
négociation. Comme nous l’avons vu dans le chapitre 4, la fonction OnTick()
est appelée chaque fois qu’une nouvelle opération de trading est effectuée,
et comme nous sommes probablement faire les codes en dehors des heures
de négociation aucun appel à cette fonction ne sera faite.
Nous utiliserons donc la fonction OnTimer() pour passer des appels à temps
et être en mesure de voir l’évolution de nos codes. Demandons-lui d’être
appelé toutes les 2 secondes à partir de la fonction EventSetTimer(2) (voir
exemple ci-dessous).
Les fonctions CopyRates() et SymbolInfoTick() ont été accomplies suivant les
structures suivantes :

Nous pouvons mieux comprendre les structures et les fonctions principales


de la bibliothèque MQL5 en utilisant la clé F1. Pour ce faire, il suffit de placer
le curseur de souris sur la structure d’intérêt et appuyez sur F1. Par exemple,
faisons ceci pour MqlRates:
De la clé F1, nous avons accès à une documentation très complète de la
langue MQL5. Nous devrions donc toujours l’utiliser en cas de doute.
Comme déjà discuté, nous ne sommes pas toujours le développement de l’EA
dans les heures de négociation et même alors nous avons besoin de faire
quelques débogages dans le code, nous utilisons donc OnTimer().
Toutefois, dans la fonction OnTimer() nous ajouterons le code suivant :

Compilons. Maintenant, allons à MetaTrader et faire glisser EA


'Study_Var.exe5' au graphique. Ensuite, dans la boîte à outils (si elle ne
s’affiche pas aller au menu d’affichage et demander à ouvrir) et activerl’onglet
Experts.
Une fois que le robot a été ajouté au graphique, nous pouvons remarquer
que sur cet onglet toutes les 2 secondes, nous avons une mise à jour de la
fonction OnTimer() et cequi est à l’intérieur il est exécuté. Dans notre cas,
nous voyons les prix de l’ouverture, max, fermer et min.

Nous prenons les prix de la bougie en position « 0 », c’est-à-dire la collecte


des valeurs de la bougie la plus actuelle. La bougie peut représenter n’importe
quel graphique de temps, ce qui importe vraiment est votre position. Nous
pouvons choisir n’importe quelle position désirée, tout ce que nous avons
besoin est de comprendre l’ordre du vecteur. Voici une illustration pour
faciliter cette compréhension (il est à noter que cette illustration n’est valable
qu’après l’utilisation du ArraySetAsSeries() qui commande le vecteur tel qu’il
est montré).
Notre vecteur de bougie n’a que 10 positions, parce que nous utilisons la
fonction CopyRates(_Symbo, _Period, 0,10, bougies).

Nous pouvons rendre notre code plus facilement en mesure de choisir la


position des bougies et, en outre, ajouter des informations sur les tiques, voir
ci-dessous:

Testons maintenant le cas de la variable (pos = 10). Nous avons choisi pour les
bougies un vecteur avec seulement 10 positions de prix, mais nous essayons
d’accéder à la position du numéro 11 (en se souvenant que le compte
commence par zéro). Ainsi, le code sera compilé normalement, maislorsqu’il
est exécuté dans MetaTrader, nous recevrons le message d’erreur suivant:

Nous avons un tableau d’erreur hors de portée. MetaTrader informe


également la ligne de code dans le fichier .mql où nous trouvons la violation
(ligne 59). Nous devons être vigilants car ce type d’erreur est assez fréquent
dans nos créations de robots. Soyez donc très prudent avec les tailles et les
positions de suivi des tableaux.
5.15. Fonctions Commentaire () et alerte ()

En utilisant certaines fonctions utiles, nous pouvons créer des éléments


d’avertissement et des alertes pour assurer une plus grande sécurité
d’utilisation et une meilleure compréhension de ce qui se passe avec nos EE.
5.15.1.
Commentaire ()
Les commentaires sont toujours les bienvenus. Prenons un exemple illustratif
:

Nous utilisons la fonction DoubleToString() pour passer du double à la chaîne.


Si nous ne prenons pas soin d’utiliser cette fonction, nous n’aurons pas
d’erreur de compilation, mais dans l’onglet Erreurs de MetaEditor Toolbox,
nous observerons la composition suivante des avertissements :

5.15.2. Alerte ()

La fonction Alerte() affiche une boîte d’alerte au centre de l’écran avec les
informations demandées. Ceux qui sont intéressés peuvent rechercher des
alertes sonores, car il est également possible de les ajouter à nos EE.
5.16. Ajout d’indicateurs MQL5

Passons maintenant à l’une des pratiques les plus courantes et les plus
importantes lorsque l’objectif est de planifier une stratégie d’investissement.
Il est très probable que votre stratégie de placement utilisera un indicateur,
alors apprenons à appeler des indicateurs de la langue MQL5.
Dans un premier temps, nous devons déclarer les variables de notre
indicateur. La façon dont nous déclarerons les variables dépendra
grandement du type et du fonctionnement de l’indicateur.
Il existe des indicateurs qui ne fournissent qu’une seule production
d’information, comme une moyenne mobile. De la moyenne mobile, nous
n’avons qu’une seule sortie d’information qui est la valeur de la moyenne
mobile calculée pour un point spécifique dans le graphique. Dans ce cas, nous
disons que la moyenne mobile n’a qu’un seul tampon de mémoire. Chaque
indicateur a besoin d’au moins une poignée et il doit être un type d’entier.

La déclaration de l’indicateur moyen mobile est donnée par une fonction de


MQL5 (iMA) avec une F1 dans cette fonction que nous obtenons:

Dans notre cas, nous utilisons une période moyenne mobile de 7 avec le type
de lissage simple (MODE_SMA) appliqué au prix de clôture
(PRICE_CLOSE). Il est bon de souligner, une fois de plus, que chaque indicateur
a sa propre structure de paramètres nécessaires à son bon fonctionnement.
Il est toujours bon de mettre des codes pour évaluer les erreurs de
chargement variables possibles. Dans notre cas, nous avons ajouté unealerte
() si nous avons des problèmes avec la variable « mm_Handle ». Nous l’avons
fait parce que le bon fonctionnement de cette variable est extrêmement
important pour notre stratégie robot. Toutefois, la pratique consistant à
évaluer le chargement des variables est toujours la bienvenue.
La même procédure peut être effectuée pour l’indicateur iRSI().
Nous avons fait la déclaration initiale et l’ajout de l’indicateur sur le graphique
avec la fonction ChartIndicatorAdd(0,0,mm_Handle). Maintenant, nous
devrions pointer « mm_Handle » vers le vecteur de « mm_Buffer », qui est
l’endroit où nous allons accéder aux valeurs de notre moyenne mobile.
Pour ce faire dans la fonction OnTick() nous devons appeler la fonction
CopyBuffer().
Nous pouvons comprendre la structure de CopyBuffer() comme suit:

Ajoutons maintenant l’indicateur oscillateur RSI. Cet indicateur n’a


également qu’un seul tampon. Si vous avez des doutes quant au nombre de
tampons de chaque indicateur, il vous suffit d’aller à la documentation de la
clé F1 et de rechercher #propriétéindicator_buffers:

Il suit le code avec l’ajout des deux indicateurs (moyenne mobile et RSI).
Notez que la fonction (iRSI ()) de l’indicateur RSI a des paramètres d’entrée
très différents de la fonction iMA () :
Enfin, nous sommes entièrement équipés du minimum d’informations
nécessaires pour commencer à programmer notre robot d’investissement.
Passons au chapitre suivant!
Chapitre 6
6. Programmation de l’EE

Maintenant que nous connaissons les principales fonctionnalités de


MetaTrader, nous avons déjà compris les bases des fonctionnalités de la
langue MQL5 et l’utilisation de MetaEditor, nous sommes peu disposés à
commencer à développer notre robot d’investissement (Expert Advisor - EA).
Avant de commencer à programmer, faites-nous connaître et comprendre les
détails de notre stratégie d’évaluation environnementale.
6.1. Aperçu de la stratégie

Notre EE aura deux moyennes mobiles et l’indicateur RSI. La traversée de


deux moyennes mobiles fonctionne bien lorsque le marché est dans une
tendance. En revanche, sur les marchés parallèles ou dans la consolidation,
l’indicateur RSI est plus performant.
Plusieurs indicateurs indiquent quand le marché est en tendance comme
indicateur ADX. Nous avons décidé de choisir le RSI pour des raisons de faire
une alternative entre la possibilité de choisir le marché dans la tendance et /
ou le marché latéralisé.
Pour les opérations d’achat ou de vente, notre EA aura la possibilité de choisir
un seul des indicateurs (franchissement des moyennes ou RSI) ou les deux en
même temps. Ainsi, nous aurons une EE qui permettra de suivre les
déclencheurs d’entrée s’appuyant sur deux indicateurs : les moyennes
mobiles et le RSI.
Comprenons comment les déclencheurs d’entrée dans les opérations seront
donnés pour chacun de ces indicateurs.

6.1.1.Moyennes mobiles

D’abord, nous allons à la gâchette pour le croisement des moyennes mobiles.


Nous avons deux moyennes mobiles et le type, qu’il soit exponentiel ou
arithmétique, de ces moyennes peut être modifié comme nous le verrons
ensuite.
L’une des moyennes mobiles sera appelée la moyenne rapide et l’autre
moyenne lente. La moyenne rapide est celle qui a la période la plus courte,
d’autre part la moyenne lente devrait toujours avoir la plus longue période.
Nous donnons ces noms aux moyennes parce que les moyennes rapides sont
celles avec une période plus courte et sont plus adhérentes au prix, ainsi elles
se déplacent plus rapidement que celles des périodes plus longues où elles
ont le comportement directionnel plus lent.
Examinons un diagramme illustratif de la façon dont ces déclencheurs
fonctionnent dans le commerce:

6.1.2.Indice de force relative (ISR)

O indicador RSI (Relative Strength Index) no MetaTrader se refere a um


Oscilador, ou seja, é útil para indicar posições de sobrecompra e sobrevenda
em mercado lateralizado (consolidado).
Nous n’allons pas entrer dans les détails sur les calculs derrière le RSI parce
que ce n’est pas l’objectif pour le moment. Mais comprenons que les chatons
achètent et vendent cet indicateur
La figure ci-dessous montre le RSI et deux niveaux principaux (lignes solides
en rouge) à 30 et 70. Chacune de ces lignes représente les niveaux pour
permettre une suracheté (ligne 70) et une survente (ligne 30). En d’autres
termes, dans un marché consolidé, lorsque le RSI est égal ou supérieur à la
ligne 70, il peut s’agir d’un avertissement d’inversion, mettant en garde
contre une suracheté, c’est-à-dire qu’il peut être un bon moment pour faire
une vente. D’autre part, si le RSI, une fois de plus dans un marché consolidé,
est inférieur ou égal à la ligne 30, nous sommes dans une région survendue
indiquant un bon moment pour acheter.

Dans notre EA, nous laisserons ces niveaux de 70 (suracheté) et 30


(survendus) possibles d’être modifiés par l’utilisateur. Ainsi, vous pouvez
choisir des niveaux plus lâches ou restrictifs pour les chatons à acheter et à
vendre.
Donnons maintenant l’exemple où les niveaux de déclenchement à acheter
sont à la ligne 30 et le déclencheur à vendre est à la ligne 70:
Prenons donc un résumé de la stratégie avec les éléments que nous devrons
programmer pour notre EE :

1 - Nous devons ajouter deux moyennes mobiles (rapides et lentes) à la


fois avec la possibilité de choisir la période, le prix moyen de l’application et
la méthode moyenne utilisée.

2 - Nous devons ajouter l’indicateur RSI avec possibilité de choix de


période, appliedprice, et les niveaux de survente et de survente.

3 - L’utilisateur peut choisir parmi les options pour entrer dans les
commerçants si elles proviennent des moyennes mobiles plus le RSI, seules
les moyennes mobiles ou seulement le RSI.
Maintenant que nous connaissons l’opération d’achat et de vente de nos
deux indicateurs (franchissement des moyennes et RSI), nous sommes prêts
à commencer à développer l’algorithme avec la stratégie présentée.
6.2. Création d’EA

Ouvrons MetaEditor et demandons à l’assistant de créer un nouveau


conseiller expert. Donnons-lui le nom suivant: MM_CROS_RSI.mql5.
Si vous souhaitez obtenir le code source complet du robot, vous pouvez
accéder à la page suivante dans github https://github.com/rafaelfvcs ou
envoyer un e-mail à rafaelfvcs@gmail.com. Toutefois, il est fortement
recommandé d’entrer les codes présentés pour mémoriser progressivement
l’utilisation des fonctions et des fonctionnalités metaeditor.
6.3. Déclaration des variables mondiales

Commençons par déclarer nos variables globales. Nous séparerons les


variables que l’utilisateur aura accès à modifier et celles qui seront utilisées
pour la structure de l’algorithme EA.

6.3.1.Variables pour l’utilisateur

Nous fournirons les options suivantes (paramètres d’entrée) : objectifs de


profit, stop loss, nombre de lots négociés, temps de graphique, périodes
moyennes, période RSI, application des méthodes de prix (ouverture,
fermeture, max, min) pour les moyennes et le RSI, possibilité de choix dans la
stratégie de déclenchement d’entrée dans les opérations (Moyennes mobiles
plus RSI, seulement croisements, RSI seulement) et délai de fermeture des
opérations ouvertes.
Voici le code de tout cela:
Pour la variable « stratégie », il a été choisi pour créer unum (cela doit être
déclaré en haut de l’algorithme au-dessus des variables d’entrée) :

6.3.2.Variables globales

Nous devons maintenant déclarer les variables globales qui seront utilisées
par les fonctions de notre algorithme. Voir ci-dessous:

6.4. Fonction OnInit ()


Dans la fonction OnInit(), nous ajouterons les variables d’initialisation aux
indicateurs et les ajouterons au graphique avec la fonction
ChartIndicatorAdd(). Suivez le code:

Notez que ChartIndicatorAdd(0,0,mm_fast_Handle) et


ChartIndicatorAdd(0,0, mm_slow_Handle) a la même référence d’ajout
graphique (0 zéro), ce qui signifie que les deux indicateurs seront sur l’écran
principal où les bougies . Toutefois, ChartIndicatorAdd(0,1,ifr_Handle)
termes de la référence (1) c’est à dire le signet sera ajouté à une autre boîte
graphique.

6.5. Fonction OnDeinit ()

Lorsque l’EE est supprimée, nous devons supprimer les indicateurs et, si
nécessaire, effacer les variables et les paramètres. La fonction OnDeinit() est
appelée lorsque le robot est retiré. Ainsi, dans le cadre de cette fonction, nous
pouvons écrire nos activités de désinitalisation des paramètres:
Au fur et à mesure que nous écrivons ces codes, il est conseillé de compiler et
de tester EA dans MetaTrader. Donc, si nous traînons le fichier:
MM_CROS_RSI.exe5 dans MetaTrader pour certains actifs financiers, nous
aurons ce qui suit:
En cliquant sur ok ajoutera les indicateurs au graphique et l’EA apparaîtra
dans le coin supérieur droit ou non si le bouton de négociation automatisé est
sur.
Voir l’exemple ci-dessous:
6.6. Fonctions de conseiller expert

Créons des fonctions utiles et importantes pour le fonctionnement de notre


EE. Nous pouvons utiliser le raccourci (Ctrl +.) Créer des sections pour un
ensemble de fonctions que nous créerons pour notre EA.

Tout d’abord, nous aurons besoin d’une fonction qui informe l’apparition
d’une nouvelle bougie indépendamment du temps graphique. Pourtant, nous
n’avons pas une fonction native dans MQL5 qui nous permet d’évaluer avec
précision changer de bougie et donc nous devons le créer.
La fonction doit revenir vrai si une nouvelle bougie apparaît sur le graphique.
Voici le code utilisé dans les tutoriels dans le portail d’article MetaTrader:
Faisons une fonction pour vous aider à visualiser les points d’entrée de nos
stratégies. Cette fonction va essentiellement construire un objet
graphique(ligne verticale). Chaque fois que notre robot présente des
conditions logiques (la gâchette est activée), une ligne verticale sera tracée
sur le graphique avec un nom et une couleur se référant au type
d’avertissement.

La fonction dessineLineVertical() a quatre variables d’entrée. MQL5 permet


aux dernières variables d’entrée d’une fonction d’être déjà avec une valeur
par défaut. Voir le cas de la variable 'couleur = clrAliceBlue'. Cela signifie que
lorsque l’utilisateur ne définit pas une couleur spécifique, le « clrAliceBlue »
sera automatiquement attribué à la variable. Par conséquent, l’utilisateur n’a
aucune obligation d’attribuer des valeurs à ce type de variables. Toutefois, il
est obligatoire d’entrer des valeurs pour les autres variables.
Créons maintenant l’une des fonctions les plus importantes pour notre EA. Ce
sont les fonctions de l’envoi des commandes.
Nous devons envoyer des ordres d’achat ou de vente chaque fois qu’un
déclencheur est lancé. Dans MQL5, nous pouvons faire ce type d’envoi de
différentes façons. Nous pouvons utiliser une classe spécifique appelée
CTrade pour travailler avec la manipulation et l’envoi des commandes.
Cependant, ici, nous choisissons d’utiliser les structures d’assemblage
requises (MqlTradeRequest) et envoyer une réponse (MqlTradeResult).
MqlTradeRequest est utilisé pour effectuer toutes les demandes
commerciales pour une opération commerciale. Il contient tous les domaines
nécessaires à l’exécution d’un accord commercial.

MqlTradeResult est utilisé pour toute opération commerciale. La variable


déclarée de ce type pourra accéder aux résultats de la demande commerciale.

À partir de ces structures, nous pouvons délimiter le type d’ordre qui nous
intéresse, en précisant les détails de celui-ci. Les variables de demande et de
réponse doivent être utilisées dans une fonction d’envoi de commande
appelée OrderSend().
Voici une fonction créée pour envoyer une commande d’achat sur le marché
avec le type de remplissage FOK (remplir ou tuer - ou remplit la taille du lot
de la commande ou ne s’exécute pas). Cet ordre, exécuté sur le marché, entre
déjà avec le stop loss et l’objectif de gains (prendre des bénéfices) définis.
Dans tous les marchés il ya des offres des meilleurs acheteurs et best-sellers.
Par conséquent, nous devons accéder au livre d’offres pour connaître ces prix.
Comme nous l’avons vu, au chapitre 5, nous pouvons accéder à l’information
sur les livres de la structure MqlTick. Nous avons donc créé une variable
appelée « tique » pour stocker ces informations. Avec elle, nous pouvons
accéder au best-seller 'tick.bid' et au meilleur acheteur 'tick.ask'.
Nous avons l’offre = (vendre, offrir) et demander = (acheter, demande).

Le type d’action à choisir est la première réquisition que nous devrions


assigner :
Nous avons plusieurs types de commandes. Nous pouvons choisir parmi le
type de structure :

La fonction NormalizeDouble() est utilisée pour arrondir les variables. Nous


devons l’utiliser parce que certains actifs financiers ont le nombre de chiffres
de prix différents des autres. Nous avons des actifs qui sont quantifiés par
points (comme c’est le cas des contrats à terme sur indices et en dollars),
d’autres sont quantifiés par le prix et même pips (marché forex). Dans le
chapitre 5, nous avons discuté de l’utilisationde _Point et _Chiffres.
Les valeurs des variables SL et TK doivent être choisies par l’utilisateur sous
forme de points. Notez que pour le prix stop loss que nous avons fait:
NormalizeDouble(tick.ask - SL * _Point, _Digits) que nous achetons et notre
point stop loss doit être en dessous de la (demander). Déjà l’objectif de la
prise (prendre des bénéfices) naturellement pour un achat devrait être au-
dessus des points de demande de savoirs traditionnels.
C’est avec la demande request.type_filling = ORDER_FILLING_FOK' que nous
choisissons le type d’exécution de commande. Nous avons essentiellement
trois types d’exécution des commandes :
Dans ce cas, nous avons le niveau stop loss au-dessus du prix d’offre
NormalizeDouble(tick.bid + SL * _Point, _Digits) et l’objectif de gain
naturellement en dessous de NormalizeDouble (tick.bid - TK * _Point, _Digits).
Nous devons également créer deux fonctions pour fermer les commandes
ouvertes si nous arrivons au délai choisi par l’utilisateur. C’est parce que
notre robot est daytrader, nous ne voulons pas dormir positionné. N’oubliez
pas que pour garantir la clôture des commandes ouvertes, nous avons la
variable « Position de clôture limite » choisie par l’utilisateur.
Donc, pour conclure une vente, nous devons acheter et de fermer un achat
que nous devons vendre.
Nous pouvons noter que pour la fonction CloseBuy() le request.type_filling =
ORDER_FILLING_RETURN', c’est parce que nous voulons fermer la commande
indépendamment du meilleur achat ou de vendre. Comme nous le savons ce
type de remplissage (ORDER_FILLING_RETURN) exécute l’ordre jusqu’à ce
qu’il atteigne la limite du nombre de lots.
6.6.1.Gestion des erreurs

Il est toujours bon de traiter les retours des commandes envoyées. C’est parce
que nous pouvons minimiser les problèmes et évaluer les erreurs d’exécution.
Dans nos fonctions, nous l’avons fait à partir de answer.retcode qui renvoie
un code (avec 5 chiffres) provenant du serveur de courtage. Voici une fenêtre
montrant les détails de ces codes. Vous pouvez vous rendre à cette fenêtre
en appuyant sur la touche F1 sur le numéro de code 10008 ou 10009.
6.7. Fonction: OnTick()

L’objectif est maintenant de créer toute la logique de stratégie pour notre EA.
Nous avons déjà les fonctions nécessaires prêtes pour son fonctionnement.
C’est dans le cadre de la fonction OnTick() appelée chaque nouvelle activité
réalisée en Bourse, que nous rédigerons l’organe stratégique.
Tout d’abord, nous devons nourrir nos variables bougie, tique et indicateur
avec des données. Aussi, n’oublions pas de les trier de manière appropriée
avec la fonction ArraySetAsSeries() :

Après cela, nous pouvons utiliser ces variables pour construire la logique de
l’action d’achat et de vente de notre EA. Suivez les conditions des passages à
niveau :
Nous devons créer une logique pour utiliser l’enum (STRATEGY_IN). Nous
avons besoin que les déclencheurs de vente et d’achat soient orientés avec
les options de : ONLY_MM (moyennes mobiles seulement), ONLY_RSI (RSI
seulement) et MA_AND_RSI (Moyennes mobiles plus RSI) décrites dans cet
enum. Voici une solution possible à ce problème :
Maintenant, nous pouvons organiser nos fonctions afin qu’EA puisse prendre
des décisions d’achat et de vente. Il est important de savoir quand une
nouvelle barre (bougie) est créée afin que l’algorithme puisse suivre, sans
beaucoup d’effort de calcul, un possible croisement des moyennes et des
valeurs RSI dans la région désirée. Tracez une ligne verticale lorsque les
déclencheurs d’achat/vente sont activés.
La fonction 'PositionSelect(_Symbol)' renvoie un boolean. S’il y a une position
en cours, elle revient vraie, sinon fausse. Donc, nous voulons juste entrer dans
une opération si l’EA n’a pas de position ouverte.
Enfin, pour mettre fin à notre EA tant attendue, nous avons besoin d’un code
pour fermer une position ouverte à la limite de temps, c’est-à-dire cette
position qui n’a pas atteint la cible gagnante ou la perte stop.

La fonction PositionGetInteger(POSITION_TYPE) renvoie le type de position


ouverte. S’il s’agit d’une position d’achat POSITION_TYPE_BUY dans le cas
d’une vente, nous POSITION_TYPE_SELL.
Une fois de plus, si vous souhaitez avoir accès au code complet de cette EA
peut être téléchargé à: https://github.com/rafaelfvcs. Ou si vous préférez,
vous pouvez envoyer un e-mail rafaelfvcs@gmail.com et je serai heureux de
vous l’envoyer!
Retestons maintenant notre plus récent investissement multi-stratégie EA.
Chapitre 7
7. Backtests

Notre principal intérêt avec Expert Advisor (EA) est d’avoir une stratégie
gagnante à long terme. Il y a cette phrase célèbre: que personne sur le marché
financier n’a une boule de cristal. Il ne fait aucun usage d’essayer de prédire
l’avenir du marché, parce que malheureusement, il est impossible jusqu’à
aujourd’hui.
Nous devons être réalistes pour accepter que notre stratégie aura des hausses
et des bas en ce qui concerne les rendements financiers. La stratégie 100%
gagnante est une utopie. Toutefois, il est important de savoir à quel point
notre stratégie est bonne. Il n’y a rien de mieux que d’utiliser des données
antérieures pour évaluer son état dans diverses conditions du marché. Ainsi,
tester notre stratégie dans les périodes passées est appelé un backtest.
Heureusement, quand il s’agit de backtesting MetaTrader 5 fournit une
collection de fonctionnalités simples et utiles pour extraire autant
d’informations que possible de la performance de notre EA.
Maintenant que nous avons déjà une stratégie multi-stratégie EA
(MM_CROS_RSI.exe5) programmée et fonctionne correctement, faisons les
backtests.

7.1. Backtest dans MetaTrader 5

Ouvrons MetaTrader et allons sur le terrain Navigator -> Expert Advisor


consultant et chercher notre plus récent EA. Une fois trouvé, nous devrions
cliquer à droite sur elle, puis sur le test.
Cela nous donnera un nouveau champ dans MetaTrader appelé Strategy
Tester,dans l’onglet paramètres que nous avons le panel suivant de
possibilités:

Avec ces fonctionnalités, nous serons en mesure de choisir l’actif financier


pour le backtest:
L’heure graphique:

Nous avons la possibilité de choisir comment la formation de nos bougies


sont simulées par MetaTrader.

Pour cette façon de générer des prix dans les bougies, nous allons aller aux
principales options les plus utilisées:
Chaque tique ou chaque tique basée sur de vraies tiques: MetaTrader tente
de simuler des tiques de prix réelles dans la formation de bougies. Cette
option laisse le backtest plus précis, mais nécessite plus de ressources
informatiques une fois à l’intérieur d’une bougie le MetaTrader tente de
reproduire la formation de tiques réelles. Il est à noter que les tiques ne sont
pas réelles ne sont qu’une simulation (une représentation possible de la
réalité). Cet article clarifie le fonctionnement de cette simulation
:https://www.mql5.com/en/articles/75.
1 minute OHLC: Dans ce type de formation de bougie MetaTrader génère
seulement 4 valeurs de prix : O - ouvert, H - Haut, L - Bas, C - Fermer. Cette
option nécessite beaucoup moins de ressources informatiques par rapport à
l’option tick.
Prix ouvert seulement: C’est l’option la moins coûteuse sur le plan
informatique, car elle n’utilise qu’un prix pour représenter une bougie.
Dans nos backtests, nous laisserons toujours l’option Avant marqué Non
(voir la figure ci-dessous). Cette option est utile lorsque nous faisons des
optimisations de stratégie et que nous voulons utiliser des méthodes
d’optimisation telles que l’analyse de l’avance sur le marché (WFA). Ce type
d’étude dépasse le cadre de ce livre. Si vous voulez en savoir plus à ce sujet,
vous pouvez acheter l’autre e-book (Comment optimiser correctement les
robots d’investissement dans MetaTrader 5[4]).

Le type d’exécution avec ou sans délai est intéressant afin que nous
puissions simuler les conditions dans lesquelles les serveurs sont et la vitesse
de notre Internet. La latence se réfère au temps requis pour exécuter
correctement les ordres de routage.

Nous avons la possibilité de choisir le financement à partir du dépôt initial


ainsi que la possibilité de tirer parti des investissements (dans le cas du chiffre
inférieur à 1: 1 - sans effet de levier).

Pour nos backtests, le champ d’optimisation doit être désactivé :


Nous devrions choisir la période de données pour le backtest.

Et vérifiez l’option pour afficher le backtest:

Passons maintenant à l’onglet Entrée (Paramètres) du testeur de stratégie.


Dans ce domaine, nous pouvons mettre la configuration nécessaire à la
réalisation de nos backtests. Pour le moment, ce qui nous intéresse, c’est
juste la colonne Valeur, mise en évidence en rouge bas. Les autres colonnes
(mises en surbrillance en vert) sont utilisées comme paramètres
d’optimisation de l’EA.

Dans l’onglet Agents, nous avons des informations concernant la puissance


de calcul de la machine que nous utilisons pour faire les backtests et les
optimisations. Un backtest est généralement peu coûteux sur le plan
informatique. Cependant, lorsque nous faisons des optimisations (de
nombreux backtests sont nécessaires), nous aurons besoin de beaucoup de
ressources et donc cet onglet Agents sera important pour nous.

Nous pouvons créer un journal pour utiliser plusieurs cœurs de traitement


dans le cloud et ainsi augmenter notre puissance de calcul. L’utilisation de ces
noyaux supplémentaires est très abordable. Avec quelques dollars, nous
pouvons faire des centaines de milliers d’optimisations.

Après avoir défini correctement les paramètres pour le backtest, il suffit de


revenir à l’onglet Paramètres et appuyez sur le bouton Démarrer.

7.2. Analyse du backtest

Dès que vous appuyez sur le bouton Démarrer, la fenêtre suivante s’affiche :
Nous avons donc un écran pour visualiser ce qui se passe avec le backtest.
Nous pouvons contrôler la vitesse à laquelle de nouvelles bougies (bougies)
apparaissent, à partir des boutons surligné (rouge) de la figure ci-dessus.
Vous pouvez également avoir les prix de chaque bougie et indicateur (zone
verte surlignée), il suffit de placer la souris sur l’élément désiré sur l’écran.
Dans la boîte à outils, nous avons quatre onglets (Trading, History, Operations
et Journal) où nous pouvons suivre les dossiers concernant nos opérations de
métiers de notre EA.
Dans la boîte à outils de l’onglet Opérations, nous pouvons suivre les
enregistrements avec chacune des opérations de vente et d’achat. Quelque
chose de très utile est que nous pouvons donner deux clics sur une partie de
cette opération et le graphique affichera automatiquement l’opération en
question.
L’onglet Historique de la boîte à outils montre un peu plus de détails. Nous
pouvons rapidement voir rentable (vert) et lossy (rouge) opérations à partir
de faits saillants colorés.

Enfin, l’onglet Opération montre l’état d’avancement de chaque négociation


particulière. Nous avons l’information concernant le prix d’entrée, notre
marge financière disponible et la façon dont le commerce progresse, que ce
soit avec gain ou perte.

7.3. Graphiques de performance

Pendant le backtest ou après la fin, nous pouvons suivre l’évolution de notre


capital dans l’onglet Graphique qui apparaît dans le Testeur stratégie.
Toutefois, après la fin du backtest, un nouvel onglet appelé Backtest
apparaît. Cet onglet fournit un résumé des statistiques opérationnelles de
notre stratégie. On y voit le facteur de profit de l’opération (ratio entre le
bénéfice brut et la perte brute), le facteur de récupération, le retrait ou la
rétractation, le total des transactions, le nombre de positions courtes et
achetés avec des gains et des pertes, indice pointu entre autres.

Nous pouvons visualiser les graphiques à barres informant sur les horaires, les
jours de la semaine et le mois où nous avons plus d’entrées dans les
commerçants.
Vous pouvez suivre la fréquence des bénéfices et des pertes : par les heures
d’exploitation d’EA, les jours de la semaine et les mois de l’année. Nous avons
également des informations concernant le temps maximum fixé et la durée
minimale d’un poste.
Cependant, comme nous pouvons le voir, MetaTrader 5 nous donne un
examen très approfondi de notre backtest.

--==*__*==--
Félicitations pour être arrivé ici! Merci de votre confiance dans la lecture de
cet e-book. Désolé pour les problèmes avec la traduction. N’hésitez pas à
soumettre des suggestions, des critiques et des erreurs dans les textes et les
sujets abordés dans l’ebook.
Maintenant que vous avez été en mesure de créer votre première EA et de
faire les backtests, cela signifie que vous avez un nouveau voyage d’étude vers
des stratégies plus sophistiquées. Il convient de rappeler que l’EE enseignée
dans ce livre est purement démonstrative et n’offre aucun moyen d’utiliser
comme une suggestion d’investissements réels.
Si vous voulez connaître d’autres livres, avec des didactiques similaires, il vaut
la peine de vérifier ce qui suit:
Comment créer des indicateurs et des scripts dans MQL5 (étape par étape).
Comment optimiser correctement les robots d’investissement dans
MetaTrader 5
Si vous êtes intéressé par l’un de ces livres s’il vous plaît contactez-moi pare-
mail: rafaelfvcs@gmail.com

Ce matériel a été écrit en pensant à vous cher lecteur. Il est bon de se rappeler
que nous sommes tous motivés par la critique ou la louange. Si ce livre vous
a été utile en aucune façon, si oui ou non vous avez aimé les didactiques, s’il
vous plaît laisser un commentaire sur le magasin Amazon. Ce genre
d’attitude est d’une extrême importance pour que les prochaines éditions
soient encore meilleures.

Merci beaucoup!

[1] Obs: Les informations contenues dans ce livre électronique ne représentent ni

n’offrent aucune suggestion et/ou attente d’investissement.


[2] https://en.wikipedia.org/wiki/Bill_Williams_ (trader)

[3] Plus d’informations envoient un e-mail à: rafaelfvcs@gmail.com .

[4] Par le même auteur (rafaelfvcs@gmail.com)