- Diseño de programas MQL de varios tipos
- Hilos
- Visión general de las funciones de gestión de eventos
- Funciones de inicio y parada de programas de varios tipos
- Eventos de referencia de indicadores y Asesores Expertos: OnInit y OnDeinit
- Función principal de scripts y servicios: OnStart
- Eliminación programática de Asesores Expertos y scripts: ExpertRemove
Hilos
De forma simplificada, un programa puede representarse como una secuencia de sentencias que un desarrollador ha generado para un ordenador. El principal ejecutor de sentencias en un ordenador es la unidad central de procesamiento. Los ordenadores modernos suelen estar equipados con procesadores de varios núcleos, lo que equivale a tener varios procesadores. Sin embargo, el número de programas que un usuario puede querer ejecutar en paralelo es prácticamente ilimitado. Así, el número de programas es siempre varias veces superior al de núcleos/procesadores disponibles. Por eso, cada núcleo divide en realidad su tiempo de trabajo entre varios programas diferentes: asignará 1 milisegundo para ejecutar las sentencias de un programa, luego 1 milisegundo para las sentencias de otro, luego para las de terceros, y así sucesivamente, en círculo. Como la conmutación se produce muy rápidamente, el usuario no lo nota, ya que parece que todos los programas se ejecutan en paralelo y simultáneamente.
Para que el procesador pueda suspender la ejecución de las sentencias de un programa y luego reanudar su trabajo desde el lugar en el que lo dejó (después de haber pasado tranquilamente a las sentencias de otros programas «paralelos»), debe ser capaz de guardar y restaurar de algún modo el estado intermedio de cada programa: la sentencia actual, las variables, los posibles archivos abiertos, las conexiones de red, etc. Todo este conjunto de recursos y datos que un programa necesita para ejecutarse con normalidad, junto con su posición actual en la secuencia de sentencias, se denomina contexto de ejecución del programa. El sistema operativo, de hecho, está diseñado para crear dichos contextos para cada programa a petición del usuario (o de otros programas). Cada uno de estos contextos activos se denomina hilo. Muchos programas requieren muchos hilos para sí mismos porque su funcionalidad implica mantener varias actividades en paralelo. MetaTrader 5 también requiere múltiples hilos para cargar las cotizaciones para múltiples símbolos, trazar gráficos y responder a las acciones del usuario. Además, también se asignan hilos independientes a los programas MQL.
El entorno de ejecución de programas MQL no asigna más de un hilo a cada programa. Los Asesores Expertos, scripts y servicios reciben estrictamente un hilo cada uno. En cuanto a los indicadores, se asigna un flujo para todos los indicadores que trabajan con un instrumento financiero. Además, el mismo hilo se encarga de mostrar los gráficos del símbolo correspondiente, por lo que no es recomendable ocuparlo con cálculos pesados. De lo contrario, la interfaz de usuario dejará de responder: las acciones del usuario se procesarán con retraso, o la ventana dejará de responder incluso. Los hilos de todos los demás tipos de programas MQL no están vinculados a una interfaz y, por lo tanto, pueden cargar el procesador con cualquier tarea compleja.
Una de las propiedades importantes de un hilo se deriva de su definición y finalidad: sólo admite la ejecución secuencial de sentencias especificadas una tras otra. Sólo se ejecuta una sentencia en un hilo en cada momento. Si se escribe un bucle infinito en el programa, el hilo se atascará en esta instrucción y nunca llegará a las instrucciones por debajo de ella. Los cálculos largos también pueden crear el efecto de un bucle sin fin: cargarán el procesador e impedirán que se realicen otras acciones, cuyos resultados puede que el usuario esté esperando. Por eso, la eficacia de los cálculos en los indicadores es importante para el buen funcionamiento de la interfaz gráfica.
No obstante, en otros tipos de programas MQL, se debe prestar atención a la disposición de los hilos. En las siguientes secciones nos familiarizaremos con las funciones especiales de manejo de eventos que son los puntos de entrada a los programas MQL. Un modelo de un solo hilo significa que, durante el procesamiento de un evento, el programa es inmune a otros eventos que potencialmente podrían ocurrir al mismo tiempo. Por lo tanto, el terminal organiza una cola de eventos para cada programa. Abordaremos este punto con más detalle en la próxima sección.
Para experimentar los efectos del hilo único en la práctica, veremos un ejemplo sencillo en la sección Limitaciones y ventajas de los indicadores (IndBarIndex.mq5). Hemos elegido indicadores para este fin porque no sólo comparten un hilo para cada símbolo, sino que además muestran los resultados directamente en el gráfico, lo que hace que el problema potencial sea más evidente.