Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
WHRoeder: ¿este código es bueno (especialmente comprobar "añadido" y "por defecto")? También puede servir como una fácil referencia final para aquellos que visitan este hilo y sólo ir la última página (como lo hice)
Ese código no es preciso.
¿Cómo se puede utilizar if( !MathAbs( a - b ) > Punto/2) para comparar la igualdad? Eso te diría que 1.4999 == 1.5000
if( ! (MathAbs(1.4999 - 1.5000 > 0.00005 )
if( ! (0.0001 > 0.00005 )
if( ! (true )
if( false ) 1.4999 is NOT equal to 1.5000
Utilizo
o para los dobles que no son precios reales, una mayor precisión
El post de Raptors sobre este código
Así que si usted utiliza,
He probado ese método de varias maneras y no he encontrado un escenario en el que no devuelva el resultado esperado o deseado.Código final... Gracias WHRoeder
Y, tal vez una función secundaria para comparar todos los otros dobles que no son los precios ...
Ver también 'MQL4 Reference > Language Basics > Data Types > Real Types (double, float)' en lo que respecta al uso de números pequeños para la comparación.
Tal vez alguien sabe cómo escribir 0,00...1 mejor en exponer
Así que hay algo más interesante que he encontrado, potencialmente en relación con "// 0 comparar no necesita esta función".
Tal vez sea un error sólo en las últimas versiones, no estoy seguro. Comparar con 0 ya no funciona correctamente. Tuve que recurrir a algo poco amigable como
resultado=(int(resultado*100)/100.0); // Resolución 2 dígitos
Sólo para asegurarme de que los valores 0 terminaban realmente como valores 0.
WHRoeder, gracias. Hay que estudiar más :)
Creo que este tema se trata con demasiada complejidad innecesaria.
Intenta hacer la vida de tu programador siempre lo más fácil posible. Escriba definiciones (o siga con métodos si realmente debe hacerlo) en aquellas clases donde necesite sus comparaciones dobles:
Cuando necesites comparar dos dobles entonces úsalo en una condición como esta:
Si quieres ver si un doble es cero (o muy, muy cercano a cero) usa una condición como esta:
Como nota al margen, ya que veo muchos posts hablando de divisiones:
Con la encapsulación tendemos a olvidarnos de los costes del código que se "externaliza" a algunos métodos de utilidad. Recuerde que las divisionesson computacionalmente muy costosas! Especialmente, una vez envuelto en métodos de utilidad agradable en algún lugar en las clases de utilidad, empezamos a usarlos en todas partes en los indicadores o EAs y han olvidado por mucho tiempo lo que los pasos computacionales que realizan. Cuando usamos el probador de estrategias pagamos mucho tiempo innecesario por nuestra dejadez.
Regla de oro: Las sumas y restas son mucho más rápidas que las multiplicaciones y divisiones. La operación de división es la que más tiempo de cálculo requiere.Optimice las divisiones, siempre que sea posible. Si el denominador es fijo como en este bucle...
entonces sustituye el denominador x por su valor invertido 1/x:
Además, si el resultado de una división es siempre el mismo, entonces haz el cálculo una vez y guarda el resultado en una variable para que puedas usarlo en cualquier parte de tu código (por ejemplo, en los bucles):
Saludos,
A.T.