Глобальные переменные

Группа функций, предназначенных для работы с глобальными переменными.

Не следует путать глобальные переменные клиентского терминала с переменными, объявленными на глобальном уровне MQL4-программы.

Глобальные переменные существуют в клиентском терминале 4 недели с момента последнего обращения, после этого автоматически уничтожаются. Обращением к глобальной переменной считается не только установка нового значения, но и чтение значения глобальной переменной.

Глобальные переменные клиентского терминала доступны одновременно из всех MQL4-программ, запущенных на клиентском терминале.

 

GlobalVariableCheck

bool GlobalVariableCheck(string name)

Возвращает значение TRUE, если глобальная переменная существует, иначе возвращает FALSE.
Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError().

Параметры:
name — Имя глобальной переменной.

Пример:

// контроль переменной перед использованием
if(!GlobalVariableCheck("g1"))
  GlobalVariableSet("g1",1);

 

GlobalVariableDel

bool GlobalVariableDel(string name)

Удаляет глобальную переменную. При успешном удалении функция возвращает TRUE, иначе FALSE. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError().

Параметры:

name — Имя глобальной переменной.

Пример:

// удаление глобальной переменной с именем "gvar_1"
GlobalVariableDel("gvar_1");

 

GlobalVariableGet

double GlobalVariableGet(string name)

Возвращает значение существующей глобальной переменной или 0 в случае ошибки. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError().

Параметры:

name — Имя глобальной переменной.

Пример:

double v1=GlobalVariableGet("g1");

//---- проверьте результат запроса функции
if(GetLastError()!=0)
  return(false);

//---- продолжение обработки

 

GlobalVariableName

string GlobalVariableName(int index)

Функция возвращает имя глобальной переменной по порядковому номеру в списке глобальных переменных. Чтобы получить информацию об ошибке необходимо вызвать функцию функцию GetLastError().

Параметры:

index — Порядковый номер в списке глобальных переменных. Должен быть большим или равным 0 и меньшим, чем GlobalVariablesTotal().

Пример:

int var_total=GlobalVariablesTotal();
string name;
for(int i=0;i<var_total;i++)
{
   name=GlobalVariableName(i);
   Print(i,": Имя глобальной переменной - ",name);
}

 

GlobalVariableSet

datetime GlobalVariableSet(string name, double value)

Устанавливает новое значение глобальной переменной. Если переменная не существует, то система создает новую глобальную переменную. При успешном выполнении функция возвращает время последнего доступа, иначе 0. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError().

Параметры:

name — Имя глобальной переменной.
value — Новое числовое значение.

Пример:

//---- попытка устанавливать новое значение

if(GlobalVariableSet("BarsTotal",Bars)==0)
  return(false);

//---- продолжение обработки

 

GlobalVariableSetOnCondition

bool GlobalVariableSetOnCondition(string name, double value, double check_value)

Устанавливает новое значение существующей глобальной переменной, если текущее значение переменной равно значению третьего параметра check_value. Если переменной не существует, функция сгенерирует ошибку ERR_GLOBAL_VARIABLE_NOT_FOUND (4058) и вернет FALSE. При успешном выполнении функция возвращает TRUE, иначе FALSE. Для того, чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError(). Если текущее значение глобальной переменной отличается от check_value, функция вернет FALSE.
Функция обеспечивает атомарный доступ к глобальной переменной, поэтому она может быть использована для организации семафора при взаимодействии нескольких одновременно работающих экспертов в пределах одного клиентского терминала.

Параметры:

name — Имя глобальной переменной.
value — Новое значение.
check_value — Значение для проверки текущего значения глобальной переменной.

Пример:

int OnInit()
{
   //---- создание глобальной переменной
   GlobalVariableSet("DATAFILE_SEM",0);
   //...
}
 
void OnTick()
{
   //---- перед использованием ресурса пытаемся его заблокировать
   while(!IsStopped())
   {
     //---- блокируем
     if(GlobalVariableSetOnCondition("DATAFILE_SEM",1,0)==true) 
        break;

     //---- переменная удалена?
     if(GetLastError()==ERR_GLOBAL_VARIABLE_NOT_FOUND) 
        return(0);

     //---- задержка исполнения в полсекунды
     Sleep(500);
   }
   //---- ресурс заблокирован
   // ... работа с файлом
   //---- разблокируем ресурс
   GlobalVariableSet("file_semaphore",0);
}

 

GlobalVariablesDeleteAll

int GlobalVariablesDeleteAll(string prefix_name=NULL)

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

Параметры:

prefix_name — Префикс имени удаляемых глобальных переменных.

Пример:

Print("Удалено ", GlobalVariablesDeleteAll("test_")," глобальных переменных после тестирования");

 

GlobalVariablesTotal

int GlobalVariablesTotal()

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

Пример:

Print("В клиентском терминале ", GlobalVariablesTotal()," глобальных переменных");