OnInit

La fonction est appelée dans les indicateurs et les EA lorsque l'évènement Init se produit. Il est utilisé pour initialiser un programme MQL5 en cours d'exécution. Il y a 2 types de fonctions.

La version qui retourne le résultat

int  OnInit(void);

Valeur de Retour

Une valeur de type int, zéro signifie une initialisation réussie.

Lors du retour de INIT_FAILED, l'EA est supprimé de force du graphique.

Au retour de INIT_FAILED, l'indicateur n'est pas supprimé du graphique. L'indicateur restant sur le graphique n'est pas opérationnel – les gestionnaires d'événements ne sont pas appelés dans l'indicateur.

L'appel OnInit() qui retourne le résultat de l'exécution est recommandé puisqu'il permet non seulement l'initialisation du programme, mais retourne également un code d'erreur dans le cas d'une fin prématurée du programme.

La version sans retour de résultat n'est utilisé que pour la compatibilité avec les anciens codes. Il n'est pas recommandé de l'utiliser

void  OnInit(void);

Note

L'évèenement Init est généré immédiatement après le chargement d'un EA ou d'un indicateur. L'évènement n'est pas généré pour les scripts. La fonction OnInit() est utilisée pour initialiser un programme MQL5. Si OnInit() a une valeur de retour de type int, un code de retour différent de zéro signifie un échec de l'initialisation et génère l'évènement Deinit avec le code de raison de désinitialisation REASON_INITFAILED.

La fonction OnInit() de type void signifie toujours une initialisation réussie et il n'est pas recommandé de l'utiliser.

Pour optimiser les entrées d'un EA, il est recommandé d'utiliser les valeurs de l'énumération ENUM_INIT_RETCODE comme code de retour. Ces variables sont prévues pour gérer le procédé d'optimisation, incluant la sélection des agents de test les plus pertinents. Il est possible de demander les données de la configuration d'un agent et des ressources (nombre de coeurs, quantité de mémoire libre, etc.) en utilisant la fonction TerminalInfoInteger() pendant l'initialisation de l'EA avant le lancement du test. Sur la base des données obtenues, vous pouvez soit permettre d'utiliser l'agent de test ou le bannir de l'optimisation de l'EA.

ID

Description

INIT_SUCCEEDED

Initialisation réussie, le test de l'EA peut continuer.

Ce code signifie la même chose que la valeur zéro — l'initialisation de l'EA dans le testeur est réussie.

INIT_FAILED

Initialisation échouée. Il n'y a pas de raison de continuer le test en raison d'erreurs inévitables. Par exemple, il est impossible de créer un indicateur nécessaire pour l'opération de l'EA.

Le retour de cette valeur signifie la même chose que le retour d'une valeur différente de zéro — l'initialisation de l'EA dans le testeur a échouée.

INIT_PARAMETERS_INCORRECT

Conçu pour dénoter un ensemble incorrect des paramètres d'entrée par un développeur. Dans le tableau d'optimisation générale, la chaîne de caractères résultat avec ce code de retour est mise en surbrillance en rouge.

Un test pour un tel ensemble d'entrées de l'EA n'est pas effectué. L'agent est prêt à recevoir une nouvelle tâche.

Lorsque cette valeur est reçue, le testeur de stratégie ne passe pas cette tâche aux autres agents pour une exécution répétée.

INIT_AGENT_NOT_SUITABLE

Aucune erreur d'exécution du programme pendant l'initialisation. Cependant, pour certaines raisons, l'agent ne convient pas pour effectuer un test. Par exemple, il n'y a pas assez de RAM, pas de support d'OpenCL, etc.

Après avoir retourné ce code, l'agent ne reçoit plus de tâches jusqu'à la fin de cette optimisation.

Utiliser OnInit() retournant INIT_FAILED/INIT_PARAMETERS_INCORRECT dans le tester a certaines spécificités qu'il faut prendre en compte lors de l'optimisation des EA :

  • l'ensemble de paramètres pour lequel OnInit() a retourné INIT_PARAMETERS_INCORRECT est considéré invalide pour le test et n'est pas utilisé pour obtenir la population suivante pendant une optimisation génétique. De trop nombreux ensembles de paramètres "écartés" conduisent à des résultats incorrects lors de la recherche des paramètres optimaux de l'EA. L'algorithme de recherche assume que la fonction du critère d'optimisation est lissée et n'a pas de trou sur l'intervalle entier des paramètres d'entrée.
  • si OnInit() retourne INIT_FAILED, cela signifie qu'un test ne peut pas être lancé, et l'EA est enlevé de la mémoire de l'agent. L'EA est rechargé à nouveau pour effectuer la prochaine passe avec un nouvel ensemble de paramètres. Le lancement de la passe d'optimisation suivante prend plus de temps comparé à appeler TesterStop().

Exemple de fonction OnInit() pour un EA

//--- input parameters
input int      ma_period=20; // période de la moyenne mobile
 
//--- handle de l'indicateur utilisé dans l'EA
int indicator_handle;   
//+------------------------------------------------------------------+
//| Fonction d'initialisation de l'expert                            |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- vérifie la validité de ma_period
   if(ma_period<=0)
     {
      PrintFormat("Valeur d'entrée ma_period invalide : %d",ma_period);
      return (INIT_PARAMETERS_INCORRECT);
     }
//--- pendant l'optimisation
   if(MQLInfoInteger(MQL_OPTIMIZATION))
     {
      //--- vérifie la RAM disponible pour l'agent
      int available_memory_mb=TerminalInfoInteger(TERMINAL_MEMORY_TOTAL);
      if(available_memory_mb<2000)
        {
         PrintFormat("Mémoire insuffisante pour l'agent de test : %d MB",
                     available_memory_mb);
         return (INIT_AGENT_NOT_SUITABLE);
        }
     }
//--- vérifie l'indicateur
   indicator_handle=iCustom(_Symbol,_Period,"My_Indicator",ma_period);
   if(indicator_handle==INVALID_HANDLE)
     {
      PrintFormat("Echec de la génération du handle sur My_Indicator. Code d'erreur %d",
                  GetLastError());
      return (INIT_FAILED);
     }
//--- Initialisation de l'EA réussie
   return(INIT_SUCCEEDED);
  }

Voir également

OnDeinit, Fonctions de gestion des évènements, Exécution du programme, Evènements du terminal client, Initialisation des variables, Créer et supprimer des objets