GlobalVariableGet() - получение значения глобальной переменной
В прошлых выпусках я рассказал о том, как:
- проверить существование глобальной переменной с помощью функции GlobalVariableCheck();
- установить новое значение глобальной переменной - GlobalVariableSet();
- изменить значение глобальной переменной только в том случае, если старое значение равно определенному значению - функция GlobalVariableSetOnCondition().
В этом же выпуске я расскажу о функции GlobalVariableGet(), с помощью которой можно получить значение глобальной переменной.
double GlobalVariableGet(string name)
Функция GlobalVariableGet() возвращает значение глобальной переменной name или 0 в случае какой-нибудь ошибки:
double gv; gv = GlobalVariableGet("LastTradePrice"); int err = GetLastError(); if (err!=0) Print("GlobalVariableGet(): ошибка ", err);
Прмеров использования функции GlobalVariableGet() можно привести бесконечное количество. Даже в предыдущих наших примерах мы ее уже часто использовали. Например, в нашей функции WaitBeforeTransaction().
Эта функция позволяет Вам выдерживать паузу между торговыми операциями:
//+--------------------------------------------------------------------------------------------------+ //| Фунцкия WaitBeforeTransaction выдерживает паузу Secs секунд | //| между торговыми операциями эксперта (по умолчанию 5 секунд) | //| | //| Возвращает: | //| 1 - если пауза выдержена без ошибок | //| 0 - если эксперт был остановлен | //| -1 - если произошла какая-то ошибка | //+-------------------------------------------------------------------------------------------------+ int WaitBeforeTransaction(int Secs = 5) { // если режим тестирования, то ждать необязательно if (IsTesting()) return(1);
// если глобальная переменная LastTradeTime не существует, // то создать ее if (!GlobalVariableCheck("LastTradeTime")) { // Если произошла какя-то ошибка при вызове функции // GlobalVariableCheck(), выйдем с ошибкой if (GetLastError()!=0) { Print("WaitBeforeTransaction(): ошибка ",GetLastError(), " при проверке глобальной переменной LastTradeTime"); return(-1); }
// глобальная переменная не существует, создадим ее if (GlobalVariableSet("LastTradeTime", 1)==0) { // произошла ошибка при создании глобальной переменной Print("WaitBeforeTransaction(): ошибка ",GetLastError(), " при создании глобальной переменной LastTradeTime"); return(-1); }
// глобальная переменная успешно создана Print("WaitBeforeTransaction(): глобальная переменная ", "LastTradeTime создана"); }
// получим время последней операции datetime LastTradeTime; LastTradeTime = GlobalVariableGet("LastTradeTime");
// если произошла ошибка (равна нулю), то выходим с ошибкой if (LastTradeTime==0) { Print("WaitBeforeTransaction(): ошибка ",GetLastError(), " при чтении глобальной переменной LastTradeTime"); return(-1); }
// ждем Secs секунд while(true) { // если эксперт остановлен, выйдем со значением 0 if (IsStopped()) { Print("WaitBeforeTransaction(): эксперт остановлен. Выходим..."); return(0); }
// если прошло меньше Secs секунд, то ждем if ((LocalTime()-LastTradeTime)<Secs) { // пауза 0.1 секунда Sleep(100); continue; }
// т.к. прошло больше Secs секунд, то попробуем изменить значение // глобальной переменной LastTradeTime на текущее время
// используем функцию GlobalVariableSetOnCondition(), чтобы выявить // ошибку, если уже за время ожидания другой эксперт успел совершить // сделку и изменил значение глобальной переменной if (GlobalVariableSetOnCondition("LastTradeTime", LocalTime(), LastTradeTime)) { // за время ожидания глобальная переменная не изменилась, поэтому // удалось установить ее новое значение // пауза выдержена, обновим котировки и выйдем без ошибки RefreshRates(); return(1); } else { // не удалось изменить значение глобальной переменной, т.к. другой эксперт // успел совершить сделку раньше и установил новое значение переменной // поэтому получим текущее значение глобальное переменной и продолжим ожидание LastTradeTime = GlobalVariableGet("LastTradeTime");
// если произошла ошибка (равна нулю), то выходим с ошибкой if (LastTradeTime==0) { Print("WaitBeforeTransaction(): ошибка ",GetLastError(), " при чтении глобальной переменной LastTradeTime"); return(-1); } } } }
В следующем выпуске я расскажу о том, как можно удалить глобальную переменную - о функции GlobalVariableDel().
Все статьи по теме "Пишем советников для MetaTrader 4".
- Механическая торговая система - миф или реальность?
- С чего начать при написании советника:
- Создаем нового советника - Настраиваем параметры. - Язык MetaQuotes Language 4: