Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1294

 
ANDREY:

Bonne journée à tous !

J'essaie de passer de mql4 à mql5.

Question : Pourquoi mql5 calcule et affiche une expression inconnue pour moi comme 2.99999999 - (moins) 05 au lieu de la différence entre le prix actuel et la valeur de la variable Hay, qui devrait être <1 (comme dans mql4) ?

Comment faire pour que mql5 calcule correctement la différence entre ces valeurs ? Je normalise toutes les valeurs en utilisant NormalizeDouble(), mais les valeurs ci-dessus

sont affichées sans modification. Cela me semble étrange car les deux valeurs sont de type double.

Merci à tous pour votre aide.


2,9999999999 - (moins)05= 2,9999999999 / 100000 = 0,00002999999. C'est comme ça que ça se passe en mathématiques.

-(moins)05, c'est diviser par 10 à la cinquième puissance.

 
IndependentMK:

Rebonjour.
Veuillez prêter attention à la question d'un débutant.
Je dois signaler les erreurs dans le code, car dans le testeur, le conseiller expert n'ouvre pas les ordres...
Le compilateur ne montre aucune erreur ou avertissement et même chose dans le journal, il n'y a aucune erreur...

Il ne s'ouvre pas parce qu'une des conditions n'est pas remplie.

C'est

while(MA_Smoth_B > MA_Smoth_S)

ou ceci

if(MA_Simpl_B_Op < MA_Simpl_S_Op && MA_Simpl_B_Cl > MA_Simpl_S_Cl)

Commentez les deux flashs // et vous verrez lequel. C'est ainsi que vous trouverez l'erreur.

 
Александр:

2,9999999999 - (moins)05= 2,9999999999 / 100000 = 0,000029999999999. C'est comme ça qu'on fait en maths.

-(moins)05, c'est diviser par 10 à la cinquième puissance.

Merci pour la réponse, mais pourquoi le programme ne calcule-t-il pas la différence entre le prix 1.33671 et Hay 1.33664 au lieu de l'expression, qui devrait être 0.00007, mais sort plutôt l'expression ?

En même temps, lorsque je remplace la variable Hay avec 1.33664 par la constante 1.33664( SymbolInfoDouble(Symbol(),SYMBOL_BID) - 1.33664 ), le programme calcule la différence réelle entre ces valeurs, soit 0.00007. En fait, la variable Hay dans le code prend la valeur du prix d'ouverture de l'ordre sur le tick précédent, qui est une valeur double de 1.33664.

Merci d'avance pour votre aide.

 
ANDREY:

Merci pour la réponse, mais pourquoi le programme ne calcule-t-il pas la différence entre la valeur du prix 1.33671 et Hay 1.33664 au lieu de l'expression, qui devrait être 0.00007, mais sort plutôt l'expression ?

Merci d'avance pour le conseil.

DoubleToString(). Ce n'est pas MQL5, c'est une sortie erronée des valeurs réelles dans le journal. Ceci est également vrai pour MQL4.

Документация по MQL5: Преобразование данных / DoubleToString
Документация по MQL5: Преобразование данных / DoubleToString
  • www.mql5.com
[in]  Формат точности. Если значение digits лежит в диапазоне от 0 до 16, то будет получено строковое представление числа с указанным количество знаков после запятой. Если значение digits лежит в диапазоне от -1 до -16, то...
 
Artyom Trishkin:

DoubleToString(). Et ce n'est pas à propos de MQL5, c'est à propos de votre sortie incorrecte des valeurs réelles dans le journal. Cela s'applique également à MQL4 dans la même mesure.

Je l'ai. Merci. Je n'ai jamais été confronté à de tels problèmes auparavant. Maintenant, je vais savoir.

Je ne suis pas tout à fait sûr de ce que le format de précision signifie par rapport à mon code. Il me semble qu'il s'agit du nombre de décimales.
Mais dans MT4, dans exactement le même code (sauf pour OrderSend), si je me souviens bien, la fonction Print sort toujours la valeur réelle de la différence entre deux valeurs de prix, à savoir le nombre inférieur à 1 (0.00000) avec 5 décimales après 0.

 
ANDREY:

Je l'ai. Merci. Je n'ai jamais vu ça avant. Maintenant je vais savoir.

Je ne suis pas encore tout à fait sûr de ce que le format de précision signifie par rapport à mon code. Il me semble qu'il s'agit du nombre de décimales.
Mais dans MT4, dans exactement le même code (sauf pour OrderSend), si je me souviens bien, la fonction Print sort toujours la valeur réelle de la différence entre deux valeurs de prix, à savoir le nombre inférieur à 1 (0.00000) avec 5 décimales après 0.

Les valeurs réelles des données sont imprimées partout. Il s'agit simplement d'un format différent de représentation des nombres réels. Si le terminal ne spécifie pas le format de sortie, il décide du format le plus pratique. Naturellement, cela suppose que vous connaissiez tous les formats de représentation des nombres.

Tout est dans l'aide.

 
Artyom Trishkin:

Les valeurs réelles des données sont affichées partout. Il s 'agit simplement d'un format différent pour représenter les nombres réels. Si le terminal ne spécifie pas de format de sortie, il décide du format le plus pratique. Naturellement, cela suppose que vous connaissiez tous les formats de nombres.

Tout est dans l'aide.

Ainsi, MT4 et MT5 ont des formats différents pour la représentation des nombres réels ?
Que dois-je lire dans l'aide mql5 pour répondre à cette question ?

Merci pour votre aide.

 
Michail_David:
Bonjour, chers experts. J'ai besoin de votre aide pour corriger l'indicateur. L'essence de l'indicateur est la suivante. Calculez l'ampleur de l'augmentation du prix par rapport à la barre précédente. Pour zéro, il faut une barre d'étoile. C'est-à-dire que le prix d'ouverture est égal au prix de clôture. Lors de la compilation aucune erreur, mais lors du test une erreur sur la ligne 80 20 caractères. La ligne de signal est également mal dessinée. Mais je pense que c'est la raison du calcul incorrect du tampon principal. Veuillez m'aider à le réparer.

Ok. On dirait que seuls quelques privilégiés ont de l'aide par ici.

 
Michail_David:

Ok. On dirait que seuls quelques privilégiés ont de l'aide par ici.

Essayez ça.

//--- typical price and its moving average
   for(i=0; i<rates_total-1; i++)
     {
      ExtTempBuffer[i] = NormalizeDouble((close[i]-open[i])/Point(),2);
 
Vitaly Muzichenko:

Essayez ça.

Merci, Vitaly. Mais j'obtiens toujours une erreur à la ligne ExtTempBuffer[i] = NormalizeDouble((close[i]-open[i])/Point(),2) ; sur l'élément [i}.

Raison: