Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Fivos S. Georgiades
911
Fivos S. Georgiades  

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

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

Спасибо!

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

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

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

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

datetime st;

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

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

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

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

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

Artyom Trishkin
Модератор
92447
Artyom Trishkin  
Webmaster:

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

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

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

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


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

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

Fivos S. Georgiades
911
Fivos S. Georgiades  
artmedia70:

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

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



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

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

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


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

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

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий