Смена ТФ

 
Привет всем! Кто может подсказать возможно ли сделать так что бы при смене ТФ не было переинициализации советника?
 
И еще такой же вопрос о OnDeinit()...
 

какой ответ ищете? - ответ да можно!

OnInit() вызывается во многих каких случаях

а вот DeInit() - там можно отследить что произошло

Вы не предоставили пример кода, что обсуждать? - может у Вас OnInit() вообще пустой, смысл что то обсуждать?

как вариант,вот был топик в котором ТС попросил распечатать причину деинициализации https://www.mql5.com/ru/forum/319143

 
Maksim Neimerik:
Привет всем! Кто может подсказать возможно ли сделать так что бы при смене ТФ не было переинициализации советника?
При смене таймфрейма перезапуск советника не происходит. Всего навсего вызывается функция OnInit(), а там уж то, что сами туда напихали. Факт того, что происходит смена таймфрейма, отслеживается в OnDeinit(). Не забывайте, что для смены таймфрейма и смены символа один код деинициализации.
Кстати, если вдруг создатели забредут, разделить никак? Не о себе пекусь, а о начинающих.
 
Igor Makanu:

какой ответ ищете? - ответ да можно!

OnInit() вызывается во многих каких случаях

а вот DeInit() - там можно отследить что произошло

Вы не предоставили пример кода, что обсуждать? - может у Вас OnInit() вообще пустой, смысл что то обсуждать?

как вариант,вот был топик в котором ТС попросил распечатать причину деинициализации https://www.mql5.com/ru/forum/319143

У меня суть проблемы в том что в OnInit() создаются кнопки (OBJ_BUTTON) и мне нужно сохранить состояние этих кнопок (нажата/отжата) при смене ТФ... А так как в OnDeInit() я прописал удаление этих же кнопок (ну для их удаления при удалении самого советника) то получается что при смене ТФ срабатывает OnDeInit() и наново срабатывает инициализация что, конечно же сбрасывает состояние кнопки... Как-то так

 
Vladimir Simakov:
При смене таймфрейма перезапуск советника не происходит. Всего навсего вызывается функция OnInit(), а там уж то, что сами туда напихали. Факт того, что происходит смена таймфрейма, отслеживается в OnDeinit(). Не забывайте, что для смены таймфрейма и смены символа один код деинициализации.
Кстати, если вдруг создатели забредут, разделить никак? Не о себе пекусь, а о начинающих.
Ну как же? OnDeInit() тоже вызывается! Когда я убираю все с OnDeInit() то все работает почти правильно... а если в OnDeInit() оставить функцию удаления то все слетает...
 
Maksim Neimerik:
Ну как же? OnDeInit() тоже вызывается! Когда я убираю все с OnDeInit() то все работает почти правильно... а если в OnDeInit() оставить функцию удаления то все слетает...
Извиняюсь за глупости написаные выше, уже разобрался...
 
Maksim Neimerik:
Ну как же? OnDeInit() тоже вызывается! Когда я убираю все с OnDeInit() то все работает почти правильно... а если в OnDeInit() оставить функцию удаления то все слетает...
До дома доберусь. Если не забуду, то скину как решается.
 
Maksim Neimerik:

У меня суть проблемы в том что в OnInit() создаются кнопки (OBJ_BUTTON) и мне нужно сохранить состояние этих кнопок (нажата/отжата) при смене ТФ... А так как в OnDeInit() я прописал удаление этих же кнопок (ну для их удаления при удалении самого советника) то получается что при смене ТФ срабатывает OnDeInit() и наново срабатывает инициализация что, конечно же сбрасывает состояние кнопки... Как-то так

ну и в чем проблема? используйте указатели и в OnDeinit() - причину переключения ТФ не удаляйте обькты, в противном случае удаляйте

в OnInit() проверяйте указатель ==NULL создайте обекты, в противном случае ничего не делайте, что позволит Вам сохранить состояние обьекта


вот топик где работу графической панели разбирали, ТС перевел все на работу с указателями, остался доволен https://www.mql5.com/ru/forum/317444

 
Igor Makanu:

ну и в чем проблема? используйте указатели и в OnDeinit() - причину переключения ТФ не удаляйте обькты, в противном случае удаляйте

в OnInit() проверяйте указатель ==NULL создайте обекты, в противном случае ничего не делайте, что позволит Вам сохранить состояние обьекта


вот топик где работу графической панели разбирали, ТС перевел все на работу с указателями, остался доволен https://www.mql5.com/ru/forum/317444

да все правильно, сдалал так:

   if(reason!=3)
   {
      Deleted();
   }

вроде работает, все равно как-то не корректно, но это уже скорее связано с самими кнопками...

 
Igor Makanu:

в OnInit() проверяйте указатель ==NULL создайте обекты, в противном случае ничего не делайте, что позволит Вам сохранить состояние обьекта

а можете подробнее об этом рассказать? Указатели - это если бы я использовал классы, верно?

Причина обращения: