Redondear números en MT4 mediante NormalizeDouble - página 15

 
pavlick_:
Algunos números sólo pueden representarse como una fracción infinita, como 1/3 en el sistema decimal. Pero 1/3 no es una fracción infinita en el sistema terciario, allí es == 0,1. Es decir, los diferentes sistemas numéricos tienen sus propias fracciones infinitas. Por lo tanto, una fracción no infinita en decimal puede ser uno en binario. Por ejemplo: 0,1, 0,2, 0,3, 0,4, ... no tienen una representación binaria exacta. Si llamas a NormalizeDouble diez veces, será o bien 0,199999999...1 o bien 0,200000...1. No sé, quizás esto sea una novedad.

¡Dices la verdad! Para que quede claro, el ND es necesario SÓLO para comparar, no para representar. Y hace tiempo que está obsoleto.

 
pavlick_:
Algunos números sólo pueden representarse como fracciones infinitas, por ejemplo, 1/3 en el sistema decimal. Pero 1/3 no es una fracción infinita en el sistema terciario, allí es == 0,1. Es decir, los diferentes sistemas numéricos tienen sus propias fracciones infinitas. Por lo tanto, una fracción no infinita en decimal puede ser uno en binario. Por ejemplo: 0,1, 0,2, 0,3, 0,4, ... no tienen una representación binaria exacta. Si llamas a NormalizeDouble diez veces, será o bien 0,199999999...1 o bien 0,200000...1. No sé, quizás esto sea una novedad.

Lo recuerdo, pero en este caso es 0+0 y no es 0.

 
transcendreamer:

Lo recuerdo, pero en este caso es 0+0 y no es 0.

¿En qué caso? Dame un ejemplo de cuándo es este el caso.
 
fxsaber:

¡Dices la verdad! Para que quede claro, el ND es necesario SÓLO para comparar, no para representar. Y hace tiempo que está obsoleta.

NormalizeDouble sólo es necesario para normalizar el precio cuando se colocan órdenes pendientes y stops. No lo necesita para nada más.

Esto se indica claramente en la documentación

Los valores calculados de StopLoss y TakeProfit, así como los precios abiertos de las órdenes pendientes, deben normalizarse con la precisión, cuyo valor puede obtenerse mediante Digits().

 
Sergei Vladimirov:
¿En qué caso concreto? Dame un ejemplo de cuándo te ocurre esto.

esto sucede cuando había un 0 en la variable y se le añade un 0

(Sospecho que en realidad no es 0)

 
Slawa:

NormalizeDouble sólo es necesario para normalizar el precio cuando se colocan órdenes pendientes y stops. No lo necesita para nada más.

Esto se indica claramente en la documentación

Pero ¿qué pasa con la comparación de los números reales...
 
transcendreamer:

esto sucede cuando había un 0 en la variable y se le añade un 0

(Sospecho que en realidad no es 0)


Exactamente. Los ceros "reales" en la suma y la resta siguen siendo ceros. Por eso te ofrecí un ejemplo.

 
Alexander Bereznyak:
¿Y si comparamos números reales...

Un efecto secundario relacionado.

Resultó ser conveniente. Pero originalmente no estaba destinado a ser utilizado de esta manera.

Existen funciones especiales para imprimir el número real con la precisión adecuada.

Dime, ¿por qué es necesario redondear los números reales en los cálculos? Porque en este caso, ¡se pierde la precisión de los cálculos!

 
Sergei Vladimirov:

Exactamente. Los ceros "reales" en la suma y la resta siguen siendo ceros. Por eso te ofrecí un ejemplo.

Estaba empezando a adivinar queNormalizeDouble(new_lot-sum_lots,Lots_Digits); no da como resultado exactamente 0 y almacena alguna cola
 
Slawa:

NormalizeDouble sólo es necesario para normalizar el precio cuando se colocan órdenes pendientes y stops. No lo necesita para nada más.

Esto se indica claramente en la documentación

Obsoleto

Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias

Implementaciones alternativas de funciones/enfoques estándar

Renat Fatkhullin, 2016.09.02 00:55

Esta no es la forma de sobrecargar. Las mismas firmas de funciones.

Pero la idea es clara: la función de normalización teniendo en cuenta la granulación de las garrapatas.

Razón de la queja: