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

 

borilunad:

Los cálculos más complejos no se ralentizan tanto como las funciones que comprueban los distintos datos necesarios del mercado y las posiciones abiertas en cada tick.

Santa verdad, MarketInfo es uno de los peores problemas de pruebas. Suelo escribir en dos bloques para estos casos si es posible, haciendo consultas "reales" sólo para el modo de comercio real. Esto es especialmente eficaz para los datos no medidos (en el probador), por ejemplo:

int spread;

int init()
{
...

   if(IsTesting())
   {
      spread = MarketInfo(Symbol(),MODE_SPREAD);
   }

...
 
}

int start()
{
...

   if (!IsTesting())
   {
      spread = MarketInfo(Symbol(),MODE_SPREAD);
   }

...
}

También puede enviar en el bloque if(!IsTesting()) todo tipo de RefreshRates(), consultas a MODE_BID y MODE_ASK (sustituyéndolos por Bid y Ask rápidos), etc.

 
alsu:

Santa verdad, MarketInfo es uno de los peores problemas de pruebas. Suelo escribir en dos bloques para estos casos si es posible, haciendo consultas "reales" sólo para el modo de comercio real. Esto es especialmente eficaz para los datos no medidos (en el probador), por ejemplo:

También puede enviar en el bloque if(!IsTesting()) todo tipo de RefreshRates(), consultas a MODE_BID y MODE_ASK (sustituyéndolos por Bid y Ask rápidos), etc.

No me refiero a la función MarketInfo que tengo al principio de la puesta en marcha, sino a las funciones que comprueban diversos parámetros del mercado y las posiciones abiertas que se especifican en las condiciones necesarias para tomar acciones. Además, no necesito MODE_BID y MODE_ASK, porque siempre uso Bid y Ask.
 
pako:

¡Muchas gracias, Pako! Cómo no lo adiviné, ¡es tan fácil! Ahora cenaré y haré lo que pueda y comprobaré la velocidad de paso.

Y esto no lo entiendo. ¿De dónde has sacado esas cifras? Y si te interesan los nombres cortos de las variables, prefiero los cortos a los largos. ¿O qué más? Sí, acabo de darme cuenta de que has añadido dos paréntesis antes de clo y al final después de clo a mi fórmula. Eso no es necesario en absoluto, perturba el cálculo. Pero gracias de todos modos.

<--- 10.444 = 8.087 > 3.908 ¿en qué idioma?

¡Hecho, comprobado, funcionó, pero el resultado no me ha gustado todavía, prácticamente no redujo el tiempo de la carrera! Mañana intentaré hacer todo lo que pueda, quizá entonces haya alguna diferencia.

Pero de todos modos lo principal es que gracias a ti, Pako, Aleksey, Victor y otros he aprendido otro importante método de escritura de código, por lo que estoy extremadamente agradecido.

 

En estos casos utilizo una función.

Por ejemplo:

...
if (Request()) Action;

bool Request()
{
 if (A) return(true);
 if (B) return(true);
 if (C) return(true);
 if (D) return(true);
 return(false);
}
 
borilunad:
Siempre utilizo la oferta y la demanda.

Entonces sí necesita RefreshRates())
 
icas:

En estos casos utilizo una función.

Por ejemplo:

Según tengo entendido, tú tienes una variante para cumplir todas las condiciones, mientras que para mí sólo basta con una, y aunque se cumplan más condiciones, cosa poco probable, porque son muy diferentes, no se llegará a eso, porque una sola condición funcionará. ¡Si me he equivocado, justifícalo! ¡Siempre estoy contento de escuchar algo nuevo! Gracias.
 
alsu:

Entonces sí necesita RefreshRates())
Sí, tengo RefreshRates() al principio, ¿o no es suficiente?
 
borilunad:
Sí, tengo RefreshRates() al principio, ¿o no es suficiente?
Todo depende del tiempo que tarde el cálculo en ejecutarse. Puede haber una situación, cuando durante este período el precio se ha actualizado, y por lo tanto Ask y Bid se vuelven irrelevantes. Por lo tanto, es mejor llamar a RefreshRates() adicionalmente antes de ejecutar las operaciones (más precisamente, antes de calcular el precio para ellas).
 
borilunad:
Sí, tengo RefreshRates() al inicio de Start, ¿o no es suficiente?
No tiene sentido utilizar RefreshRates al inicio de Start, ya que Ask y Bid aún no han quedado obsoletos.
 
alsu:
Todo depende del tiempo que tarden los cálculos en ejecutarse. Puede haber una situación en la que el precio se haya actualizado durante este periodo, y por lo tanto, el Ask y el Bid se vuelven irrelevantes. Por eso es mejor llamar a RefreshRates() adicionalmente antes de ejecutar las operaciones (o mejor dicho, antes de calcular los precios para ellas).

¿Así que necesitas RefreshRates() antes de cada serie de condiciones? Porque yo pensaba que también hay RefreshRates() en cada función que se ejecuta, donde se comprueba si hay errores, para repetir el orden, y eso es suficiente. Entonces probaré a poner más RefreshRates() y a ver qué pasa. Gracias.

¡Y Pap'e Yozh mi agradecimiento también!

Razón de la queja: