Как советнику перезагрузить себя? - страница 2

 
Andrey Khatimlianskii:

Кроме того, что сказал Игорь (а сказал он правильно), вызов ОнИнит отличается от перезапуска советника отсутствием пересоздания глобальных объектов и переменных.

В инит добавьте
 
Renat Akhtyamov:
В инит добавьте

Нельзя в ините пересоздать глобальные переменные. Это только рантайм умеет делать. Глобальные объекты - можно, если они создаются через new.

 
Alexey Volchanskiy:

Нельзя в ините пересоздать глобальные переменные. Это только рантайм умеет делать. Глобальные объекты - можно, если они создаются через new.

удалить и создать

считать из файла, например

только зачем, ведь они итак не стираются при перезагрузке терминала
 
Andrey Khatimlianskii:

Кроме того, что сказал Игорь (а сказал он правильно)

Если задача - обновление эксперта, то лучше всего "стрелять из пушки по воробьям", перезагружая терминал. Недавно именно так и решал проблему. Правда, в том случае по-другому и нельзя было, т. к. советник работал с DLL и кроме него нужно было выгрузить еще и библиотеку, которую другими путями не выгрузить (терминал ее не всегда сразу выгружает после выгрузки советника).

Самой большой проблемой оказался правильный запуск терминала, исходя из действующих прав в ОС (плюс ключи запуска). На все 100% эту проблему еще не решил. В некоторых конфигурациях загружается либо не та копия, либо вообще не происходит запуск. В итоге пока пришел к тому, что выгружаю терминал и после полной его выгрузки выдаю сообщение о том, что обновление завершено и требуется ручной запуск терминала.

Запуск платформы - Для продвинутых пользователей - MetaTrader 5
Запуск платформы - Для продвинутых пользователей - MetaTrader 5
  • www.metatrader5.com
По завершении установки в меню "Пуск" создается группа программ торговой платформы, а на рабочем столе дополнительно помещается ярлык программы. Используйте их для запуска. Нельзя запускать одновременно две копии платформы из одной директории. Чтобы одновременно запустить несколько копий, установите соответствующее количество программ в разные...
 
Andrey Khatimlianskii:

Именно перезагрузить, с чтением терминалом ex4-файла, как происходит при новом запуске или при вызове команды "Обновить" из контекстного меню навигатора терминала.

ChartSetSymbolPeriod( NULL, 0 ) не работает.

ChartApplyTemplate работает, но иногда приводит к зависанию старой копии советника и, соответственно, не нормальной загрузке новой (он даже не инициализируется, хотя на график подгружается, это видно по версии файла):


Код такой:


Кроме "Обновления" окна навигатора с помощью ВинАпи идеи есть?

Есть. Попытаться поуправлять советником из индикатора. 

 
Ihor Herasko:

Если задача - обновление эксперта, то лучше всего "стрелять из пушки по воробьям", перезагружая терминал. Недавно именно так и решал проблему. Правда, в том случае по-другому и нельзя было, т. к. советник работал с DLL и кроме него нужно было выгрузить еще и библиотеку, которую другими путями не выгрузить (терминал ее не всегда сразу выгружает после выгрузки советника).

Самой большой проблемой оказался правильный запуск терминала, исходя из действующих прав в ОС (плюс ключи запуска). На все 100% эту проблему еще не решил. В некоторых конфигурациях загружается либо не та копия, либо вообще не происходит запуск. В итоге пока пришел к тому, что выгружаю терминал и после полной его выгрузки выдаю сообщение о том, что обновление завершено и требуется ручной запуск терминала.

это лучший из возможных вариантов.

Действительно плясок с DLL не будет и плюс сразу правильно проинициализуются глобальные переменные и закрывается проблема "курица или яйцо" (последовательность вызовов OnInit/OnDeinit).
Для решения проблем с конфигурациями и копиями должен помочь режим "всегда /portable" :-)

вот до смешного, у меня нигде и никогда не используются терминалы без этого ключика.. Зачем придумано иное - тайна сия велика есть..

 
Maxim Kuznetsov:

это лучший из возможных вариантов.

Действительно плясок с DLL не будет и плюс сразу правильно проинициализуются глобальные переменные и закрывается проблема "курица или яйцо" (последовательность вызовов OnInit/OnDeinit).
Для решения проблем с конфигурациями и копиями должен помочь режим "всегда /portable" :-)

вот до смешного, у меня нигде и никогда не используются терминалы без этого ключика.. Зачем придумано иное - тайна сия велика есть..

Ihor Herasko:

Если задача - обновление эксперта, то лучше всего "стрелять из пушки по воробьям", перезагружая терминал. Недавно именно так и решал проблему. Правда, в том случае по-другому и нельзя было, т. к. советник работал с DLL и кроме него нужно было выгрузить еще и библиотеку, которую другими путями не выгрузить (терминал ее не всегда сразу выгружает после выгрузки советника).

Самой большой проблемой оказался правильный запуск терминала, исходя из действующих прав в ОС (плюс ключи запуска). На все 100% эту проблему еще не решил. В некоторых конфигурациях загружается либо не та копия, либо вообще не происходит запуск. В итоге пока пришел к тому, что выгружаю терминал и после полной его выгрузки выдаю сообщение о том, что обновление завершено и требуется ручной запуск терминала.

Иначе говоря, лучшее решение проблемы - ручной перезапуск терминала. 

Задача стояла иная - Как советнику перезагрузить себя?

Думаете - нерешаемая? 

 
Алексей Тарабанов:

Иначе говоря, лучшее решение проблемы - ручной перезапуск терминала. 

Задача стояла иная - Как советнику перезагрузить себя?

Почему это "ручная"? В MQL есть функция TerminalClose(). То есть, как минимум, выгрузить терминал возможно без WinAPI. Далее нужно подумать, как загрузить его без WinAPI. Наверное, какие-то финты с bat-файлами придется делать.

 
Ihor Herasko:

Почему это "ручная"? В MQL есть функция TerminalClose(). То есть, как минимум, выгрузить терминал возможно без WinAPI. Далее нужно подумать, как загрузить его без WinAPI. Наверное, какие-то финты с bat-файлами придется делать.

Игорь, да какая разница, вручную, или с bat-файлами. 

 
Алексей Тарабанов:

Игорь, да какая разница, вручную, или с bat-файлами. 

Ужас