Проверка срока истечения лицензии. По дефолту она проверяется только при перезапуске.
Если в ините используются предварительные, предстартовые настройки советника перед первым стартом, которые потом меняются по ходу работы, то запуск инит по-новой подготовит советник к первому старту (как с чистого листа). Если же там не критичные для дальнейшей его работы строки инициализации некоторых переменных, не влияющие на продолжение работы советника, то раз в сутки просто вызывайте инит из старта.
Как сделать раз в сутки - понятно, а как вызвать инит из старта? Тупо if(условие) init(); или как-то похитрее?
...................................
Попробовал "тупо":
datetime st; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int init() { st = TimeCurrent(); return(0); } int start() { Print(TimeCurrent()-st); if(TimeCurrent() - st > 60) init(); }
Счетчик обнуляется, значит функция init() вызывается, но перезапуска эксперта не происходит. Наверное, надо какую-то функцию теперь вызвать из init(), но какую?
Переключайте тайфрейм программно. Получите гарантированный перезапуск. Только что вам мешает поставить проверку в старте ?
Переключая таймфрейм можно нарваться на нежелательный торговый сигнал. Проверку производит не сам советник, а сервер, и делает он это только при пуске или перезапуске, повлиять на это я не могу. Т.е., если не выключать терминал и не производить никаких действий с советником или окном, теоретически можно пользоваться советником очень долго после окончания срока лицензии.
Как сделать раз в сутки - понятно, а как вызвать инит из старта? Тупо if(условие) init(); или как-то похитрее?
...................................
Попробовал "тупо":
Счетчик обнуляется, значит функция init() вызывается, но перезапуска эксперта не происходит. Наверное, надо какую-то функцию теперь вызвать из init(), но какую?
Впишите в инит распринтовку: Print ("Запущен init(), время вызова "+TimeToStr(TimeCurrent()));
И увидите в журнале. Дальше уже решайте
Впишите в инит распринтовку: Print ("Запущен init(), время вызова "+TimeToStr(TimeCurrent()));
И увидите в журнале. Дальше уже решайте
Я и так вижу, что функция, находящаяся в ините, выполняется, но мне кажется, что советник не перезапускается при этом, поскольку в журнале нет строчек initialized & inputs.
Я и так вижу, что функция, находящаяся в ините, выполняется, но мне кажется, что советник не перезапускается при этом, поскольку в журнале нет строчек initialized & inputs.
Я и так вижу, что функция, находящаяся в ините, выполняется, но мне кажется, что советник не перезапускается при этом, поскольку в журнале нет строчек initialized & inputs.
Я вам русским языком написал, что вам надо сделать что бы перезапустить, именно перезапустить советник.
Смотрите в справке Причины деинициализации.
Еще один вариант - это вызвать самого себя на график, или вызвать окно настроек.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Подскажите, пожалуйста, как сделать (средствами MQL4) так, чтобы советник автоматически перезапускался с теми же настройками через заданый интервал времени, скажем, один раз в сутки.
Скорее всего, как-то через init() / deinit(), но как именно?
Спасибо!