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
WHRoeder : ce code est bon (surtout vérifier "ajouté" et "par défaut") ? Il peut également servir de référence finale facile pour ceux qui visitent ce fil et vont juste à la dernière page (comme je l'ai fait).
Ce code n'est pas exact.
Comment peut-on utiliser if( !MathAbs( a - b ) > Point/2) pour comparer l'égalité ? Cela vous dirait que 1.4999 == 1.5000
if( ! (MathAbs(1.4999 - 1.5000 > 0.00005 )
if( ! (0.0001 > 0.00005 )
if( ! (true )
if( false ) 1.4999 is NOT equal to 1.5000
J'utilise
ou pour les doubles qui ne sont pas des prix réels, une plus grande précision
Raptors post à propos de ce code
Donc si vous utilisez ,
J'ai testé cette méthode de diverses manières et je n'ai pas trouvé de scénario où elle ne renverrait pas le résultat attendu ou souhaité.Code final... Merci WHRoeder
Et, peut-être une fonction secondaire pour comparer tous les autres doubles qui ne sont pas des prix...
Voir aussi 'MQL4 Reference > Language Basics > Data Types > Real Types (double, float)' en ce qui concerne l'utilisation de petits nombres pour la comparaison.
Peut-être que quelqu'un sait comment mieux écrire 0.00...1 en exponentiel.
Il y a donc quelque chose d'autre d'intéressant que j'ai trouvé, potentiellement en relation avec "// 0 compare n'a pas besoin de cette fonction".
Peut-être un bug uniquement dans les dernières versions, pas sûr. La comparaison avec 0 ne fonctionne plus correctement. J'ai dû recourir à quelque chose de peu convivial comme ;
outcome=(int(outcome*100)/100.0) ; // Résolution 2 chiffres
Juste pour s'assurer que les valeurs 0 finissent effectivement par être des valeurs 0.
WHRoeder, merci. Une étude plus approfondie est nécessaire :)
Je pense que ce sujet est traité avec trop de complexité inutile.
Essayez de rendre la vie de votre programmeur toujours aussi facile que possible. Ecrivez des définitions (ou allez-y avec des méthodes si vous le devez vraiment) dans les classes où vous avez besoin de vos comparaisons de doubles :
Lorsque vous avez besoin de comparer deux doubles, utilisez-le dans une condition comme celle-ci :
Si vous voulez voir si un double est égal à zéro (ou très, très proche de zéro), utilisez une condition comme celle-ci :
En passant, puisque je vois beaucoup de messages parlant de divisions :
Avec l'encapsulation, nous avons tendance à oublier les coûts du code qui est "externalisé" vers certaines méthodes utilitaires. Rappelez-vous queles divisions sont très coûteuses en termes de calcul ! En particulier, une fois enveloppées dans de jolies méthodes utilitaires quelque part dans des classes utilitaires, nous commençons à les utiliser partout dans des indicateurs ou des EA et nous avons oublié depuis longtemps quelles étapes de calcul elles effectuent. Lorsque nous utilisons le testeur de stratégie, nous payons beaucoup de temps inutile pour notre négligence.
Règle de base: Les additions et les soustractions sont beaucoup plus rapides que les multiplications et les divisions. L'opération de division est celle qui prend le plus de temps de calcul.Optimisez les divisions- partout où c'est possible ! Si le dénominateur est fixe comme dans cette boucle...
alors remplacez le dénominateur x par sa valeur inversée 1/x:
De même, si le résultat d'une division est toujours le même, effectuez le calcul une fois et enregistrez le résultat dans une variable afin de pouvoir l'utiliser partout dans votre code (par exemple dans les boucles) :
Merci,
A.T.