NormalizeDouble paradoxe - page 10

 
barabashkakvn:
Tout vient progressivement. Tout d'abord, il faut se rappeler que les phrases sont écrites en majuscules et que le style "chopped verse" n'est en aucun cas adapté à un forum. Ensuite, la normalisation et l'indexation se feront d'elles-mêmes à partir de zéro.

J'attendais ce commentaire )))))

 

il n'y a rien de plus naturel que de taper rapidement dans le style d'un salon de discussion - une ligne

c'est aussi naturel que de compter à partir de 1.

et arrondir un nombre pour qu'il soit arrondi de la même façon.

Allez, où est votre flot de commentaires sarcastiques remplis de formalisme ?

La vie ne se résume pas à des points bien espacés, des virgules et des formats binaires.

C'est le flux des sentiments et c'est censé être beau.

c'est la liberté et la créativité.

Quelle est votre réponse à cette question ?

 
transcendreamer:

Vous vous moquez tous de moi, n'est-ce pas ?

J'avais juste besoin de taper un nombre fractionnaire sans déchet.

et tu me prouves que j'ai tort.

mql n'est pas une fin en soi, c'est un outil.

Je pense qu'il y a des choses évidentes, comme : si vous mettez un nombre dans une variable, vous l'imprimez comme vous l'avez mis...

la manière dont il est organisé en interne ou dont le numéro est stocké n'a pas d'importance, c'est le niveau du système.

et il est évident que ces queues sont absurdes et constituent un défaut au niveau de l'application - non convivial

Mais là encore, nous avons droit à une blague de programmeur : "ce n'est pas un bug, c'est une fonctionnalité".

ces blagues ne sont pas apparues pour rien, pas pour rien ))))))))

NormalizeDouble() est nécessaire lorsque l'on envoie des paramètres calculés comme prix dans les ordres de négociation. Vous pouvez envoyer les prix Ask et Bid sans normalisation, car ils sont déjà normalisés à la capacité du chiffre nécessaire. Si vous calculez des prix, par exemple pour un Bid-stopLoss*Point, alors cette expression nécessite une normalisation. Les prix des ordres en suspens sont également les mêmes : vous les calculez à l'avance, ils doivent donc être normalisés.

Lorsque vous comparez deux nombres réels, vous devez comparer leur différence normalisée à zéro ou à la valeur minimale.

Lorsque vous voulez voir ce que vous avez calculé, utilisez DoubleToString() avec la précision que vous souhaitez. IntegerToString() avec les paramètres que vous souhaitez.

C'est une chose que vous devez comprendre et apprendre.

 
transcendreamer:

il n'y a rien de plus naturel que de taper rapidement dans le style d'un salon de discussion - une ligne

c'est aussi naturel que de compter à partir de 1.

et arrondir un nombre pour qu'il soit arrondi de la même façon.

Allez, où est votre flot de commentaires sarcastiques remplis de formalisme ?

La vie ne se résume pas à des points bien espacés, des virgules et des formats binaires.

c'est le flux des sensations et c'est censé être beau.

c'est la liberté et la créativité.

Qu'est-ce que tu réponds à ça ?

La liberté... et quelqu'un vous retient de force ?

Créativité ... créez, écrivez vos propres wrappers pour toutes les fonctions MK et profitez de la beauté.

 
artmedia70:

NormalizeDouble() est nécessaire lorsque l'on envoie des paramètres calculés comme prix dans les ordres de négociation. Vous pouvez envoyer les prix Ask et Bid sans normalisation, car ils sont déjà normalisés à la capacité numérique requise. Si vous calculez des prix, par exemple pour un Bid-stopLoss*Point, alors cette expression nécessite une normalisation. Les prix des ordres en attente sont également les mêmes : vous les calculez à l'avance, ils doivent donc être normalisés.

Lorsque vous comparez deux nombres réels, vous devez comparer leur différence normalisée à zéro ou à la valeur minimale.

Lorsque vous voulez voir ce que vous avez calculé, utilisez DoubleToString() avec la précision que vous souhaitez. IntegerToString() avec les paramètres dont vous avez besoin.

C'est quelque chose que vous feriez mieux de comprendre et d'assimiler.

Oui, je comprends très bien, vous ne pouvez pas envoyer un ordre 1.234567 si la cotation est à 5 chiffres.

en ce qui concerne la comparaison de nombres doubles, j'ai vu des références à..... et c'est terrible.

mais d'après ce que je comprends, il est possible de comparer A>B tant que A et B sont sensiblement différents.

seulement s'il s'avère que si, par exemple, je fixe explicitement A=1.23456 et B=1.23456 et que if(A==B) donne faux, alors c'est déjà un crime

 
artmedia70:

NormalizeDouble() est nécessaire lorsque l'on envoie des paramètres calculés comme prix dans les ordres de négociation. Vous pouvez envoyer les prix Ask et Bid sans normalisation, car ils sont déjà normalisés à la capacité numérique requise. Si vous calculez des prix, par exemple pour un Bid-stopLoss*Point, alors cette expression nécessite une normalisation. Les prix des ordres en suspens sont également les mêmes : vous les calculez à l'avance, ils doivent donc être normalisés.

Lorsque vous comparez deux nombres réels, vous devez comparer leur différence normalisée à zéro ou à la valeur minimale.

Lorsque vous voulez voir ce que vous avez calculé, utilisez DoubleToString() avec la précision que vous souhaitez. IntegerToString() avec les paramètres dont vous avez besoin.

C'est une chose que vous devez comprendre et apprendre.

l'impression et l'alerte sont de travers - je l'ai déjà compris
 

Ce qui me dérange, c'est que lorsque je calcule un nombre fractionnaire, que je le normalise, que je l'écris dans une variable, puis que je le lis et le normalise à nouveau, j'obtiens des queues.

par exemple

basis[0]=NormalizeDouble(sum_A,2);

GlobalVariableSet("Equity-"+portfolio_id,basis[0]); 

...

current=NormalizeDouble(GlobalVariableGet("Equity-"+portfolio_id),2);

text = "Positions synchronized at " + current + " for portfolio: " + portfolio_name;

if(!automatic) MessageBox(text,""); else Print(text);

Maintenant, je l'ai changé en

text = "Positions synchronized at " + DoubleToStr(current,2) + " for portfolio: " + portfolio_name;

if(!automatic) MessageBox(text,""); else Print(text);

et il ne semble pas y avoir de queue, whew, whew, whew...

 

plus précisément - dans la version originale, il s'agissait du (string)courant

c'est-à-dire la conversion d'un nombre normalisé en pile à gauche

parfois (pas toujours)

 

le problème de la comparaison de deux doubles se pose si, par exemple, un nombre est une constante et l'autre est calculé par division/multiplication

 

En tout cas merci encore de perdre votre temps sur un humanitaire sans espoir, si j'ennuie quelqu'un, désolé encore, je dis juste ce que je pense sans malice.

Bonne nouvelle en attendant.