Développer un robot de trading en MQL

Apprendre à développer un robot de trading en MQL

 

« Un langage de programmation est censé être une façon conventionnelle de donner des ordres à un ordinateur.  »

Je vous propose d’apprendre à développer un robot de trading en MQL, il s’agit du langage de programmation de la plateforme Russe Metatrader 4:  le MQL4 (Meta Quote Language).

Le MQL actuellement dans sa version 5 est un langage dérivé du langage informatique C (développé en même temps que UNIX par Dennis Ritchie et Ken Thompson dans les années 1970) et C++(Créé initialement par Bjarne Stroustrup dans les années 1980).

Les plateformes Metatarder 4 (Langage MQL4) et Metatrader 5 (Langage MQL5) sont deux plateforme de trading radicalement différentes, Metatrader 4 a été conçue pour trader uniquement le Forex.

 

développer un robot de trading en MQL

Ken Thompson (à gauche) et Dennis Ritchie (à droite).

 

développer un robot de trading en MQL

Bjarne Stroustrup

Le MQL4 vous permet de créer les 3 types de programmes suivants :

  • Experts Consultants ou EA (Expert Advisors en anglais)
    L’EA est un programme permettant d’automatiser vos stratégies de trading en
    passant automatiquement les ordres basés sur votre stratégie, en gérant vos
    trades existants ou encore en générant des signaux de trading.
  • Indicateur
    MetaTrader dispose déjà d’une bibliothèque très complète d’indicateurs techniques
    mais vous laisse également la possibilité de modifier des indicateurs existants ou
    encore d’en créer de nouveau. Un indicateur sert à analyser et interpréter les
    données du marché pour vous aider à prendre vos décisions d’entrées ou sorties.
  • Script
    Un script est un programme destiné à exécuter un nombre d’action précis de
    façon ponctuelle. En effet, contrairement à un EA qui analyse le marché à chaque
    tick (= changement de cotation), le script n’est actif que lorsque l’utilisateur en
    fait la demande et ne fonctionnera qu’une fois. Un script peut donc être utilisé
    pour effectuer une opération que l’on ne désire pas voir se répéter à moins d’en
    faire la demande comme par exemple la clôture de toutes les positions ouvertes.

Initiation à la programmation MQL4

Définition d’une variable

Une variable est utilisée pour stocker une donnée, elle peut être appelé et manipulé tout au long du programme (le code). La variable est aussi le moyen de donner un nom, un label à une donnée ainsi les programmes sont plus compréhensibles.

Les variables sont typées en MQL

Une variable est un contenant de donnée. Le MQL est un langage typé; les variables MQL ont un type définis spécifique au moment de leur déclaration, la plupart des instructions (opérations) seront effectuées sur des variables de même type. Le type détermine la taille mémoire en bit (0 ou 1 : le courant passe ou pas) utilisée pour stocker la donnée. Déclarer une variable c’est lui attribuer un nom et un type de donnée à laquelle le nom fait référence. La valeur référencé par le nom de la variable peut évoluer au cours de l’exécution du programme tout en restant dans le même type.

Le 4 juin 1996 la fusée ARIANE 5 à explosée peu de temps (36,7 secondes) après son décollage pour dépassement de capacité d’une variable typée integer dans le programme de contrôle de la trajectoire; les ingénieurs n’avaient pas jugés bon de faire évoluer le programme depuis ARIANE 4. ARIANE 5 accélérait beaucoup plus vite que ARIANE 4 !

Il y a 6 types de données avec MQL :

  • Int pour Integer c’est un nombre entier

L’intervalle de définition est -2147483648 à +2147483647

Ce type de donnée est utilisé pour les quantités ou actions qui ne peuvent être fractionnées.

 

  • Double c’est un nombre réel

Un nombre réel est composé d’un nombre entier suivi d’un point et de chiffres. Un Int peut être stocké dans un Double.

L’intervalle de définition est -1.7 * e-308 à 1.7 * e+308

Ce type est utile pour travailler avec le cours d’une devise ou désigner un volume en lots fractionnés.

  • Bool il s’agit d’un booléen (vrai ou faux)

Une variable booléenne peut prendre les valeurs : TRUE,True,true,1,FALSE,False,false,0

Ce type est utilisé lors du cheminement logique d’un programme afin de définir quelle action entreprendre lorsqu’une condition est vérifiée ou non

 

  • String pour une chaîne de caractères

Metatrader interprete les chaînes de caractères encadrées par des guillemets « 

 

Cas particulier sur MQL :

\\  pour écrire \

\n Retour à la ligne

\t tabulation

\ » pour écrire le caractère « 

\’ pour écrire le caractère ‘

\r saut à la ligne

 

La taille en caractères des variables de type string ne peut pas dépasser 255 caractères

  • Color c’est couleur

Vous utilisez un nom de couleur prédéfinie (blue,red,green,…)

Vous utilisez l’intensité des 3 couleurs RGB de Red Green Blue

Vous utilisez la valeur entière (décimale ou héxadécimale)

  • DateTime date et heure

La valeur est calculée en secondes écoulées depuis le 1er janvier 1970 à minuit et ne peut aller plus loin que le 31 décembre 2037

 

Exemples de déclarations de variables :

bool bIsTradingIsAllowed = False
int iMaxLossInPips = 50
double price = 1,2345
string phrase = « Hello World ! »

Alert (bIsTradingIsAllowed)
Alert (iMaxLossInPips)
Alert (price)
Alert (phrase)

La commande Alert affiche le paramètre entre parenthèses dans la fenêtre d’alerte de MT4

 

 

Variables prédéfinies

 

Certaines variables sont déjà prédéfinies dans Metatrader 4, il n’est pas possible de les redéfinir. Ces variables sont créés pour la graphique ouvert.

La liste de ces variables est disponible ICI

 

Exemples de variables prédéfinies :

Alert (Ask)   // le prix de vente actuel sur le graphique en cours

Alert(Bid)    // le prix d’achat actuel sur le graphique en cours

Alert(Digits) // le nombre de décimale sur la cotation du graphique

 

 

développer un robot de trading en MQL

Liste des variables prédéfinies

Instructions de contrôle

 

If Else Contrôle

If Else permet d’exécuter un bloc d’instructions en fonction de la véracité d’une condition. Un bloc d’instructions est délimité par des accolades {}.

If (Condition)

{

Suite d’opérations si Condition est Vrai

}

Else

{

Suite d’opération si Condition est Fausse

}

 

Exemple : calcul du stop loss price

Double entryPrice = 1,13456;

Int maxLossInPips = 50;

Double stopLossPrice;

Bool isLongPosition = false   // false si on est en position de vente, true si on est en position d’achat

If (isLongPosition)

{

stopLossPrice = entryPrice – maxLossInPips x 0,0001;

}

Else

{

stopLossPrice = entryPrice + maxLossInPipis x 0,0001;

}

Alert (stopLossPrice);

Instruction conditionnelle switch :

L’instruction switch équivaut à une suite de if mais permet de simplifier grandement la
syntaxe. Cette instruction s’applique lorsque vous devez comparer la valeur d’une
variable et appliquer une action différente selon la valeur.

La syntaxe de cette instruction est la suivante :

switch(x)
{
case 1 : action à exécuter ;
action à exécuter ;
break ;
case 2 : action à exécuter ;
action à exécuter ;
break ;
default : action à exécuter ;
}

Voilà comment la programme va interpréter ces lignes de codes : Arrivé à cette portion
du code, le programme va regarder quelle valeur est assignée à l’expression x. Si la
valeur est 1, le programme exécutera les actions figurant après les : de case 1. Même
chose dans le cas de 2. Si x ne vaut ni 1 ni 2, alors le programme exécuter la portion de
code figurant à droite de default. Vous pouvez également utiliser des caractères auquel
cas, il faudra que l’expression x soit compatible avec le type caractères et la syntaxe est
la suivante : case ‘A’. Si vous n’entourez pas le caractère de ‘, le programme vous
retournera une erreur.

Break : l’instruction break sert à mettre fin au switch. En effet, cette instruction
conditionnelle est ainsi faite qu’elle va exécuter tous les cas les uns à la suite de l’autre.

Les boucles

Les boucles permettent d’exécuter des actions en boucles jusqu’à ce qu’une condition de
sortie soit validée. En MQL4, on compte deux types de boucles : les boucles for… et les
boucles while….

Boucle for… :

La syntaxe d’une boucle for est la suivante :

for(expr1;expr2;expr3)
Action à exécuter ;

Expr1 correspond à la variable clé de la boucle. C’est cette variable que l’on va utiliser
pour déterminer quand il faudra sortir de la boucle. Expr1 correspond donc à
l’initialisation de cette variable. L’initialisation ne se produira qu’une seule fois au
démarrage de la boucle for.

Expr2 correspond à la condition à tester avant chaque nouvelle boucle.

Expr3 correspond à l’action à exécuter à la fin de chaque boucle.

Plus concrètement, une boucle for ressemblera à ceci :

for(int i = 0 ; i <= 10 ; i++)
Action à exécuter;

 

Boucle while… :

La différence majeure entre les deux boucles est que pour une boucle for, vous savez
combien d’itérations vont être exécuté tandis que pour une boucle while, vous ne
possédez pas ce genre d’information. Ceci est possible par le fait qu’une boucle while ne
possède pas d’informations du type Expr1 et Expr3.
En effet, on n’aura juste la condition. La syntaxe de ce type de boucle est la suivante :

while (Condition)
{
Action à exécuter #1;
Action à exécuter #2;
}

Remarque : Condition ne peut être comme son nom l’indique qu’une condition, il n’est
pas possible de déclarer ou d’initialiser quoique ce soit.

Un exemple plus concret :

int i = 0 ;
while (i <= 10)
{
i++
}

Découvrez sur ce site :