Questions des débutants MQL5 MT5 MetaTrader 5 - page 495
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Sur le premier cas est résolu - mettre entre parenthèses pour deux comparaisons et il ne jure pas - y avait-il une erreur logique - c'est-à-dire que les résultats de la comparaison pourraient être remplacés à cause du "ou" ?
Il reste une question ouverte avec la deuxième expression - qu'est-ce qui ne va pas ici - des idées ?
Le premier cas est résolu - mettre entre parenthèses deux comparaisons et cela ne jure pas - y a-t-il une erreur logique - c'est-à-dire que les résultats de la comparaison pourraient être remplacés à cause de "ou" ?
Il reste une question ouverte concernant la deuxième expression - qu'est-ce qui ne va pas ici - des idées ?
Rappelez-vous que la vérification d'une condition dans le nouveau mql4 n'est pas effectuée complètement. C'est-à-dire dans la condition
if(Low[X]>PriceBuy && High[X]>PriceBuy ||
Low[X]<PriceBuy && High[X]<PriceBuy)
Si Low[x] n'est pas supérieur à PriceBuy, aucune autre vérification ne sera effectuée. C'est ce que nous apprend la description de l'erreur. De même, si la première paire est entre parenthèses, la deuxième paire de conditions sera vérifiée si elle échoue.
Deuxième question.
for(calc_day;calc_day>0; calc_day--)
Quelle est la valeur de calc_day ? Peut-elle être inférieure à zéro ? Le compilateur ne sait pas ce qu'il y a dans la logique... C'est pourquoi il prévient d'une possible boucle inefficace.
N'oubliez pas que la vérification des conditions dans la nouvelle mql4 n'est pas effectuée complètement. C'est-à-dire, dans la condition
if(Low[X]>PriceBuy && High[X]>PriceBuy ||
Low[X]<PriceBuy && High[X]<PriceBuy)
Si Low[x] n'est pas supérieur à PriceBuy, aucune autre vérification ne sera effectuée. C'est ce que nous apprend la description de l'erreur. De même, si la première paire est entre parenthèses, la deuxième paire de conditions sera vérifiée si elle échoue.
Merci pour la réponse !
Surpris - comme visuellement la logique a toujours fonctionné correctement, hmmm....
Deuxième question.
for(calc_day;calc_day>0; calc_day--)
Quelle est la valeur de calc_day ? Peut-elle être inférieure à zéro ? Le compilateur ne sait pas ce qui est dans la logique... C'est pourquoi il prévient d'une possible boucle inefficace.
Merci pour la réponse !
Surpris - comme visuellement la logique a toujours fonctionné correctement, hmmm....
Avant les versions 6**, c'était comme ça, je vérifiais toute la chaîne des conditions et tout fonctionnait, mais maintenant tout a changé. Et dans les anciennes constructions, dans ce cas, la condition est ambiguë. Comment est-il conçu ?
if( (Low[X]>PriceBuy && High[X]>PriceBuy) || (Low[X]<PriceBuy && High[X]<PriceBuy) )
Ou pas ?
if(Low[X]>PriceBuy && ( High[X]>PriceBuy) || (Low[X]<PriceBuy ) && High[X]<PriceBuy)
Un cerveau humain peut le comprendre, mais que doit faire un compilateur ? Il n'a pas de cerveau.
-Aleks:
Le nombre calc_day est toujours supérieur à 0. Les autres valeurs ne provoquent pas l'appel de code.Dites-le au compilateur...
Jusqu'à la version 6**, c'était comme ça, toute la chaîne des conditions était vérifiée et tout fonctionnait, mais maintenant tout a changé. Et dans les anciennes constructions, la condition est également ambiguë dans ce cas. Comment est-il conçu ?
if( (Low[X]>PriceBuy && High[X]>PriceBuy) || (Low[X]<PriceBuy && High[X]<PriceBuy) )
ou c'est ça ?
if(Low[X]>PriceBuy && ( High[X]>PriceBuy) || (Low[X]<PriceBuy ) && High[X]<PriceBuy)
Un cerveau humain peut le comprendre, mais que doit faire un compilateur ? Il n'a pas de cerveau...
Dites-le au compilateur...
Convaincant - je serai plus vigilant.
Comment le dire au compilateur ? Écrivez-le, mais comprendra-t-il ?
if (calc_day<0) calc_day=calc_day*(-1);
C'était comme ça avant les constructions 6**, toute la chaîne des conditions était vérifiée et tout fonctionnait, mais maintenant tout a changé. Oui et dans les anciennes constructions dans ce cas condition ambiguë. Comment est-il conçu ?
if( (Low[X]>PriceBuy && High[X]>PriceBuy) || (Low[X]<PriceBuy && High[X]<PriceBuy) )
ou est-ce le cas ?
if(Low[X]>PriceBuy && ( High[X]>PriceBuy) || (Low[X]<PriceBuy ) && High[X]<PriceBuy)
Un cerveau humain peut le comprendre, mais que doit faire un compilateur ? Il n'a pas de cerveau...
Dites-le au compilateur...
vérifiez la précédence des opérateurs pour détecter une éventuelle erreur ; utilisez les parenthèses pour clarifier la précédence - ce n'est pas une erreur. C'est un avertissement. Il se produit dans les anciens codes.
Ils l'ont ajouté pour l'utilisateur plutôt que pour le compilateur. Le compilateur est guidé par des priorités d'opération. Tout y est clair. La priorité de && est plus élevée que celle de ||. C'est pourquoi les parenthèses doivent être disposées de la manière suivante
if( (Low[X]>PriceBuy && High[X]>PriceBuy) || (Low[X]<PriceBuy && High[X]<PriceBuy) )
Mise à jour : Dans ce cas, la priorité est la même pour MT4 et MT5.
Convaincant - je serai plus vigilant.
Comment le dire au compilateur ? Écrivez-le, mais comprendra-t-il ?
if (calc_day<0) calc_day=calc_day*(-1);
vérifiez la précédence des opérateurs pour détecter une éventuelle erreur ; utilisez les parenthèses pour clarifier la précédence - ce n'est pas une erreur. C'est un avertissement. Il se produit dans les anciens codes.
Nous l'avons ajouté pour l'utilisateur plutôt que pour le compilateur. Le compilateur est guidé par des priorités d'opération. Tout y est clair. La priorité de && est plus élevée que celle de ||. C'est pourquoi les parenthèses doivent être disposées de la manière suivante
if( (Low[X]>PriceBuy && High[X]>PriceBuy) || (Low[X]<PriceBuy && High[X]<PriceBuy) )
Mise à jour : Dans ce cas, la priorité est la même pour MT4 et MT5.
Eh bien, en substance, oui, l'avertissement n'est pas une erreur. Mais comment va fonctionner la variante initiale if( Low[X]>PriceBuy && High[X]>PriceBuy || Low[X]<PriceBuy && High[X]<PriceBuy )? Ou est-ce un inconvénient de mettre quelques supports ?
Convaincant - je serai plus vigilant.
Comment le dire au compilateur ? Écrivez-le, mais comprendra-t-il ?
if (calc_day<0) calc_day=calc_day*(-1);
Eh bien, en substance, oui, l'avertissement n'est pas une erreur. Mais comment va fonctionner la variante initiale if( Low[X]>PriceBuy && High[X]>PriceBuy || Low[X]<PriceBuy && High[X]<PriceBuy )? Ou échouera-t-il à mettre un couple d'équerres ?
Cela fonctionnera comme je l'ai écrit ci-dessus.
Le compilateur avertit l'utilisateur de ne pas être paresseux et de mettre des parenthèses pour éviter d'éventuelles erreurs non évidentes.