Variables globales del terminal cliente
En el capítulo anterior estudiamos las funciones de MQL5 que trabajan con archivos. Ofrecen opciones amplias y flexibles para escribir y leer datos arbitrarios. Sin embargo, a veces un programa MQL necesita una forma más sencilla de guardar y restaurar el estado de un atributo entre ejecuciones.
Por ejemplo, queremos calcular ciertas estadísticas, como por ejemplo, cuántas veces se lanzó el programa, cuántas instancias del mismo se ejecutan en paralelo en diferentes gráficos, etc. Es imposible acumular esta información dentro del propio programa. Debe haber algún tipo de almacenamiento externo a largo plazo, pero sería costoso crear un archivo para ello, aunque también es factible.
Muchos programas están diseñados para interactuar entre sí, es decir, deben intercambiar información de alguna manera. Si hablamos de integración con un programa externo al terminal, o de transferir una gran cantidad de datos, entonces es realmente difícil hacerlo sin utilizar archivos. Sin embargo, cuando no hay suficientes datos para enviar, y todos los programas están escritos en MQL5 y se ejecutan dentro de MetaTrader 5, el uso de archivos parece redundante. El terminal ofrece una tecnología más sencilla para este caso: las variables globales.
Una variable global es una ubicación con nombre en la memoria compartida del terminal. Se puede crear, modificar o eliminar por cualquier programa MQL, pero no le pertenecerá en exclusiva, y está disponible para el resto de programas MQL. El nombre de una variable global es cualquier cadena única (entre todas las variables) de no más de 63 caracteres. Esta cadena no tiene que cumplir los requisitos para los identificadores de variables en MQL5, ya que las variables globales del terminal no son variables en el sentido habitual. El programador no las define en el código fuente según la sintaxis que aprendimos en Variables, no son parte integrante del programa MQL, y cualquier acción con ellos se realiza únicamente llamando a una de las funciones especiales que describiremos en este capítulo.
Las variables globales sólo permiten almacenar valores del tipo double. Si es necesario, puede empaquetar o convertir valores de otros tipos en double o utilizar parte del nombre de la variable (siguiendo un determinado prefijo, por ejemplo) para almacenar cadenas.
Mientras se ejecuta el terminal, las variables globales se almacenan en la RAM y están disponibles casi al instante: la única sobrecarga está asociada a las llamadas a funciones. Esto da, definitivamente, una ventaja a las variables globales frente al uso de archivos, ya que cuando se trata de estos últimos, la obtención de un manejador es un proceso relativamente lento, y el propio manejador consume algunos recursos adicionales.
Al final de la sesión del terminal, las variables globales se descargan en un archivo especial (gvariables.dat) y se restauran desde él la próxima vez que se ejecute el terminal.
Una determinada variable global es destruida automáticamente por el terminal si no ha sido reclamada en un plazo de 4 semanas. Este comportamiento se basa en realizar el seguimiento y almacenar la hora del último uso de una variable, donde uso se refiere a establecer un nuevo valor o leer uno antiguo (pero no comprobar la existencia u obtener la hora del último uso).
Tenga en cuenta que las variables globales no están vinculadas a una cuenta, perfil o cualquier otra característica del entorno de trading. Por lo tanto, si se supone que deben almacenar algo relacionado con el entorno (por ejemplo, algunos límites generales para una cuenta concreta), los nombres de las variables deben construirse teniendo en cuenta todos los factores que afectan al algoritmo y a la toma de decisiones. Para distinguir entre las variables globales de varias instancias del mismo Asesor Experto (EA), es posible que tenga que añadir al nombre un símbolo de trabajo, un marco temporal o un «número mágico» de la configuración del EA.
Además de los programas MQL, las variables globales también puede crearlas manualmente el usuario. La lista de variables globales existentes, así como los medios para su gestión interactiva, se encuentran en el cuadro de diálogo abierto en el terminal mediante el comando Herramientas -> Variables globales (F3).
Utilizando los botones correspondientes podrá Añadir y Eliminar variables globales, y haciendo doble clic en las columnas Variable o Significado podrá editar el nombre o el valor de una variable concreta. Las siguientes teclas de acceso rápido funcionan desde el teclado: F2 para editar el nombre, F3 para editar el valor, Ins para añadir una nueva variable, Supr para borrar la variable seleccionada.
Un poco más adelante estudiaremos dos tipos principales de programas MQL: Asesores Expertos e Indicadores. Su característica especial es la posibilidad de ejecutarse en el comprobador, donde también funcionan las funciones para variables globales. Sin embargo, las variables globales son creadas, almacenadas y gestionadas por el agente comprobador en el probador. En otras palabras, las listas de variables globales terminales no están disponibles en el comprobador, y aquellas variables que son creadas por el programa bajo prueba pertenecen a un agente específico, y su tiempo de vida está limitado a una pasada de prueba. Es decir, las variables globales del agente no son visibles desde otros agentes y serán eliminadas al final de la ejecución de la prueba. En concreto, si el EA se optimiza en varios agentes, puede manipular variables globales para «comunicarse» con los indicadores que utiliza en el contexto del mismo agente ya que se ejecutan allí conjuntamente, pero en agentes paralelos, otras copias del EA formarán sus propias listas de variables.
El intercambio de datos entre programas MQL utilizando variables globales no es la única forma disponible, y no siempre es la más adecuada. En concreto, los EA y los indicadores son tipos interactivos de programas MQL que pueden generar y aceptar eventos en gráficos. Puede pasar varios tipos de información en los parámetros de los eventos. Además, se pueden preparar arrays de datos calculados y proporcionarlas a otros programas MQL en forma de búferes indicadores. Los programas MQL ubicados en gráficos pueden utilizar objetos gráficos de la IU para transferir y almacenar información.
Desde el punto de vista técnico, el número máximo de variables globales sólo está limitado por los recursos del sistema operativo. Sin embargo, para un gran número de elementos, se recomienda utilizar medios más adecuados: archivos o bases de datos.