MetaTrader Build 3802 ошибка установки параметров эксперта

 
Возникает ситуация когда эксперт что-то печатает в журнал или находится во сне. Так вот что происходит. Вы входите в меню изменения параметров эксперта. Меняете параметры. Нажимаете клавишу сохранить. И вуаля. Вы в полной уверенности что работаете с новыми параметрами, а нет. Параметры не сохраняются. Хотя они нужны для остановки того же слипа или цикла. Помогает только абнормальное удаление советника и загрузка его снова.  
 
Aleksandr Dziuba:
Возникает ситуация когда эксперт что-то печатает в журнал или находится во сне. Так вот что происходит. Вы входите в меню изменения параметров эксперта. Меняете параметры. Нажимаете клавишу сохранить. И вуаля. Вы в полной уверенности что работаете с новыми параметрами, а нет. Параметры не сохраняются. Хотя они нужны для остановки того же слипа или цикла. Помогает только абнормальное удаление советника и загрузка его снова.  

Возможно, в OnInit() работает беспрерывно цикл while()

 
Vitaly Muzichenko #:

Возможно, в OnInit() работает беспрерывно цикл while()

Нет. Засыпание советника не дает. 

        Sleep(buy_slep_time * 1000);

Ни какие события советник не будят. 
 Как я делаю. Вызываю параметры советника. Изменяю. Сохраняю в файл. Абортирую советник. Запускаю советник с новыми параметрами. 

 
Aleksandr Dziuba #:

Нет. Засыпание советника не дает. 

Ни какие события советник не будят. 
 Как я делаю. Вызываю параметры советника. Изменяю. Сохраняю в файл. Абортирую советник. Запускаю советник с новыми параметрами. 

В цикле есть проверка на IsStopped()?

 
Slava #:

В цикле есть проверка на IsStopped()?

У меня нет циклов в oninit. Он Oninit не вызывает потому что работает Sleep.

Сделал себе небольшую замену слипа и обработал событие по таймеру. Советник разморозил.

//+------------------------------------------------------------------+
// Секция сна
//+------------------------------------------------------------------+
struct _sleep_struct
  {
   datetime          _end_time;
   string            _id_sleep;
  };
_sleep_struct _sleepbuffer[];
//+------------------------------------------------------------------+
//| Установка таймера сна                                            |
//+------------------------------------------------------------------+
void  _Sleep(string id, datetime countsec)
  {
   if(ArrayRange(_sleepbuffer,0) > 0)
     {
      for(int i=0; i<ArrayRange(_sleepbuffer,0); i++)
        {
         if(_sleepbuffer[i]._id_sleep==id)
           {
            _sleepbuffer[i]._end_time=TimeTradeServer()+countsec;
            return;
           }
        }
     }
// добавили новый таймер
   int _is = ArrayRange(_sleepbuffer,0);
   ArrayResize(_sleepbuffer,_is+1,3);
   _sleepbuffer[_is]._id_sleep=id;
   _sleepbuffer[_is]._end_time=TimeTradeServer()+countsec;
   return;
  }
//+------------------------------------------------------------------+
//|  Проверка идет ли сон                                            |
//+------------------------------------------------------------------+
bool  IsSleepping(string id)
  {
   int _is = ArrayRange(_sleepbuffer,0);
   for(int i=0; i<_is; i++)
     {
      if(_sleepbuffer[i]._id_sleep==id)
        {
         datetime _res = TimeTradeServer();
         if(_res > _sleepbuffer[i]._end_time) break;
         return(true);
        }
     }
   return(false);
  }
//+------------------------------------------------------------------+
 
Aleksandr Dziuba #:

У меня нет циклов в oninit. Он Oninit не вызывает потому что работает Sleep.

Сделал себе небольшую замену слипа и обработал событие по таймеру. Советник разморозил.

Но появилась новая тема. В Терминале таймер не работает если не идут торги. А в тестере прокручивает каждые 5 секунд, Поэтому тестирование идет долго. 

Вставил проверку на то что запущен тестер и на торговый тайм.

//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
   if(MQLInfoInteger(MQL_TESTER) && !Trading_Time() && !Preset_Trading_Time())
      return;
   showtime();
   fill_take_next(LB);
   resetbuynextorder(LB);
   resetbuytakeorder(LB);
   show_shift_lines(LB);
   show_comment();
  }
Причина обращения: