Автоматический перезапуск советника через заданый интервал времени

 

Подскажите, пожалуйста, как сделать (средствами MQL4) так, чтобы советник автоматически перезапускался с теми же настройками через заданый интервал времени, скажем, один раз в сутки.

Скорее всего, как-то через init() / deinit(), но как именно?

Спасибо!

 
Какие цели у перезапуска?
 
Проверка срока истечения лицензии. По дефолту она проверяется только при перезапуске.
 
Webmaster:
Проверка срока истечения лицензии. По дефолту она проверяется только при перезапуске.
Если в ините используются предварительные, предстартовые настройки советника перед первым стартом, которые потом меняются по ходу работы, то запуск инит по-новой подготовит советник к первому старту (как с чистого листа). Если же там не критичные для дальнейшей его работы строки инициализации некоторых переменных, не влияющие на продолжение работы советника, то раз в сутки просто вызывайте инит из старта.
 
artmedia70:
Если в ините используются предварительные, предстартовые настройки советника перед первым стартом, которые потом меняются по ходу работы, то запуск инит по-новой подготовит советник к первому старту (как с чистого листа). Если же там не критичные для дальнейшей его работы строки инициализации некоторых переменных, не влияющие на продолжение работы советника, то раз в сутки просто вызывайте инит из старта.

Как сделать раз в сутки - понятно, а как вызвать инит из старта? Тупо if(условие) init(); или как-то похитрее?

...................................

Попробовал "тупо":

datetime st;

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
 {
   st = TimeCurrent();
   return(0);
 }

int start()
 {
       
   Print(TimeCurrent()-st); 
    
   if(TimeCurrent() - st > 60) init();
 }

Счетчик обнуляется, значит функция init() вызывается, но перезапуска эксперта не происходит. Наверное, надо какую-то функцию теперь вызвать из init(), но какую?

 
Переключайте тайфрейм программно. Получите гарантированный перезапуск. Только что вам мешает поставить проверку в старте ?
 
FAQ:
Переключайте тайфрейм программно. Получите гарантированный перезапуск. Только что вам мешает поставить проверку в старте ?

Переключая таймфрейм можно нарваться на нежелательный торговый сигнал. Проверку производит не сам советник, а сервер, и делает он это только при пуске или перезапуске, повлиять на это я не могу. Т.е., если не выключать терминал и не производить никаких действий с советником или окном, теоретически можно пользоваться советником очень долго после окончания срока лицензии.

 
Webmaster:

Как сделать раз в сутки - понятно, а как вызвать инит из старта? Тупо if(условие) init(); или как-то похитрее?

...................................

Попробовал "тупо":

Счетчик обнуляется, значит функция init() вызывается, но перезапуска эксперта не происходит. Наверное, надо какую-то функцию теперь вызвать из init(), но какую?


Впишите в инит распринтовку: Print ("Запущен init(), время вызова "+TimeToStr(TimeCurrent()));

И увидите в журнале. Дальше уже решайте

 
artmedia70:

Впишите в инит распринтовку: Print ("Запущен init(), время вызова "+TimeToStr(TimeCurrent()));

И увидите в журнале. Дальше уже решайте



Я и так вижу, что функция, находящаяся в ините, выполняется, но мне кажется, что советник не перезапускается при этом, поскольку в журнале нет строчек initialized & inputs.
 
Webmaster:

Я и так вижу, что функция, находящаяся в ините, выполняется, но мне кажется, что советник не перезапускается при этом, поскольку в журнале нет строчек initialized & inputs.
в журнале не всё пишется. в логах посмотрите.
 
Webmaster:

Я и так вижу, что функция, находящаяся в ините, выполняется, но мне кажется, что советник не перезапускается при этом, поскольку в журнале нет строчек initialized & inputs.


Я вам русским языком написал, что вам надо сделать что бы перезапустить, именно перезапустить советник.

Смотрите в справке Причины деинициализации.

Еще один вариант - это вызвать самого себя на график, или вызвать окно настроек.

Причина обращения: