В предыдущей статье мы узнали о функции GlobalVariableSet(). с помощью которой можно присвоить новое значение глобальной переменной.
К счастью, создатели языка MetaQuotes Language 4 являются профессиональными программистами и заранее могут предугадать, что может понадобиться трейдеру при написании экспертов. Я им очень благодарен, что они включили в список функций языка MetaQuotes Language 4 функцию GlobalVariableSetOnCondition().
Давайте же рассмотрим, чем так полезна эта функция.
bool GlobalVariableSetOnCondition(string name, double value, double check_value)
Прежде всего эта функция проверяет, существует ли глобальная переменная с именем name. В документации по MetaQuotes Language 4 написано, что если такой глобальной переменной нет, то функция возвращает false и генерит ошибку ERR_GLOBAL_VARIABLE_NOT_FOUND (4058), которую можно получить с помощью функции GetLastError().
Тем не менее при экспериментах с функцией GlobalVariableSetOnCondition() мне не удалось добиться того, чтобы функция вернула ошибку ERR_GLOBAL_VARIABLE_NOT_FOUND (4058). Почему-то даже в случае отсутствия глобальной переменной функция возвращает false и код ошибки ERR_NO_ERROR (т. е. 0). Вот кусок кода, который я использовал для этой цели:
string name = "MyGlobalVariable"; double value = 1; double check_value = 2; if (GlobalVariableSetOnCondition(name, value, check_value)) { Print("Глобальная переменная ", name, " существует.", " Ее значение изменено с ", check_value, " на ", value); } else { int Err=0; Err = GetLastError(); Print(Err); switch (Err) { case 0: Print("Глобальная переменная ", name," изменена не была", " т. к. ее значение не равно ", check_value); break; case 4058: Print("Глобальной переменной ", name, " не существует"); break; default: Print("Неизвестная ошибка: ", Err); } }
Будем надеяться, что если это баг программы, то в следующих версиях MetaTrader 4 его исправят.
Вернемся к описанию функции GlobalVariableSetOnCondition(). Если же глобальная переменная name существует, то функция не изменит ее текущего значения и вернет false, если текущее значение этой глобальной переменной не равно check_value. Если потом запросить код последней ошибки, то функция GetLastError() вернет ERR_NO_ERROR (т. е. 0), т. к. реально никакой ошибки не было.
Если же текущее значение глобальной переменной name равно значению check_value, то функция GlobalVariableSetOnCondition() присвоит этой глобальной переменной новое значение: value.
В следующей статье будет рассказано о примере использования функции GlobalVariableSetOnCondition().
Есть что сказать? Не стесняйтесь!
Последние статьи:
Видео по теме:
УГОЛОК АДМИНИСТРАТОРА