Comment faire pour passer une énumération de manière cohérente ?
int TF(int i) { switch(i) { case 1: return(PERIOD_M1); case 2: return(PERIOD_M5); case 3: return(PERIOD_M15); case 4: return(PERIOD_M30); case 5: return(PERIOD_H1); case 6: return(PERIOD_H4); case 7: return(PERIOD_D1); case 8: return(PERIOD_W1); case 9: return(PERIOD_MN1); } }
Ce n'est pas possible car la valeur de la période n'est pas incrémentée de un, vous devez organiser votre propre index d'énumération, comme ceci
- www.mql5.com
Si seulement c'était aussi simple. Les valeurs ne sont pas uniformément réparties. Disons que la période PERIOD_H1 est de 60 et que la période suivante PERIOD_H2 est de 120.
Il y a probablement deux fonctions qui doivent être saisies : 1 - retourne le nombre d'éléments dans l'énumération, 2 - retourne l'élément par numéro...
Il y a probablement deux fonctions qui doivent être saisies : 1 - retourne le nombre d'éléments dans l'énumération, 2 - retourne l'élément par numéro...
Si seulement c'était aussi simple. Les valeurs ne sont pas uniformément réparties. Disons que la période PERIOD_H1 est de 60 et que la période suivante PERIOD_H2 est de 120.
Le fait est que l'énumération est une chose prédéfinie et que toutes ses valeurs peuvent être visualisées,
C'est pourquoi le respecté sergey1294 vous a conseillé de décrire la table de conversion en un appel de série,
où si la valeur augmente de 1, la valeur suivante de l'enum dans la liste sera appelée.
ENUM_TIMEFRAMES GetPeriodEnumerator(uchar i); Estimons maintenant combien il y a d'énumérations et combien de fonctions Enumerator il devrait y avoir (une pour chaque énumération).
En général, il existe une seule solution. Pour chaque énumération, écrivez une fonction spéciale d'énumérateur. Par exemple, pour les délais : estimons maintenant combien d'énumérations il y a au total et ensuite combien de fonctions énumératrices il devrait y avoir (une pour chaque énumération).
ENUM_TIMEFRAMES GetPeriodEnumerator(uchar i) { switch(i) { case 0 return(PERIOD_M1); case 1 return(PERIOD_M2); case 2 return(PERIOD_M3); case 3 return(PERIOD_M4); case 4 return(PERIOD_M5); case 5 return(PERIOD_M6); case 6 return(PERIOD_M10); case 7 return(PERIOD_M12); case 8 return(PERIOD_M15); case 9 return(PERIOD_M20); case 10 return(PERIOD_M30); case 11 return(PERIOD_H1); case 12 return(PERIOD_H2); case 13 return(PERIOD_H3); case 14 return(PERIOD_H4); case 15 return(PERIOD_H6); case 16 return(PERIOD_H8); case 17 return(PERIOD_H12); case 18 return(PERIOD_D1); case 19 return(PERIOD_W1); case 20 return(PERIOD_MN1); } return(-1); }
Il existe un total de 21 délais dans MT5. La variante finale ressemblera à ceci
- www.mql5.com
En général, il existe deux options pour l'énumération
Première utilisation d'une fonction, j'ai oublié de mettre un deux-points dans mon dernier message.
ENUM_TIMEFRAMES GetPeriodEnumerator(uchar i) { switch(i) { case 0: return(PERIOD_M1); case 1: return(PERIOD_M2); case 2: return(PERIOD_M3); case 3: return(PERIOD_M4); case 4: return(PERIOD_M5); case 5: return(PERIOD_M6); case 6: return(PERIOD_M10); case 7: return(PERIOD_M12); case 8: return(PERIOD_M15); case 9: return(PERIOD_M20); case 10: return(PERIOD_M30); case 11: return(PERIOD_H1); case 12: return(PERIOD_H2); case 13: return(PERIOD_H3); case 14: return(PERIOD_H4); case 15: return(PERIOD_H6); case 16: return(PERIOD_H8); case 17: return(PERIOD_H12); case 18: return(PERIOD_D1); case 19: return(PERIOD_W1); case 20: return(PERIOD_MN1); } return(-1); }La deuxième méthode consiste à utiliser un tableau
ENUM_TIMEFRAMES GetPeriodEnumerator[21]= { PERIOD_M1, PERIOD_M2, PERIOD_M3, PERIOD_M4, PERIOD_M5, PERIOD_M6, PERIOD_M10, PERIOD_M12, PERIOD_M15, PERIOD_M20, PERIOD_M30, PERIOD_H1, PERIOD_H2, PERIOD_H3, PERIOD_H4, PERIOD_H6, PERIOD_H8, PERIOD_H12, PERIOD_D1, PERIOD_W1, PERIOD_MN1 };
Disons que nous avons une énumération. Comment obtenir toutes les valeurs possibles de cette énumération une par une, par exemple dans une boucle ?
ENUM_TIMEFRAMES tf1;C'est-à-dire que tf1++ doit retourner séquentiellement PERIOD_M1, PERIOD_M2, PERIOD_M5.... Je pense que cela ne peut pas être fait avec les outils linguistiques.