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 };
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Vous acceptez la politique du site Web et les conditions d'utilisation
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.