Temporizador - página 2

 
TheXpert:

Una cosa más... Ustedes no son hermanos, ¿verdad?

Lo que no quiere decir que no lo haya. La misión de cada uno es diferente.

Aquí vamos... ¿Sabemos leer? Muéstrame cómo se hace para los induks.


  1. No lo creo, ni siquiera sé quién es :D
  2. Pues sinceramente no me he encontrado con una tarea así, para mis tareas - cuanto más rápido cuente, mejor.
  3. Lo siento, lo he revisado)). No se ha metido en qué hilos - lo que está pasando. No lo sé, nunca he visto tal cosa. Así que depende de la tarea, realmente, si sólo ejecuto algún script al azar que golpee un indicador.
O, alternativamente, podría meter todos los cálculos y todo en un hilo separado en una dll - pero eso suena como una perversión.
 

Interesting:

... el procesamiento del temporizador no puede ser llamado hasta que el procesamiento del temporizador anterior se haya completado. O para decirlo de forma sencilla, OnTimer() no se ejecutará correctamente hasta que el hilo que debería procesar el temporizador esté ocupado.

Para ilustrar la imposibilidad de iniciar el procesamiento del temporizador por el segundo hilo se puede utilizar este ejemplo (tonto pero claro):

int OnInit()
{
//----------------------------------------------------------------------------//
//Work variables
//----------------------------------------------------------------------------//
EventSetTimer(1);
//----------------------------------------------------------------------------//
return(0);
//----------------------------------------------------------------------------//
}

void OnTimer()
{
//----------------------------------------------------------------------------//
//Work variables
//----------------------------------------------------------------------------//
Print(TimeLocal());
Sleep(2000);
//----------------------------------------------------------------------------//
}
Entonces, ¿resulta que los eventosTimer pueden ser ignorados al igual que los eventosNewTick? ¿Y bajo ciertas condiciones, no pueden colocarse en la cola de eventos del Asesor Experto?
 
Yedelkin:
Entonces, ¿resulta que los eventosde Timer pueden ser ignorados de la misma manera que los eventos deNewTick? ¿Y, bajo ciertas condiciones, puede ser excluido de la cola de eventos del Asesor Experto?
El evento NewTick es una excepción en este caso. No hay controles para otros tipos de eventos. Si los manejadores de eventos se ejecutan más lentamente de lo que la cola de eventos se llena, la cola se desbordará y algunos eventos serán omitidos. En cuanto al ejemplo anterior, sólo confirma que el EA tiene un único hilo de ejecución y que la gestión de los eventos se realiza de forma secuencial, en el orden en que los eventos se ponen en cola.
Документация по MQL5: Программы MQL5 / События клиентского терминала
Документация по MQL5: Программы MQL5 / События клиентского терминала
  • www.mql5.com
Программы MQL5 / События клиентского терминала - Документация по MQL5
 
antt:
El evento NewTick es una excepción en este caso. No hay controles para otros tipos de eventos. Si los manejadores de eventos son más lentos que el llenado de la cola de eventos, la cola se desbordará y algunos eventos serán omitidos. En cuanto al ejemplo anterior, sólo confirma que el EA tiene un único hilo de ejecución y que la gestión de los eventos se realiza de forma secuencial, en el orden en que los eventos se ponen en cola.

Genial, ¡gracias por las explicaciones! Lógicas y comprensibles, no hace falta especular

Interesante, tu pregunta sobre el multithreading de eventos está más o menos contestada. Y hasta he adivinado lo de OnTimer :)

 
Yedelkin:
¿Así que resulta que los eventosde Timer pueden ser ignorados de la misma manera que los eventos deNewTick? ¿Y bajo ciertas condiciones, no se pueden poner en cola en los eventos del Asesor Experto?

Por lo que tengo entendido, es algo así:

1. Todos los eventos se colocan en la misma cola. Si hay un evento NewTick en la cola o tal evento es manejado, entonces NewTick es ignorado y no es puesto en cola.

2. El programador elige qué eventos manejar. Los manejadores para OnTrade, OnTimer y OnTick son básicos y de uso frecuente en los Asesores Expertos.

3. Durante el procesamiento de un evento no se pueden procesar otros.

4. Si la pila de eventos se desborda, los eventos antiguos se eliminan de la cola sin procesarlos.

5. De los tres tipos de eventos anteriores, Trade se generará con menos frecuencia, y NewTick se generará con más frecuencia (pero los ticks descritos anteriormente pueden no estar incluidos en la cola).

6. El manejador más interesante desde este punto de vista es OnChartEvent, que maneja todos los eventos del gráfico + los eventos personalizados.

Y un gran número de estos eventos puede desbordar fácilmente la cola de eventos (en caso de que haya muchos de ellos).

En mi opinión, la única gracia salvadora en esta situación es que los eventos OnChartEvent se generan de forma aleatoria y asíncrona.

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика - Документация по MQL5
 

Yedelkin:

Interesante, tu pregunta sobre el manejo de eventos multihilo parece estar respondida. Y hasta he adivinado lo de OnTimer :)

En principio, no tenía dudas sobre un único hilo, más aún porque el código del propio Asesor Experto se ejecuta en un único hilo.

Y lo que he descrito es una especie de sueño sobre el futuro (digamos, sobre MT6), cuando habrá multihilo en MT (al menos hasta que el flujo de eventos no se separe por alguna razón).

Originalmente, habría separado todos los eventos ChartEvent en un hilo separado, pero los desarrolladores saben más...

 

¿Existe alguna forma de hacer que el EA genere eventos del temporizador a una hora determinada? Por ejemplo, al comienzo del último minuto de la hora o del día.

 
Yedelkin:

¿Existe alguna forma de hacer que el EA genere eventos del temporizador a una hora determinada? Por ejemplo, al comienzo del último minuto de la hora o del día.

Claro que sí.
 
TheXpert:
Claro que sí.
¿Cómo es (el método), si no es un secreto?
 
Yedelkin:
¿Qué aspecto tiene (el método), si no es un secreto?

Utilizando el gestor de temporizadores. Quería escribir un artículo, pero de alguna manera me desvié. Aunque no parezca un artículo.

Un tiempo específico no funcionará debido a la naturaleza de un solo hilo del código y la cola de eventos, pero con un error promedio de menos de un segundo (el máximo está limitado por el tiempo máximo de ejecución del evento por el código).

Además, sólo hay un temporizador.

¿Lo hago?

Razón de la queja: