Cualquier pregunta de un PROFI a un SUPER PROFI - 1. - página 43

 
fxsaber:

No lo entiendo. Si algo ha cambiado en la base de datos, la única forma de averiguarlo es compararlo con el estado anterior de la base de datos.

Puede comparar cada elemento de la base de datos correspondiente. O puedes calcular el hash a partir de ellos y comparar los hashes.

El terminal ya conoce este cambio (OnTrade). Por eso quiero saberlo en mi función.

 
fxsaber:

Especialmente relevante para MT4, donde el cambio de paso time_msc es de 1000ms.

Lástima, hace imposible utilizar la opción más sencilla que conozco en este momento.

 
Andrey Khatimlianskii:

El terminal ya conoce este cambio(OnTrade). Por eso quiero saberlo en mi función.

No hay ningún evento de comercio en MT4.

 
fxsaber:

El evento de comercio no está en MT4.

Sólo que no se ha dirigido a MKL. El terminal no actualiza la lista de operaciones en un temporizador.

 
Andrey Khatimlianskii:

Simplemente no se ha conectado a la ACM. El terminal no actualiza la lista de operaciones en un temporizador.

Por lo tanto, sólo a través de la verificación.

 
Andrey Khatimlianskii:

1. ¿Cuál es la forma más económica de saber que la llamada a la función está en el mismo tick que la llamada anterior?

El tiempo (TimeCurrent) puede permanecer igual, el tiempo en ms de SymbolInfoTick, teóricamente también.

Comparar los tiempos de oferta, demanda y ms es bastante costoso.

No sugiero organizar el control en el propio Asesor Experto, quiero conseguir una función universal independiente.


La misma pregunta se refiere a las operaciones comerciales. ¿Cómo sabemos que algo ha cambiado en la lista de órdenes/posiciones (incluyendo los niveles abiertos, SL y TP) desde la última ejecución?

Tendría que colocar alguna bandera en OnTrade (y restablecerla al terminar), es la forma más barata.

Pero, de nuevo, me gustaría una solución universal.


¿Quién tiene alguna idea?

Sí:

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
   int count = 0;
   if ( A ) some_func( count );
   if ( B ) some_func( count );
   if ( C ) some_func( count );
}
//+------------------------------------------------------------------+
void some_func( int& count )
{
   if( count++ > 0 )
      return;
      
   // recalculate only once on each tick
}
//+------------------------------------------------------------------+
 
Koldun Zloy:

De acuerdo:

Gracias.

Andrey Khatimlianskii:

No sugiero la opción de organizar el control en el propio EA, sólo quiero conseguir una función universal independiente.

 
Andrey Khatimlianskii:

Gracias.

Ya que no se ha sugerido aún, te doy una idea de dónde escarbaría, revisa la hora del último PostMessage o algo así, probablemente sea una tontería, no estoy tan versado en Api.

 
Aleksey Mavrin:

Comprobar la hora del último PostMessage o algo así es probablemente una tontería, no sé tanto de Api.

Sí, parece una tontería)

Gracias por intentarlo.

 
Andrey Khatimlianskii:

No es realista sin el control en la propia EA.

No sólo eso, sino que no es necesario. La función solicitada será llamada en el EA, es decir, es esencialmente el mismo control en el EA, sólo que menos invasivo