Comment obtenir la longueur d'un enum et d'un item dans MQL4/MQL5 ? - page 2

 
Alain Verleyen:
La longueur n'est jamais inconnue et ce sujet est juste le résultat d'une mauvaise conception.
Cette exigence provient d'un projet AutoTester.
Dans de nombreux Indicateurs/EAs, les paramètres d' entrée contiennent des enum personnalisés, nous devons déterminer quel élément (et sa valeur relative) de l'enum.
Donc, ne dites pas "mauvaise conception". Bla...bla...
 
Xiangdong Guo:
Cette exigence provient d'un projet AutoTester.
Dans de nombreux Indicateurs/EAs, les paramètres d'entrée contiennent des enum personnalisés, nous devons déterminer quel élément (et sa valeur relative) de l'enum.
Donc, ne dites pas "mauvaise conception". Bla...bla...
Bien sûr, c'est une mauvaise conception. Mais ce n'est pas un problème pour moi.
 
Marco vd Heijden:
Que voulez-vous dire par "longueur de l'enum" ?
enum fruit
  {
   APPLE=0,//APPLE
   BANANA=1,//BANANA
   GRAPE=2,//GRAPE
   ORANGE=3,//ORANGE
   CARROT=4,//CARROT
  };
  
sinput fruit type;//PICK A FRUIT 

Peut-être que la carotte n'est pas un fruit... Je ne comprends toujours pas ce que Xiangdong Guo veut dire par 'longueur de l'enum'.

Le nombre de lettres de chaque nom de chaîne d'options ?

Le nombre d'options possibles ?

La valeur numérique de l'option ?

Non seulement une mauvaise conception, mais aussi pas très clair sur ce qu'il veut dire.

 
Marco vd Heijden:
Le nombre de valeurs, donc 5 dans votre exemple de fruits.
 
Alain Verleyen:
Le nombre de valeurs, donc 5 dans votre exemple de fruits.

Je suis d'accord sur le fait que c'est statique, il ne peut pas être variable et sera toujours une valeur fixe connue pour commencer.

Cependant, si Xiangdong Guo teste des indicateurs qu'il n'a pas conçus ou écrits lui-même, et qu'il veut connaître ou détecter automatiquement les paramètres d'entrée...

Je ne vois pas comment le fait de connaître le nombre d'options disponibles pourrait aider, peut-être veut-il faire des tests croisés de toutes les options disponibles et cherche-t-il simplement le nombre de tests à effectuer ?

Je rechercherais les options supposées pour résoudre ces valeurs une fois que vous essayez de convertir hors des limites des options disponibles, il générera l'erreur cannot convert enum puisqu'elle n'existe pas.

 
Marco vd Heijden:

MT4/MT5 utilisent des fonctions C++/C# pour récupérer les éléments de l'enum. Mais MetaQuotes ne porte pas ces fonctions vers MQL4/MQL5. Hum...hum...

enum DURATION_INTERVALS  // Enumeration of named constants
   {
    month=1,     // Interval of one month
    two_months,  // Two months
    quarter,     // Three months - quarter
    halfyear=6,  // Half a year
    year=12,     // Year - 12 months
   };

input DURATION_INTERVALS HistoryDuration = month;

 
Xiangdong Guo:

MT4/MT5 utilisent des fonctions C++/C# pour récupérer les éléments de l'enum. Mais MetaQuotes ne porte pas ces fonctions vers MQL4/MQL5. Hum...hum...

Quelle fonction? Quel est le problème ? Pourquoi voulez-vous boucler les éléments de l'enum ?
 
Alain Verleyen:
Quelle fonction ? Quel est le problème ? Pourquoi voulez-vous boucler sur les éléments de l'enum ?

Si quelqu'un veut/doit faire quelque chose qui n'est pas possible avec MQL, cela ne signifie pas nécessairement "mauvaise conception".

Pour répondre au sujet de départ : il n'est pas possible de faire ce que vous voulez dans la version actuelle de MQL.

Le seul moyen est de copier tous les éléments dans un tableau et de faire votre boucle en utilisant ce tableau. Mais cela n'est possible que si vous pouvez modifier le code.

 
Andrey Barinov:

Si quelqu'un veut/doit faire quelque chose qui n'est pas possible avec MQL, cela ne signifie pas nécessairement "mauvaise conception".

Pour répondre au sujet de départ : il n'est pas possible de faire ce que vous voulez dans la version actuelle de MQL.

Le seul moyen est de copier tous les éléments dans un tableau et de faire votre boucle en utilisant ce tableau. Mais cela n'est possible que si vous pouvez modifier le code.

Utiliser un enum au lieu d'un tableau est une mauvaise conception. N'est-ce pas ?

 
Alain Verleyen:

Utiliser un enum au lieu d'un array est une mauvaise conception. N'est-ce pas ?

Non, utiliser un tableau au lieu d'un enum est une mauvaise conception.

Exemple : Imaginez que vous avez une valeur de type chaîne de caractères. Et la tâche est de trouver si cette chaîne est égale à/contient en elle un des noms des éléments de l'enum (EnumToString()).

Comment résoudre ce problème ?

Raison: