Получение списка глобальных переменных

Довольно часто MQL-программе требуется просмотреть существующие глобальные переменные и выбрать из них подходящие по некоторому критерию. Например, если программа использует часть имени переменной для хранения текстовой информации, то заранее известен лишь префикс, предназначенный для идентификаций "своей" переменной, а "полезная нагрузка", пристыкованная к префиксу, не дает возможности искать переменную по точному имени.

MQL5 API имеет две функции, которые позволяют организовать перебор глобальных переменных.

int GlobalVariablesTotal()

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

string GlobalVariableName(int index)

Функция возвращает имя глобальной переменной по порядковому номеру в списке глобальных переменных. Параметр index с номером запрашиваемой переменной должен находиться в диапазоне от 0 до GlobalVariablesTotal() - 1.

В случае ошибки функция вернет NULL, а код ошибки можно получить из служебной переменной _LastError или функции GetLastError.

Проверим эту пару функций с помощью скрипта GlobalsList.mq5.

void OnStart()
{
   PRTF(GlobalVariableName(1000000));
   int n = PRTF(GlobalVariablesTotal());
   for(int i = 0i < n; ++i)
   {
      const string name = GlobalVariableName(i);
      PrintFormat("%d %s=%f"inameGlobalVariableGet(name));
   }
}

В первой строке намеренно запрашивается имя переменной с большим номером, которой, скорее всего, не существует, что должно вызвать ошибку. Далее производится запрос реального количества переменных и цикл по всем из них, с выводом имени и значения. В журнал ниже попали переменные, созданные предыдущими тестовыми скриптами, и одна сторонняя.

GlobalVariableName(1000000)= / GLOBALVARIABLE_NOT_FOUND(4501)
GlobalVariablesTotal()=3 / ok
0 GlobalsRunCheck.mq5=3.000000
1 GlobalsRunCount.mq5=4.000000
2 abracadabra=0.000000

Порядок, в котором терминал "отдает" переменные по индексу, не определен.