Activar y desactivar temporizador: EventSetTimer/EventKillTimer

MQL5 permite activar o desactivar el temporizador estándar para realizar cualquier acción programada. Existen dos funciones para ello: EventSetTimer y EventKillTimer.

bool EventSetTimer(int seconds)

La función indica al terminal cliente que para este Asesor Experto o indicador es necesario generar eventos del temporizador con la frecuencia especificada, que se establece en segundos (parámetro seconds).

La función devuelve un signo de éxito (true) o de error (false). El código de error puede obtenerse en _LastError.

Para poder procesar eventos de temporizador, un Asesor Experto o un indicador debe tener la función OnTimer en su código. El primer evento del temporizador no se producirá inmediatamente después de la llamada de EventSetTimer, sino después de seconds segundos.

Para cada Asesor Experto o indicador que llama a la función EventSetTimer, crea su propio temporizador dedicado. El programa recibirá eventos sólo de él. Los temporizadores de los distintos programas funcionan de forma independiente.

Cada programa MQL interactivo colocado en un gráfico tiene una cola de eventos independiente en la que se añaden los eventos que se reciben para él. Si ya hay un evento en la cola OnTimer o que está en estado de procesamiento, el nuevo evento OnTimer no se pone en cola.

Si el temporizador ya no es necesario, debe desactivarse con la función EventKillTimer.

void EventKillTimer(void)

La función detiene el temporizador activado anteriormente por la función EventSetTimer (o por EventSetMillisecondTimer, de la que hablaremos a continuación). La función también puede llamarse desde el manejador OnTimer. Así, en concreto, es posible realizar una acción única retardada.

La llamada de EventKillTimer en los indicadores no despeja la cola, por lo que después de ella se puede obtener el último evento OnTimer residual.

Cuando el programa MQL termina, el temporizador es forzosamente destruido si fue creado pero no desactivado por la función EventKillTimer.

Cada programa sólo puede establecer un temporizador. Por lo tanto, si desea llamar a diferentes partes del algoritmo en diferentes intervalos, debe habilitar un temporizador con un período que sea el mínimo común divisor de los períodos requeridos (en el caso límite, con un período mínimo de 1 segundo), y en el manejador OnTimer realizar un seguimiento independiente de períodos mayores. Veremos un ejemplo de este enfoque en la próxima sección.

MQL5 también permite crear temporizadores con un periodo inferior a 1 segundo: existe una función para ello, EventSetMillisecondTimer.