Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Справочник MQL5 доступен на 8 языках. Изучай MQL5 на удобном тебе языке!
Fivos S. Georgiades
885
Fivos S. Georgiades 2013.08.07 21:53 

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

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

Спасибо!

Heroix
1257
Heroix 2013.08.07 22:14  
Какие цели у перезапуска?
Fivos S. Georgiades
885
Fivos S. Georgiades 2013.08.07 22:39  
Проверка срока истечения лицензии. По дефолту она проверяется только при перезапуске.
Artyom Trishkin
Модератор
75804
Artyom Trishkin 2013.08.08 00:50  
Webmaster:
Проверка срока истечения лицензии. По дефолту она проверяется только при перезапуске.
Если в ините используются предварительные, предстартовые настройки советника перед первым стартом, которые потом меняются по ходу работы, то запуск инит по-новой подготовит советник к первому старту (как с чистого листа). Если же там не критичные для дальнейшей его работы строки инициализации некоторых переменных, не влияющие на продолжение работы советника, то раз в сутки просто вызывайте инит из старта.
Fivos S. Georgiades
885
Fivos S. Georgiades 2013.08.08 06:35  
artmedia70:
Если в ините используются предварительные, предстартовые настройки советника перед первым стартом, которые потом меняются по ходу работы, то запуск инит по-новой подготовит советник к первому старту (как с чистого листа). Если же там не критичные для дальнейшей его работы строки инициализации некоторых переменных, не влияющие на продолжение работы советника, то раз в сутки просто вызывайте инит из старта.

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

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

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

datetime st;

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

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

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

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

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

Artyom Trishkin
Модератор
75804
Artyom Trishkin 2013.08.08 06:59  
Webmaster:

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

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

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

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


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

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

Fivos S. Georgiades
885
Fivos S. Georgiades 2013.08.08 07:16  
artmedia70:

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

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



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

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

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


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

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

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

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