Variables d'Entrées

La classe de stockage input définit une variable externe (variable d'entrée). Le modificateur input est indiqué avant le type de données. Une variable avec le modificateur input ne peut pas être changée dans les programmes mql5, ce type de variables n'est accessible qu'en lecture seule. Les valeurs des variables d'entrée ne peut être changée que par l'utilisateur et depuis la fenêtre des propriétés du programme. Les variables externes sont toujours réinitialisées immédiatement avant l'appel à OnInit().

La longueur maximale des noms de variables d'entrée est de 63 caractères. Pour le paramètre d'entrée de type chaîne, la longueur de valeur maximum (longueur de chaîne) peut être de 191 à 253 caractères (voir la Note). La longueur minimale est de 0 caractère (la valeur n'est pas définie).

Exemple :

//--- input parameters
input int            MA_Period=13;
input int            MA_Shift=0;
input ENUM_MA_METHOD MA_Method=MODE_SMMA;

Les variables d'entrée déterminent les paramètres d'entrée d'un programme. Elles sont disponibles dans la fenêtre Propriétés d'un programme.

Définir une valeur pour un paramètre d'entrée

Il existe une autre façon de définir à quoi ressembleront les paramètres d'entrée dans l'onglet Inputs. Pour cela, placez un commentaire après la description d'un paramètre d'entrée sur la même ligne. De cette façon, vous pouvez donner des noms plus compréhensibles pour les utilisateurs aux variables d'entrée.

Exemple :

//--- input parameters
input int            InpMAPeriod=13;         // Période de lissage
input int            InpMAShift=0;           // Décalage de la ligne horizontale
input ENUM_MA_METHOD InpMAMethod=MODE_SMMA;  // Méthode de lissage

Méthode d'affichage des paramètres d'entrée

Note : Les tableaux et variables de types complexes ne peut pas servir de variables d'entrée.

Note : La longueur de la chaîne du commentaire des variables d'entrée ne peut pas être supérieure à 63 caractères.

Note : Pour les variables d'entrée de type chaîne, la limitation de la longueur de la valeur (longueur de la chaîne) est fixée par les conditions suivantes :

  • la valeur du paramètre est représentée par la chaîne "nom_paramètre = valeur_paramètre" ('=' est pris en compte),
  • longueur de représentation maximale de 255 caractères (total_length_max= 255 ou 254 caractères hors '='),
  • longueur maximale du paramètre de chaîne parameter_name_length = 63 caractères.

Ainsi, la taille de chaîne maximale pour un paramètre de chaîne est calculée à l'aide de l'équation :

parameter_value_length=total_length_max-parameter_name_length = 254 - parameter_name_length

Cela fournit la taille de chaîne maximale de 191 (paramètre_nom_longueur = 63) à 253 caractères (paramètre_nom_longueur = 1).

 

Passage des Paramètres Lors de l'Appel à des Indicateurs depuis les Programmes MQL5 #

Les Indicateurs Personnalisés sont appelés avec la fonction iCustom(). Après le nom de l'indicateur, les paramètres doivent être en accord strict avec la déclaration des variables d'entrée de cet indicateur. Si le nombre de paramètres indiqués est inférieur au nombre de variables déclarées dans l'indicateur appelé, les paramètres manquants sont remplis avec les valeurs spécifiées pendant la déclaration des variables.

Si l'indicateur utilise la fonction OnCalculate du premier type (c'est à dire que l'indicateur est calculé en utilisant le même tableau de données), alors l'une des valeurs de ENUM_APPLIED_PRICE ou le handle d'un autre indicateur doit être utilisé comme dernier paramètre lors de l'appel à cet indicateur. Tous les paramètres correspondants aux variables d'entrée doivent être indiqués clairement.

Enumérations comme Paramètres d'Entrée

Les variables définies par l'utilisateur ainsi que les énumérations intégrées en MQL5 peuvent être utilisées comme variables d'entrée (paramètres d'entrée pour les programmes mql5). Par exemple, nous pouvons créer l'énumération dayOfWeek, décrivant les jours de la semaine et utiliser la variable d'entrée pour spécifier un jour particulier de la semaine, non pas comme un chiffre, mais d'une façon plus courante.

Exemple :

#property script_show_inputs
//--- jour de la semaine
enum dayOfWeek 
  {
   S=0,     // Dimanche
   M=1,     // Lundi
   T=2,     // Mardi
   W=3,     // Mercredi
   Th=4,    // Jeudi
   Fr=5,    // Vendredi,
   St=6,    // Samedi
  };
//--- input parameters
input dayOfWeek swapday=W;

Pour permettre à un utilisateur de sélectionner la valeur désirée dans la fenêtre des propriétés pendant le démarrage du script, nous utilisons la commande du préprocesseur #property script_show_inputs. Nous lançons le script et pouvons choisir l'une des valeurs de l'énumération dayOfWeek dans la liste. Nous lançons le script EnumInInput et allons dans l'onglet Inputs. Par défaut, la valeur de swapday (jour de facturation triple du swap) est mercredi (W = 3), mais il est possible de spécifier n'importe quelle valeur pour changer le fonctionnement du programme.

Exemple d'utilisation d'une énumération personnalisée comme paramètre d'entrée

Le nombre de valeurs possibles d'une énumération est limité. Pour sélectionner une valeur d'entrée, une liste déroulante est utilisée. Les noms mnémoniques pour les membres de l'énumération sont utilisés pour les valeurs affichées dans la liste. Si un commentaire est associé avec un nom mnémonique, comme affiché dans l'exemple, le contenu du commentaire est utilisé au lieu du nom mnémonique.

Chaque valeur de l'énumération dayOfWeek a une valeur de 0 à 6, mais dans la liste des paramètres, les commentaires spécifiés pour chaque valeur seront affichés. Ceci fournit une flexibilité supplémentaire pour écrire des programmes avec des descriptions claires des paramètres d'entrée.

 

Variables avec le Modificateur Input #

Les variables avec le modificateur input permettent non seulement de définir des paramètres externes lors du lancement des programmes, mais sont également nécessaires pour optimiser les stratégies de trading dans le Strategy Tester. Chaque variable d'entrée peut être utilisée dans l'optimisation, sauf celles de type chaîne de caractères.

Il est parfois nécessaire d'exclure certains paramètres externes du programme de la zone de toutes les passes du tester. Le modificateur de mémoire sinput a été introduit pour ce type de cas. sinput signifie déclaration de variable externe statique (sinput = static input). Cela signifie que la déclaration suivant dans le code d'un Expert Advisor

sinput       int layers=6;   // Nombre de couches

sera équivalent à la déclaration complète

static input int layers=6;   // Nombre de couches

La variable déclarée avec le modificateur sinput est un paramètre d'entrée du programme MQL5. La valeur de ce paramètre peut être changée au lancement du programme. Cependant, cette variable n'est pas utilisée dans l'optimisation des paramètres d'entrée. En d'autres termes, ses valeurs ne sont pas énumérées lors de la recherche du meilleur ensemble de paramètres remplissant une condition spécifiée.

Paramètre sinput dans le Strategy Tester

L'Expert Advisor montré ci-dessus a 5 paramètres externes. "Nombre de couches" est déclaré comme étant sinput et est égal à 6. Ce paramètre ne peut pas être changé pendant une optimisation de la stratégie de trading. Nous pouvons spécifier une valeur désirée à utiliser par la suite. Les champs Démarrer, Pas et Stop ne sont pas disponible pour ce type de variable.

Les utilisateurs ne seront donc pas capables d'optimiser ce paramètre une fois que nous aurons spécifié le modificateur sinput pour la variable. En d'autres termes, les utilisateurs du terminal ne pourront pas lui définir des valeurs de départ et de fin dans le Strategy Tester pour une énumération automatique dans l'intervalle spécifié pendant l'optimisation.

Cependant, il existe une exception à cette règle : les variables sinput peuvent varier dans les tâches d'optimisation en utilisant la fonction ParameterSetRange(). Cette fonction a été introduite spécifiquement pour le contrôle par le programme des valeurs disponibles pour n'importe quelle variable input incluant celles déclarées comme static input (sinput). La fonction ParameterGetRange() permet de recevoir les valeurs des variables d'entrée lorsque l'optimisation est lancée (dans le gestionnaire OnTesterInit()) et de réinitialiser une valeur de changement de pas et un intervalle dans lequel seront les valeurs du paramètre optimisé.

De cette façon, combiner le modificateur sinput et deux fonctions utilisant les paramètres d'entrée, permet de créer des règles flexibles pour définir les intervalles d'optimisation des paramètres d'entrée qui dépendent des valeurs d'autres paramètres d'entrée.

 

Arranger les paramètres d'entrée #

Pour travailler plus efficacement avec les programmes MQL5, les paramètres d'entrée peuvent être regroupés en blocs grâce au mot-clé group. Celui-ci permet une séparation visuel de certains paramètres suivant leur logique.

input group           "Nom du groupe"
input int             variable1 = ...
input double          variable2 = ...
input double          variable3= ...

Après une déclaration comme celle-ci, tous les paramètres d'entrée sont liés visuellement dans un même groupe, simplifiant la configuration des paramètres pour les utilisateurs MQL5 lorsqu'ils sont lancés sur un graphique ou dans le Strategy Tester. La spécification de chaque groupe est valide jusqu'à la prochaine déclaration de groupe :

input group           "Nom du groupe #1"
input int             group1_var1 = ...
input double          group1_var2 = ...
input double          group1_var3 = ...
 
input group           "Nom du groupe #2
input int             group2_var1 = ...
input double          group2_var2 = ...
input double          group2_var3 = ...

Un exemple d'EA présentant les blocs d'entrées séparés suivant leur objectif :

input group           "Signal"
input int             ExtBBPeriod   = 20;       // Période des Bandes de Bollinger
input double          ExtBBDeviation2.0;      // déviation
input ENUM_TIMEFRAMES ExtSignalTF=PERIOD_M15;   // Période BB
 
input group           "Tendance"
input int             ExtMAPeriod   = 13;       // Période de la Moyenne Mobile
input ENUM_TIMEFRAMES ExtTrendTF=PERIOD_M15;    // Période MM
 
input group           "ReglesDeSortie"
input bool            ExtUseSL      = true;     // utilise le StopLoss
input int             Ext_SL_Points = 50;       // StopLoss en points
input bool            ExtUseTP      = false;    // utilise le TakeProfit
input int             Ext_TP_Points = 100;      // TakeProfit en points
input bool            ExtUseTS      = true;     // utilise le Trailing Stop
input int             Ext_TS_Points = 30;       // Trailing Stop en points
 
input group           "MoneyManagement"
sinput double         ExtInitialLot = 0.1;      // valeur initiale du lot
input bool            ExtUseAutoLot = true;     // calcul automatique du lot
 
input group           "Auxiliaire"
sinput int            ExtMagicNumber = 123456;  // Magic Number de l'EA
sinput bool           ExtDebugMessagetrue;    // affiche les messages de debug

Lors du lancement d'un tel EA dans le Strategy Tester, vous pouvez double-cliquer sur le nom du groupe pour réduire/développer le bloc d'entrées, puis cocher la case du groupe pour sélectionner tous ses paramètres à optimiser.

Organisation des paramètres d'entrée d'un EA dans le testeur de stratégie

Voir aussi

iCustom, Enumérations, Propriétés des Programmes