Borrar variables globales
Si es necesario, un programa MQL puede eliminar una variable global o un grupo de ellas que se ha convertido en redundante. La lista de variables globales consume algunos recursos del ordenador, y un buen estilo de programación sugiere que se liberen recursos siempre que sea posible.
bool GlobalVariableDel(const string name)
La función elimina la variable global 'nombre'. En caso de éxito, la función devuelve true; en caso contrario devuelve false.
int GlobalVariablesDeleteAll(const string prefix = NULL, datetime limit = 0)
La función borra las variables globales con el prefijo especificado en el nombre y con un tiempo de uso anterior al valor del parámetro limit.
Si se especifica el prefijo NULL (por defecto) o una cadena vacía, entonces todas las variables globales que también coincidan con el criterio de borrado por fecha (si está establecido) entran en el criterio de borrado.
Si el parámetro limit es cero (por defecto), se eliminan las variables globales con cualquier fecha que tenga en cuenta el prefijo.
Si se especifican ambos parámetros, se eliminan las variables globales que coincidan tanto con el prefijo como con el criterio temporal.
Cuidado: llamar a GlobalVariablesDeleteAll sin parámetros eliminará todas las variables.
La función devuelve el número de variables eliminadas.
Consideremos el script GlobalsDelete.mq5, que explota dos nuevas características.
void OnStart()
|
Al principio, se intenta eliminar las variables globales inexistentes por su nombre y prefijo exactos. Ninguno de los dos tiene efecto sobre las variables existentes.
Llamar a GlobalVariablesDeleteAll con un filtro de tiempo en el pasado (hace más de 4 semanas) también tiene un resultado nulo, porque el terminal borra dichas variables antiguas automáticamente (tales variables no pueden existir).
PRTF(GlobalVariablesDeleteAll(NULL, D'2021.01.01')); |
A continuación, creamos una variable con el nombre «abracadabra» (si no existía) y la borramos inmediatamente. Estas llamadas deberían tener éxito.
PRTF(GlobalVariableSet(abracadabra, 0));
|
Por último, eliminemos las variables que empiezan por el prefijo «GlobalsRun»: deberían haber sido creadas por los scripts de prueba de las dos secciones anteriores sobre nombres de archivos (respectivamente, «GlobalsRunCount.mq5» y «GlobalsRunCheck.mq5»).
PRTF(GlobalVariablesDeleteAll("GlobalsRun"));
|
El script debería mostrar en el registro algo parecido al siguiente conjunto de cadenas (algunos indicadores dependen de las condiciones externas y de la hora de inicio).
GlobalVariableDel(#123%)=false / GLOBALVARIABLE_NOT_FOUND(4501)
|
Al final, imprimimos el número total de variables globales restantes (en este caso, obtenemos 0, es decir, no hay variables). Puede diferir para usted si las variables globales fueron creadas por otros programas MQL o por el usuario.