Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Кроме того, что сказал Игорь (а сказал он правильно), вызов ОнИнит отличается от перезапуска советника отсутствием пересоздания глобальных объектов и переменных.
В инит добавьте
Нельзя в ините пересоздать глобальные переменные. Это только рантайм умеет делать. Глобальные объекты - можно, если они создаются через new.
Нельзя в ините пересоздать глобальные переменные. Это только рантайм умеет делать. Глобальные объекты - можно, если они создаются через new.
удалить и создать
считать из файла, например
только зачем, ведь они итак не стираются при перезагрузке терминалаКроме того, что сказал Игорь (а сказал он правильно)
Если задача - обновление эксперта, то лучше всего "стрелять из пушки по воробьям", перезагружая терминал. Недавно именно так и решал проблему. Правда, в том случае по-другому и нельзя было, т. к. советник работал с DLL и кроме него нужно было выгрузить еще и библиотеку, которую другими путями не выгрузить (терминал ее не всегда сразу выгружает после выгрузки советника).
Самой большой проблемой оказался правильный запуск терминала, исходя из действующих прав в ОС (плюс ключи запуска). На все 100% эту проблему еще не решил. В некоторых конфигурациях загружается либо не та копия, либо вообще не происходит запуск. В итоге пока пришел к тому, что выгружаю терминал и после полной его выгрузки выдаю сообщение о том, что обновление завершено и требуется ручной запуск терминала.
Именно перезагрузить, с чтением терминалом ex4-файла, как происходит при новом запуске или при вызове команды "Обновить" из контекстного меню навигатора терминала.
ChartSetSymbolPeriod( NULL, 0 ) не работает.
ChartApplyTemplate работает, но иногда приводит к зависанию старой копии советника и, соответственно, не нормальной загрузке новой (он даже не инициализируется, хотя на график подгружается, это видно по версии файла):
Код такой:
Кроме "Обновления" окна навигатора с помощью ВинАпи идеи есть?
Есть. Попытаться поуправлять советником из индикатора.
Если задача - обновление эксперта, то лучше всего "стрелять из пушки по воробьям", перезагружая терминал. Недавно именно так и решал проблему. Правда, в том случае по-другому и нельзя было, т. к. советник работал с DLL и кроме него нужно было выгрузить еще и библиотеку, которую другими путями не выгрузить (терминал ее не всегда сразу выгружает после выгрузки советника).
Самой большой проблемой оказался правильный запуск терминала, исходя из действующих прав в ОС (плюс ключи запуска). На все 100% эту проблему еще не решил. В некоторых конфигурациях загружается либо не та копия, либо вообще не происходит запуск. В итоге пока пришел к тому, что выгружаю терминал и после полной его выгрузки выдаю сообщение о том, что обновление завершено и требуется ручной запуск терминала.
это лучший из возможных вариантов.
Действительно плясок с DLL не будет и плюс сразу правильно проинициализуются глобальные переменные и закрывается проблема "курица или яйцо" (последовательность вызовов OnInit/OnDeinit).
Для решения проблем с конфигурациями и копиями должен помочь режим "всегда /portable" :-)
вот до смешного, у меня нигде и никогда не используются терминалы без этого ключика.. Зачем придумано иное - тайна сия велика есть..
это лучший из возможных вариантов.
Действительно плясок с DLL не будет и плюс сразу правильно проинициализуются глобальные переменные и закрывается проблема "курица или яйцо" (последовательность вызовов OnInit/OnDeinit).
Для решения проблем с конфигурациями и копиями должен помочь режим "всегда /portable" :-)
вот до смешного, у меня нигде и никогда не используются терминалы без этого ключика.. Зачем придумано иное - тайна сия велика есть..
Если задача - обновление эксперта, то лучше всего "стрелять из пушки по воробьям", перезагружая терминал. Недавно именно так и решал проблему. Правда, в том случае по-другому и нельзя было, т. к. советник работал с DLL и кроме него нужно было выгрузить еще и библиотеку, которую другими путями не выгрузить (терминал ее не всегда сразу выгружает после выгрузки советника).
Самой большой проблемой оказался правильный запуск терминала, исходя из действующих прав в ОС (плюс ключи запуска). На все 100% эту проблему еще не решил. В некоторых конфигурациях загружается либо не та копия, либо вообще не происходит запуск. В итоге пока пришел к тому, что выгружаю терминал и после полной его выгрузки выдаю сообщение о том, что обновление завершено и требуется ручной запуск терминала.
Иначе говоря, лучшее решение проблемы - ручной перезапуск терминала.
Задача стояла иная - Как советнику перезагрузить себя?
Думаете - нерешаемая?
Иначе говоря, лучшее решение проблемы - ручной перезапуск терминала.
Задача стояла иная - Как советнику перезагрузить себя?
Почему это "ручная"? В MQL есть функция TerminalClose(). То есть, как минимум, выгрузить терминал возможно без WinAPI. Далее нужно подумать, как загрузить его без WinAPI. Наверное, какие-то финты с bat-файлами придется делать.
Почему это "ручная"? В MQL есть функция TerminalClose(). То есть, как минимум, выгрузить терминал возможно без WinAPI. Далее нужно подумать, как загрузить его без WinAPI. Наверное, какие-то финты с bat-файлами придется делать.
Игорь, да какая разница, вручную, или с bat-файлами.
Игорь, да какая разница, вручную, или с bat-файлами.
Ужас