Procesamiento de eventos

En el lenguaje MQL5 se contempla el procesamiento de ciertos eventos predeterminados. Las funciones para procesar estos eventos deben ser definidas en el programa MQL5: el nombre de la función, el tipo de función retornada, los componentes de los parámetros (si los hay) y sus tipos deberán corresponderse estrictamente con la descripción de la función-manejador del evento.

Dependiendo precisamente del tipo del valor retornado y los tipos de los parámetros, el manejador de eventos del terminal del cliente identifica las funciones que procesan este u otro evento. Si para la función correspondiente se han indicado otros parámetros que no correspondan a las descripciones detalladas más abajo, o se ha indicado otro tipo de valor retornado, esta función no se usará para procesar el evento.

Función

Descripción

OnStart

Se llama en un script al suceder el evento Start para la ejecución de las acciones implementadas en el script

OnInit

Se llama en los indicadores y expertos al suceder el evento Init para inicializar un programa MQL5 en marcha

OnDeinit

Se llama en los indicadores y expertos al suceder el evento Deinit para desinicializar un programa MQL5 en marcha

OnTick

Se llama en los expertos al suceder el evento NewTick para el procesamiento de una nueva cotización

OnCalculate

Se llama en los indicadores al suceder el evento Calculate para el procesamiento del cambio en los datos de precio

OnTimer

Se llama en los indicadores y expertos al suceder el evento periódico Timer, generado por el terminal con el intervalo de precio establecido

OnTrade

Se llama en los expertos al suceder el evento Trade, generado al finalizar una operación comercial en el servidor comercial

OnTradeTransaction

Se llama en los expertos al suceder el evento TradeTransaction para el procesamiento de los resultados de la ejecución de una solicitud comercial

OnBookEvent

Se llama en los expertos al suceder el evento BookEvent para el procesamiento de los cambios en la profundidad de mercado

OnChartEvent

Se llama en los indicadores y expertos al suceder el evento ChartEvent para el procesamiento de los cambios del gráfico provocados por las acciones del usario o el funcionamiento de los programas MQL5

OnTester

Se llama en los expertos al suceder el evento Tester para el procesamiento de las acciones necesarias al finalizar la simulación

OnTesterInit

Se llama en los expertos al suceder el evento TesterInit para el procesamiento de las acciones necesarias antes de comenzar la optimización

OnTesterDeinit

Se llama en los expertos al suceder el evento TesterDeinit para la ejecución de las acciones necesarias al finalizar la optimización del experto

OnTesterPass

Se llama en los expertos al suceder el evento TesterPass para el procesamiento de un nuevo frame de datos durante la optimización del experto

El terminal de cliente envía los eventos surgidos a los gráficos abiertos correspondientes. Asimismo, los eventos pueden ser generados por los gráficos(eventos de gráfico) o bien por programas mql5 (eventos personalizados). La generación de eventos de creación y eliminación de objetos gráficos se puede activar y desactivar estableciendo las propiedades del gráfico CHART_EVENT_OBJECT_CREATE y CHART_EVENT_OBJECT_DELETE. Todos los programas mql5 y todos los gráficos tienen su propia cola de eventos, donde se van colocando los eventos que suceden nuevamente.

El programa solo recibe los eventos del gráfico en el que está iniciado. Todos los eventos se procesan uno tras otro según su orden de llegada. Si en la cola ya hay un evento NewTick o bien este evento está siendo procesado, el nuevo evento NewTick no se pondrá en la cola del programa mql5. De manera análoga, si en la cola del programa mql5 ya se encuentra el evento ChartEvent o tal evento está siendo procesado, el nuevo evento de este tipo no se colocará en la cola. El procesamiento de los eventos del temporizador se realiza según el mismo esquema, si en la cola se encuentra o ya se está procesando el evento Timer, el nuevo evento del temporizador no se pondrá en la cola.

Las colas de eventos tienen limitaciones, aunque también tamaño suficiente, por eso es poco probable que un programa que se haya escrito correctamente tenga sobrecarga en la cola. Al sobrecargarse la cola, los nuevos eventos se descartan sin ponerse a la misma.

No se recomienda en ningún caso usar ciclos infinitos para el procesamiento de eventos. La única excepción a esta regla pueden ser los scripts que procesan un solo elemento Start.

Las bibliotecas no procesan ningún evento.