В предыдущей статье мы узнали о функции GlobalVariableSetOnCondition().
В этом же выпуске мы рассмотрим пример ее практического использования.
//+----------------------------------------------------------------------------------------+ //| int StartTrading() | //| | //| Функция занимает торговый поток | //| Функция возвращает: | //| 0 - если можно торговать | //| 1 - если работа эксперта была остановлена | //| 2 - если торговля экспертов запрещена на уровне настроек| //| клиентского терминала | //+----------------------------------------------------------------------------------------+ #define GLOB_VAR_NAME "TradeIsAllowed"
int StartTrading() { // если советник работает в режиме тестирования, то просто выйдем if (IsTesting()) return(0); int LastError; while (!IsStopped()) { // Если торговля экспертов запрещена на уровне настроек // клиентского терминала, то выйдем и вернем 2 if (!IsExpertEnabled()) return(2); // проверим, существует ли глобальная переменная if (GlobalVariableCheck(GLOB_VAR_NAME)) break;
// если произошла ошибка при проверке глобальной переменной, // то сообщим об этом в логах и выждем 0.1 секунды LastError = GetLastError(); if (LastError!=0) { Print("StartTrading(): ошибка ", LastError, " при проверке наличия глобальной переменной ", GLOB_VAR_NAME); Sleep(100); continue; } // глобальная переменная не существует - создадим ее if (GlobalVariableSet(GLOB_VAR_NAME, 0)>0) break; // произошла ошибка при создании переменной - запишем в лог LastError = GetLastError(); Print("StartTrading(): ошибка ", LastError, " при создании глобальной переменной ", GLOB_VAR_NAME); Sleep(100); } // глобальная переменная существует или же эксперт был остановлен // В цикле проверяем, как изменилась ситуация while (!IsStopped()) { // Если торговля экспертов запрещена на уровне настроек // клиентского терминала, то выйдем и вернем 2 if (!IsExpertEnabled()) return(2); // Если удалось изменить значение глобальной переменной, то обновим данные // о текущих курсах и вернем 0 if (GlobalVariableSetOnCondition(GLOB_VAR_NAME, 1, 0)) { RefreshRates(); return(0); } // Если дошли до момента, то ситуация не изменилась // Поэтому делаем паузу в 0.1 секунду Sleep(100); } // Т. к. вышли из цикла, то работа эксперта была остановлена // Вернем 1 return(1); } //+----------------------------------------------------------------------------------------+ //| int StopTrading() | //| | //| Функция разрешает торговать следующему эксперту | //| Функция возвращает: | //| 0 - если другому эксперту можно торговать | //| 1 - если работа эксперта была остановлена | //| 2 - если торговля экспертов запрещена на уровне настроек| //| клиентского терминала | //+----------------------------------------------------------------------------------------+ #define GLOB_VAR_NAME "TradeIsAllowed" int StopTrading() { // если советник работает в режиме тестирования, то просто выйдем if (IsTesting()) return(0); int LastError; while (!IsStopped()) { // Если торговля экспертов запрещена на уровне настроек // клиентского терминала, то выйдем и вернем 2 if (!IsExpertEnabled()) return(2); // Если удалось изменить значение глобальной переменной, то обновим данные // о текущих курсах и вернем 0 if (GlobalVariableSet(GLOB_VAR_NAME, 0)>0) { return(0); } // при сбросе значения глобальной переменной произошла какая-то ошибка LastError = GetLastError(); Print("StopTrading(): ошибка ", LastError, " при сбросе значения глобальной переменной ", GLOB_VAR_NAME); // делаем паузу в 0.1 секунду Sleep(100); } // Т. к. вышли из цикла, то работа эксперта была остановлена // Вернем 1 return(1); }
О том, где и как используются эти две функции мы расскажем в следующих статьях.
Есть что сказать? Не стесняйтесь!
Последние статьи:
Видео по теме:
УГОЛОК АДМИНИСТРАТОРА