Questions des débutants MQL5 MT5 MetaTrader 5 - page 474

 
Alexey Viktorov:
Ce n'est pas tout... https://www.mql5.com/ru/forum/66827
Un homme étrangement gentil... Oh, eh bien...
 
Comment connaître la valeur réelle d'une variable de type double? La variable elle-même est formée à partir d'une chaîne de texte, mais elle est soumise à une procédure d'arrondi.
 
-Aleks-:
Comment connaître la valeur réelle d'une variable de type double? Le problème est que des milliers de chiffres sont parfois rejetés par l'impression - la variable elle-même est formée à partir d'une chaîne de texte, mais elle est soumise à une procédure d'arrondi.
Ahem. Pourquoi en avez-vous besoin ?
 
Alexey Kozitsyn:
Ahem. Pourquoi en avez-vous besoin ?
Pour détecter une erreur de calcul :)
 
-Aleks-:
Pour détecter une erreur dans le calcul :)
Voulez-vous comparer plusieurs valeurs de type double?
 
Alexey Kozitsyn:
Vous voulez comparer plusieurs valeurs de type double?
Pas vraiment... on part du principe que les nombres n'ont pas toujours une valeur entière de 4=3,9999999999999999999 et qu'une inexactitude se forme après les opérations mathématiques après l'arrondi.
 

Pouvez-vous envoyer des messages électroniques à partir du terminal Metatrader 4 de manière à ce qu'une capture d'écran du graphique actuel soit prise et placée au milieu du message. Exemple :

Il y a eu un signal d'achat sur EurUsd

<скриншот09122015_eurusd.png>

Informations supplémentaires sur l'ouverture.

Dites-moi comment mettre cela en œuvre ? Il existe peut-être un exemple ou quelque chose de similaire qui peut être refait. Merci !
 
-Aleks-:
Pas tout à fait... il y a une hypothèse selon laquelle les nombres n'ont pas toujours une valeur entière de 4=3.9999999999999999999 et après avoir fait le calcul, vous obtenez une inexactitude après avoir arrondi.

Même si des imprécisions apparaissent, utilisez NormalizeDouble(). Définissez la précision que vous souhaitez pour vos calculs. C'est à cela que sert cette fonction.

L'exemple qui y figure semble décrire votre cas :

Vous devez savoir que le nombre normalisé, lorsqu'il est affiché dans le Journal à l'aide de la fonction Print(), peut contenir plus de décimales que prévu. Par exemple,

DoubleToString(a,8)=76.67100000

Print(76.671)=76.67100000000001

 
Alexey Kozitsyn:

Même si des imprécisions apparaissent, utilisez NormalizeDouble(). Définissez la précision que vous souhaitez pour vos calculs. C'est à cela que sert cette fonction.

L'exemple qui y figure semble décrire votre cas :

Oui - décrit, oui - je l'utilise - la question est juste de savoir comment ne pas passer par Print et en général la chaîne pour obtenir des données pour l'analyse :)
 
-Aleks-:
Oui - il est décrit, oui - je l'utilise - la question est de savoir comment ne pas passer par Print et string en général pour obtenir des données à analyser :)

En utilisant le même NormalizeDouble(). Vous obtenez un numéro de type double. Normalisé. Il suffit d'utiliser la fonction Print() pour obtenir une sortie comme celle-ci.

Il est écrit ici comment faire la comparaison correctement : https://www.mql5.com/ru/docs/basis/types/double

Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
  • www.mql5.com
Основы языка / Типы данных / Вещественные типы (double, float) - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Raison: