- Поборем просадку?
- Named Pipe Работа с пайпами
- Вопросы от начинающих MQL5 MT5 MetaTrader 5
Возникает ситуация когда эксперт что-то печатает в журнал или находится во сне. Так вот что происходит. Вы входите в меню изменения параметров эксперта. Меняете параметры. Нажимаете клавишу сохранить. И вуаля. Вы в полной уверенности что работаете с новыми параметрами, а нет. Параметры не сохраняются. Хотя они нужны для остановки того же слипа или цикла. Помогает только абнормальное удаление советника и загрузка его снова.
Возможно, в OnInit() работает беспрерывно цикл while()
Нет. Засыпание советника не дает.
Sleep(buy_slep_time * 1000);
Ни какие события советник не будят.
Как я делаю. Вызываю параметры советника. Изменяю. Сохраняю в файл. Абортирую советник. Запускаю советник с новыми параметрами.
У меня нет циклов в 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); } //+------------------------------------------------------------------+
У меня нет циклов в 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(); }
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования