¿Es posible evitar muchas "ores" (||) en las condiciones que provocan la misma acción? - página 7

 

Qué noche tan fructífera he tenido esta noche! Me han lanzado tantas cosas interesantes mientras dormía, ¡por lo que estoy eternamente agradecido! ¡Y tus mañanas eran más sabias que las tardes también!

Un vistazo rápido a todo lo sugerido sigue planteando dudas como siempre, pero por ahora sólo quiero saber si es posible hacer la última expresión con una sola Action(), ya que es bastante extensa:

if (!A) if (!B) if (!C) if (!D)
else Action();


Me parece que podría ser más rápido. Cierto, no impide comprobar todas las condiciones si sólo se ejecuta la última, o me equivoco, lo que sería mejor para mí.

¿Qué te parece?

 
FAQ:
Al que no le guste el "puto MQL4" que se vaya corriendo, corriendo. Porque no está claro lo que hace aquí, a pesar de todos los méritos y la antigüedad del relato.
Por favor, explíquelo a los no iniciados.
 
Meat:
En general, la opción más rápida sería ésta:

Sin embargo,otra línearesult=false debería combinarse con la primera, no afectará a la velocidad.En general, si A, B, C y D contienen condiciones simples (con un mínimo de aritmética, sin llamar a todas las funciones matemáticas y otras cosas), entonces no obtendrá mucha ganancia de rendimiento de dicha optimización (a menos que esta construcción se ejecute decenas de millones de veces, por supuesto). Pero la sobrecarga de código puede ser significativa.

Escribí sobre ello en uno de los hilos que todo debe ser manejado racionalmente. Por alguna razón, me parece que su código está lleno de lugares más importantes la optimización de los cuales realmente daría una enorme ganancia de rendimiento. Usted debe comenzar con el algoritmo básico. La mayoría de los novatos tienen una comprobación tonta de todas las condiciones relativas a TS o las órdenes abiertas en cada tick. Pero en la mayoría de los casos, basta con comprobar sólo las condiciones de contorno, por ejemplo, cuando el alza o el bajo alcanzan un determinado valor, o cuando aparece una nueva barra. Sólo después de eso puede realizar otras comprobaciones.

Bueno, además de los cálculos que consumen muchos recursos hay que pensar en trasladar estos cálculos a una DLL. Por lo demás, sentarse a esperar 13 minutos en el puto MQL4 (mientras se puede obtener el mismo resultado durante 2-3 minutos) parece lamentable :)


aunque estoy absolutamente de acuerdo con la primera parte.
 
icas:

Así es más rápido.

Me viene a la mente un cuento:

"Hubo dos preguntas en una reunión del consejo de administración de la empresa:

1. La decisión de construir el sincrofasotrón.

2. La decisión de construir un aparcamiento de bicicletas para los empleados.

En la primera cuestión, el debate duró 1 minuto,

el día 2, el debate duró más de 2 horas".

Sí, claro... Sobre el parque de bicicletas...
 
borilunad:

Qué noche tan fructífera he tenido esta noche! Me han lanzado tantas cosas interesantes mientras dormía, ¡por lo que estoy eternamente agradecido! ¡Y tus mañanas eran más sabias que las tardes también!

Un vistazo rápido a todo lo sugerido sigue planteando dudas como siempre, pero por ahora sólo quiero saber si es posible hacer la última expresión con una sola Action(), ya que es bastante extensa:

Me parece que podría ser más rápido. Cierto, no impide comprobar todas las condiciones si sólo se ejecuta la última, o me equivoco, lo que sería mejor para mí.

¿Qué te parece?

No, no funciona así. En primer lugar, debe haber algo después de if(), al menos un punto y coma (es decir, un operador vacío). En segundo lugar, ¿a cuál de los si se pretende que pertenezca su otro operador? Si se refiere sólo a la última (tal y como lo has escrito), entonces la Acción se ejecutará sólo si la condición D es verdadera siempre que A,B y C sean falsas. Siempre es aconsejable colocar llaves para ver claramente la lógica.

 
FAQ:

Gracias. Estoy evitando el uso de DLL y otras cosas pro-MCLogo por ahora.

Aprovecho para responder a Alexey (Meat) que todas las aperturas de posiciones se hacen en una nueva barra, aunque en M1, pero todo lo demás funciona en cada tick. También utilizo muchas funciones necesarias (si compruebo todo en el momento de empezar, el código será realmente pesado). Incluso hay un MathPow(), que intentaré sustituir por el exponente sugerido por Mathematician. Por lo demás, toda la fuerza bruta necesaria para las modificaciones y los cierres. ¿Cómo prescindir de él?

 
Preste atención al seguimiento y recálculo de las órdenes. esto es lo que más suelen hacer los asesores.
 
alsu:

No, no funciona así. En primer lugar, debe haber algo después de if(), al menos un punto y coma (es decir, un operador vacío). En segundo lugar, ¿a cuál de los si se supone que pertenece su otro operador? Si se refiere sólo a la última (tal y como la has escrito), entonces la Acción se ejecutará sólo si la condición D es verdadera siempre que A,B y C sean falsas. Siempre es conveniente colocar llaves para ver claramente la lógica.

Gracias. Pero necesito una sola Action(); ¡Pero no sé cómo! ¿Puedes darme una pista?

 
FAQ:
Preste atención al control y al recuento de pedidos. esto es lo que más suelen hacer los asesores.
Pero son inevitables, de lo contrario habrá errores.
 

En mis programas, si hay muchos ifs, uso esta construcción, poniendo las condiciones que más frecuentemente darán falso en primer lugar:

if (A>B)
{  if (C>=10)
   {  if (D<=5)
      {  if(E=1)
         Action:
      }
   }
}
Y si es necesario comprobar un montón de if-ops, entonces es así:
if (A>B || N<M)
{  if (C>=10 || P<100)
   {  if (D<=5 || R>1)
      {  if(E=1 || S!=0)
         Action:
      }
   }
}