Проверка существования и времени последнего действия

Как мы видели в предыдущем разделе, проверить существование глобальной переменной можно, попытавшись прочитать её значение: если это не приведет к появлению кода ошибки в _LastError, значит, глобальная переменная существует, причем мы уже получили её величину и можем использовать в алгоритме. Однако, если в каких-то условиях требуется лишь проверить существование, но не считывать глобальную переменную, более удобно применить другую функцию, специально предназначенную для этого: GlobalVariableCheck.

Существует и еще один вариант проверки — с помощью функции GlobalVariableTime. Как ясно из её названия, она позволяет узнать время последнего использования переменной. Но если переменной не существует, то и время её использования отсутствует, то есть равно 0.

bool GlobalVariableCheck(const string name)

Функция проверяет существование глобальной переменной с указанным именем и возвращает результат: true (переменная есть) или false (переменной нет).

datetime GlobalVariableTime(const string name)

Функция возвращает время последнего использования глобальной переменной с указанным именем. Фактом использования может быть модификация или чтение значения переменной.

Проверка переменной на существование с помощью GlobalVariableCheck или получение её времени посредством GlobalVariableTime не меняют времени использования.

В скрипте GlobalsRunCheck.mq5 мы слегка дополним код из GlobalsRunCount.mq5, чтобы в самом начале функции OnStart проверять наличие переменной и время её использования.

void OnStart()
{
   PRTF(GlobalVariableCheck(gv));
   PRTF(GlobalVariableTime(gv));
   ...

Далее идет код без изменений. Но обратите внимание, что переменная gv, определенная через __FILE__, на этот раз будет содержать новое имя скрипта "GlobalsRunCheck.mq5" в качестве имени глобальной переменной (т.е. каждый скрипт у нас имеет свой глобальный счетчик).

Все запуски кроме самого первого покажут значение true от функции GlobalVariableCheck (переменная существует), а время переменной — с предыдущего запуска. Вот пример журнала:

GlobalVariableCheck(gv)=false / ok
GlobalVariableTime(gv)=1970.01.01 00:00:00 / GLOBALVARIABLE_NOT_FOUND(4501)
GlobalVariableGet(gv)=0.0 / GLOBALVARIABLE_NOT_FOUND(4501)
GlobalVariableSet(gv,count)=2021.08.29 16:59:35 / ok
This script run count: 1
GlobalVariableCheck(gv)=true / ok
GlobalVariableTime(gv)=2021.08.29 16:59:35 / ok
GlobalVariableGet(gv)=1.0 / ok
GlobalVariableSet(gv,count)=2021.08.29 16:59:45 / ok
This script run count: 2
GlobalVariableCheck(gv)=true / ok
GlobalVariableTime(gv)=2021.08.29 16:59:45 / ok
GlobalVariableGet(gv)=2.0 / ok
GlobalVariableSet(gv,count)=2021.08.29 16:59:56 / ok
This script run count: 3