Удаление глобальных переменных
При необходимости MQL-программа может удалить ставшую ненужной глобальную переменную или их группу. Список глобальных переменных потребляет некоторые ресурсы компьютера, а хороший стиль программирования предполагает, что ресурсы следует по возможности освобождать.
bool GlobalVariableDel(const string name)
Функция удаляет глобальную переменную с именем name. При успешном выполнении функция возвращает true, иначе — false.
int GlobalVariablesDeleteAll(const string prefix = NULL, datetime limit = 0)
Функция удаляет глобальные переменные с указанным префиксом в имени и более старым временем использования, чем значение в параметре limit.
Если указан префикс NULL (по умолчанию) или пустая строка, то под критерий удаления попадают все глобальные переменные, соответствующие также и критерию удаления по дате (если он задан).
Если параметр limit равен нулю (по умолчанию), то удаляются глобальные переменные с любой датой, с учетом префикса.
Если указаны оба параметра, то удаляются глобальные переменные, соответствующие одновременно и префиксу, и критерию по времени.
Будьте осторожны: вызов GlobalVariablesDeleteAll без параметров приведет к удалению всех переменных.
Функция возвращает количество удаленных переменных.
Рассмотрим скрипт GlobalsDelete.mq5, эксплуатирующий две новых функции.
void OnStart()
|
В начале делается попытка удалить несуществующие глобальные переменные по точному имени и префиксу. Обе не оказывают эффекта на существующие переменные.
Вызов GlobalVariablesDeleteAll с фильтром по времени в прошлом (больше 4 недель назад) также имеет нулевой результат, потому что столь "древние" переменные терминал удаляет сам автоматически (такие переменные не могут существовать).
PRTF(GlobalVariablesDeleteAll(NULL, D'2021.01.01')); |
Далее для тестирования создается переменная с именем "abracadabra" (если её не было) и тут же удаляется. Эти вызовы должны закончиться успешно.
PRTF(GlobalVariableSet(abracadabra, 0));
|
Наконец, удалим переменные, начинающиеся с префикса "GlobalsRun": они должны были быть созданы тестовыми скриптами из двух предыдущих разделов по именам файлов (соответственно, "GlobalsRunCount.mq5" и "GlobalsRunCheck.mq5").
PRTF(GlobalVariablesDeleteAll("GlobalsRun"));
|
Скрипт должен вывести в журнал примерно следующее (некоторые показатели зависят от внешних условий и времени запуска).
GlobalVariableDel(#123%)=false / GLOBALVARIABLE_NOT_FOUND(4501)
|
В конце мы вывели общее количество оставшихся глобальных переменных (в данном случае получили 0, то есть переменных нет). Оно может у вас отличаться, если глобальные переменные создавались другими MQL-программами или пользователем.