Paradoja de NormalizarDoble - página 10

 
barabashkakvn:
Todo llega gradualmente. Primero hay que recordar que las frases se escriben en mayúsculas y que el estilo de verso picado no es en absoluto adecuado para un foro. Entonces, se solucionará con la normalización y la indexación desde cero.

He estado esperando este comentario )))))

 

no hay nada más natural que escribir rápido en una sala de chat: una línea

es tan natural como contar desde 1.

y redondear un número para que sea redondeado de la misma manera.

vamos, ¿dónde está tu corriente de comentarios sarcásticos llenos de formalismo?

La vida es algo más que puntos y comas debidamente espaciados y formatos binarios.

es el flujo de sensaciones y se supone que es hermoso.

es la libertad y la creatividad.

¿cuál es su respuesta a esto?

 
transcendreamer:

Se están burlando de mí, ¿no?

Sólo necesitaba teclear un número fraccionario sin basura

y me demuestran que estoy equivocado.

mql no es un fin en sí mismo, es una herramienta.

Creo que hay algunas cosas obvias, como que si pones un número en una variable, lo imprimes tal y como lo pones...

no importa cómo se organice internamente o cómo se almacene el número, es a nivel de sistema

y es obvio que estas colas son un sinsentido y un fallo a nivel de aplicación - no amigable

Pero aquí de nuevo tenemos alguna broma de programador: "esto no es un error, es una característica".

estas bromas no aparecieron por nada, no por nada ))))))))

NormalizeDouble() es necesario cuando se envían parámetros calculados como precios en las órdenes comerciales. Puede enviar los precios de compra y venta sin normalizarlos, porque ya están normalizados a la capacidad de dígitos necesaria. Si se calculan los precios, por ejemplo para un Bid-stopLoss*Point, esta expresión requiere una normalización. Los precios de las órdenes pendientes también son iguales: se calculan de antemano, por lo que deben ser normalizados.

Cuando se comparan dos números reales, hay que comparar su diferencia normalizada con cero o con el valor mínimo.

Cuando quiera ver lo que ha calculado, utilice DoubleToString() con la precisión que desee. IntegerToString() con los parámetros que desee.

Esto es algo que debes entender y aprender.

 
transcendreamer:

no hay nada más natural que escribir rápido en el estilo de una sala de chat: una línea

es tan natural como contar desde 1.

y redondear un número para que sea redondeado de la misma manera.

vamos, ¿dónde está tu corriente de comentarios sarcásticos llenos de formalismo?

La vida es algo más que puntos y comas debidamente espaciados y formatos binarios.

es el flujo de sensaciones y se supone que es hermoso.

es la libertad y la creatividad.

¿qué dices a eso?

La libertad... ¿y alguien te retiene a la fuerza?

Creatividad ... crear, escribir sus propias envolturas para usted para todas las funciones de MK y disfrutar de la belleza.

 
artmedia70:

NormalizeDouble() es necesario cuando se envían parámetros calculados como precios en las órdenes comerciales. Puede enviar los precios de compra y venta sin normalizarlos, ya que están normalizados a la capacidad de dígitos requerida. Si se calculan los precios, por ejemplo para un Bid-stopLoss*Point, esta expresión requiere una normalización. Los precios de las órdenes pendientes también son iguales: se calculan de antemano, por lo que deben ser normalizados.

Cuando se comparan dos números reales, hay que comparar su diferencia normalizada con cero o con el valor mínimo.

Cuando quiera ver lo que ha calculado, utilice DoubleToString() con la precisión que desee. IntegerToString() con los parámetros que necesite.

Esto es algo que es mejor que entiendas y asimiles.

Sí, lo entiendo muy bien, no se puede enviar una orden 1,234567 si la cotización es un número de 5 dígitos.

sobre la comparación de números dobles he visto referencias a ..... y es terrible

pero por lo que tengo entendido es seguro comparar A>B siempre que A y B sean notablemente diferentes

sólo si resulta que si, por ejemplo, pongo explícitamente A=1,23456 y B=1,23456 e if(A==B) da falso, entonces esto ya es un delito

 
artmedia70:

NormalizeDouble() es necesario cuando se envían parámetros calculados como precios en las órdenes comerciales. Puede enviar los precios de compra y venta sin normalizarlos, porque ya están normalizados a la capacidad de dígitos requerida. Si se calculan los precios, por ejemplo para un Bid-stopLoss*Point, esta expresión requiere una normalización. Los precios de las órdenes pendientes también son iguales: se calculan de antemano, por lo que deben ser normalizados.

Cuando se comparan dos números reales, hay que comparar su diferencia normalizada con cero o con el valor mínimo.

Cuando quiera ver lo que ha calculado, utilice DoubleToString() con la precisión que desee. IntegerToString() con los parámetros que necesite.

Esto es algo que debes entender y aprender.

la impresión y la alerta están torcidas - ya lo he entendido
 

Lo que me molesta es que cuando calculo un número fraccionario, lo normalizo, lo escribo en una variable, luego lo leo y lo normalizo de nuevo, me salen colas

Por ejemplo

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);

Ahora lo he cambiado por

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

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

y parece que no hay colas, whew, whew, whew...

 

más precisamente - en la versión original era (cadena)actual

es decir, la conversión de un número normalizado en colas izquierdas

a veces (no siempre)

 

el problema de comparar dos dobles surge si, por ejemplo, un número es una constante y el otro se calcula dividiendo/multiplicando

 

De todas formas gracias de nuevo por perder el tiempo en un humanitario sin remedio, si estoy molestando a alguien, lo siento de nuevo, solo digo lo que pienso sin malicia.

Mientras tanto, buenas noticias.

Razón de la queja: