Fonctions spéciales MQL4

Fonctions spéciales

La particularité des programmes destinés à fonctionner dans le Terminal Client MT4 est leur interaction avec des informations constamment mises à jour en mode temps réel.

Dans le langage MQL4, cette particularité se reflète sous la forme de trois fonctions spéciales: init (), start () et deinit ().

Les fonctions spéciales sont des fonctions avec des noms prédéfinis init(), start() et deinit() possédant des propriétés particulières spécifiques.

Propriétés des fonctions spéciales

 

Propriété commune des fonctions spéciales

La principale propriété de l’ensemble des fonctions spéciales est leur exécution dans un programme sous certaines conditions, sans l’aide d’appel de fonction spéciale du programme. Les fonctions spéciales sont appelées à être exécutées par le Terminal Client. Si un programme contient la description d’une fonction spéciale, il sera appelé (et exécuté), conformément aux conditions d’appel (propriétés spécifiques).

Les fonctions spéciales sont appelées à être exécutées  par le Terminal Client.

Propriétés spécifiques des fonctions spéciales

 

Fonction spéciale init().

La propriété spécifique de la fonction spéciale init() est son exécution à l’initialisation du programme.  Si un programme contient la description de la fonction spéciale init(), elle sera appelée (et exécutée) au lancement du programme. S’il n’ya pas de fonction spéciale init() dans un programme, aucune action ne sera effectuée au lancement du programme.

Dans les Expert Advisors (EA), la fonction spéciale init() est appelée (et exécutée) après le démarrage du Terminal Client et le téléchargement des données historiques, après avoir changé de titre et/ou la période du graphique, après la recompilation du programme dans MetaEditor, après avoir changé les paramètres d’entrée dans la fenêtre de configuration des EA et après changement du compte.

Dans les scripts, la fonction spéciale init() est aussi appelée (et exécutée) immédiatement après qu’ il soit appliqué à un graphique.

Dans les indicateurs personnalisés, la fonction spéciale init() est appelée (et exécutée) immédiatement après le démarrage du Terminal Client, après avoir changé de titre et/ou la période du graphique, après la recompilation du programme dans MetaEditor et après avoir changé les paramètres d’entrée dans la fenêtre de configuration de l’indicateur personnalisé.

Fonction spéciale start().

Les propriétés spécifiques de la fonction spéciale start() diffèrent selon le type de programme exécutable. Dans les EA, la fonction spéciale start() est appelée (et exécutée) immédiatement après l’arrivée d’une nouvelle cotation.

Si une nouvelle cotation arrive durant l’exécution de la fonction spéciale start(), cette cotation sera ignorée, càd que la fonction spéciale start() ne sera pas appelée pour exécution lorsqu’une telle cotation survient.

Toutes les cotations reçues au cours de l’exécution de la fonction spéciale start() seront ignorées.

Le démarrage de la fonction spéciale start() pour exécution n’est assurée par le Terminal Client qu’à la condition que la session de la précédente opération ait été effectuée, le contrôle étant retourné au Terminal Client et la fonction spéciale start() est en attente d’une nouvelle cotation.

La possibilité d’appeler et d’exécuter la fonction spéciale start() est influencée par l’état du bouton “Activer / désactiver les EA”. Si ce bouton est dans l’état de désactivation des EA, le Terminal Client n’appellera pas pour exécution la fonction spéciale start() indépendamment du fait que de nouvelles cotations arrivent ou non. Toutefois, le changement de l’état -activé à désactivé- du bouton ne met pas fin à la session de fonctionnement courante de la fonction spéciale start().

La fonction spéciale start() n’est pas appelée par le Terminal Client si la  fenêtre  des propriétés des EA est ouverte. La fenêtre des propriétés des EA ne peut être ouverte que lorsque la fonction spéciale start() est en attente d’une nouvelle cotation. Cette fenêtre ne peut pas être ouverte durant l’exécution d’une session de la fonction spéciale start() des EA.

Dans les scripts, la fonction spéciale start() est appelée (et exécutée)  immédiatement après l’initialisation du programme dans la fonction spéciale init ().

Dans les indicateurs personnalisés la fonction spéciale start() est appelée (et exécutée) immédiatement après qu’une nouvelle cotation survienne, immédiatement après avoir été attachée à un graphique, lors du changement de taille de la fenêtre du titre, lors du passage d’un titre à l’autre, lors du démarrage du Terminal Client (si au cours de la session précédente un indicateur a été fixé à un graphique), après avoir changé un symbole et la période d’un graphique en cours, indépendamment du fait de savoir si de nouvelles cotations surviennent ou non.

La fin d’une session courante d’exécution de start() pour tous les types de programmes peut être réalisée quand un programme est retiré d’un graphique, où le titre et/ou la période de graphique sont modifiés, quand un compte est modifié / un graphique est fermé et à la suite de fin d’opération du terminal client.

Si la fonction spéciale start() a été exécutée au cours de la commande de fermeture, le temps disponible pour le terminal pour achever l’exécution de la fonction est de 2,5 secondes.

Si après la commande de fermeture, la fonction spéciale start() poursuit son opération plus longtemps que le délai indiqué, elle sera forcée à l’arrêt par le Terminal Client.

Fonctions spéciale deinit().

La fonction spécifique de la  fonction spéciale deinit() est son exécution à la fin du programme (terminaison).

Si un programme contient la description de la fonction spéciale deinit(), elle sera appelée (et exécutée) à la fermeture du programme.

Si un programme ne contient pas cette fonction spéciale deinit(), aucune action ne sera réalisée lors de l’arrêt du programme.

La fonction spéciale deinit() est également appelée pour exécution par le Terminal Client à la fermeture du terminal, quand une fenêtre de titre est fermée, juste avant de changer de titre et/ou la période du graphique, à une recompilation réussie du programme dans MetaEditor, lors de la modification des paramètres d’entrée , ainsi que quand le compte est modifié.

Dans les EA et les scripts, l’arrêt du programme avec l’appel nécessaire de la fonction spéciale deinit() peut se produire lors de l’attachement d’un graphique à un nouveau programme du même type qui remplace le précédent. Dans les indicateurs personnalisés la fonction spéciale deinit() n’est pas exécutée quand un nouvel indicateur est joint à un graphique.

Plusieurs indicateurs peuvent fonctionner sur chaque fenêtre spécifique à un sous-jaccent particulier, c’est pourquoi la fixation d’un nouvel indicateur à un graphique n’entraîne pas la fermeture d’autres indicateurs avec l’appel à  deinit().

Le temps d’exécution de deinit() est limité à 2,5 secondes.

Si le code de la fonction spéciale deinit() est exécuté plus longtemps, le Terminal Client forcera la  fin de l’exécution de la fonction spéciale deinit() et le fonctionnement du programme.

Exigences pour les fonctions spéciales

Les fonctions spéciales init() et deinit() peuvent être absentent dans un programme. L’ordonnancement des descriptions des fonctions spéciales dans un programme n’a pas d’importance. Les fonctions spéciales peuvent être appelées depuis n’importe quelle partie du programme, conformément à l’ordonnancement général des appels de fonction.

Les fonctions spéciales peuvent intégrer des paramètres. Cependant, lorsque ces fonctions sont appelées par le Terminal Client, aucun paramètre ne sera envoyé de l’extérieur, les valeurs par défaut étant seulement utilisées.

Les fonctions spéciales init() et deinit() doivent terminer leur fonctionnement le plus rapidement possible et en aucun cas fonctionner dans une voie essayant de démarrer l’opération complète  avant d’appeler la fonction spéciale start().

 

Ordre d’utilisation des fonctions spéciales

Les développeurs ont présenté aux programmeurs un outil très pratique : lors du démarrage d’un programme, tout d’abord init() est exécuté, après cela la principale tâche est effectuée avec l’aide de la fonction start(), et quand un utilisateur termine son travail, le fonction deinit() sera lancée avant l’arrêt du programme.

Le code principal d’un programme doit être contenu dans la fonction start().

Tous les opérateurs, et les appels des fonctions intégrées et personnalisées et tous les calculs nécessaires devront être effectuées à l’intérieur de cette fonction.

Dans le même temps, il faut bien comprendre le rôle des fonctions personnalisées.

La description des fonctions personnalisées est située dans un code de programme en dehors de la description des fonctions spéciales, mais si une fonction personnalisée est appelée pour exécution, une fonction spéciale ne termine pas son opération. Cela signifie que le contrôle est passé de temps en temps à la fonction personnalisée, mais la fonction personnalisée opère elle-même au sein d’une fonction spéciale qui l’a appelée.

Ainsi, dans le processus de l’exécution du programme la fonction spéciale fonctionne toujours (conformément à leurs propriétés spécifiques) et la fonction personnalisée, sont exécutées lorsqu’elles sont appelées par des fonctions spéciales.

Si un programmeur n’ pas l’intention d’utiliser les fonctions spéciales, il peut refuser de les utiliser dans un programme. Dans un tel cas, le terminal client ne l’appellera pas. Dans l’absolu, un programme normal contient l’ensemble des trois fonctions spéciales. Un programme qui n’a pas init() ou deinit() ou ces deux fonctions est également considéré comme normal. Si aucune des fonctions spéciales n’est utilisée dans un programme, ce programme ne sera pas exécuté.

Le Terminal Client n’appelle pour exécution, que les fonctions spéciales en fonction de leurs propriétés.

Les fonctions personnalisées ne sont pas appelées par le terminal client. C’est pourquoi si un programme ne contient pas de fonctions spéciales (et ne contient que des fonctions personnalisées), il ne sera jamais appelé pour exécution.

Il n’est pas recommandé d’appeler la fonction start() à partir de la fonction spéciale init() ou effectuer des opérations de trading à partir de la fonction init(), car au cours de l’initialisation des valeurs d’information de l’environnement, les paramètres peuvent ne pas être prêts (information sur les graphiques, les prix du marché, etc.)

Les articles Exécution de programme et les Exemples de mise en œuvre, contiennent plusieurs exemples pratiques qui permettront de voir les propriétés des fonctions spéciales.

Retour sommaire cours MQL4

Traduction: Jean Marc Venet
Source: http://book.mql4.com/programm/special
“MQL4 is a trade mark of MetaQuotes Software Corp. and all related materials are reserved for MetaQuotes”

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>