Класс CDialog в MT4 - пропадает панель(советник) при выборе шаблона.

 

Используется панелька в тестере стратегий основанная на классе CDialog, но при выборе шаблона панелька пропадает, хотя ее события отрабатываются.

Есть ли возможность ее отобразить? Может кто сталкивался с такой проблемой.

 

Эксперты, никто с такой проблемой не сталкивался?

Для понимания прикрепляю панельку, вот если ее запустить, а потом выбрать любой шаблон, то она пропадет, но деинициализация панельки не происходит.

Как сделать, чтобы панелька появилась на графике после выбора шаблона?

Файлы:
TradePanel.mq4  12 kb
 
Alexander Sedyh:

Эксперты, никто с такой проблемой не сталкивался?

Для понимания прикрепляю панельку, вот если ее запустить, а потом выбрать любой шаблон, то она пропадет, но деинициализация панельки не происходит.

Как сделать, чтобы панелька появилась на графике после выбора шаблона?

Установите панель на график, сохраните шаблон с именем советника (панельки) и будет Вам счастье))
 
Maksim Neimerik:
Установите панель на график, сохраните шаблон с именем советника (панельки) и будет Вам счастье))

Спасибо конечно, что решили поучаствовать в обсуждение - Вы такой первый :)

Но есть несколько моментов:

1. Хотелось бы эту проблему решить с помощью кода, а не обходными путями.

2. Для интереса проверил, но этот метод не работает, панель которая подхватится из шаблона будет только как картинка, функционал её срабатывать не будет.

 

OnChartEvent в тестере не работает, вам надо на каждом тике инициализировать собиьтие, и самому обрабатывать

 
Rustamzhan Salidzhanov:

OnChartEvent в тестере не работает, вам надо на каждом тике инициализировать собиьтие, и самому обрабатывать


Насчет OnChartEvent я в курсе, с событиями вопрос я разрешил, на каждом тике обрабатываю состояние кнопок.

Проблема в другом: В тестере событий выбираю панельку, нажимаю старт, пошло тестирование, после этого выбираю шаблон и панелька визуально пропадает, хотя деинициализация её не происходит.

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

(Панельку которую я прикрепил - это пример, чтобы можно было увидеть проблему.)

 
Alexander Sedyh:

Насчет OnChartEvent я в курсе, с событиями вопрос я разрешил, на каждом тике обрабатываю состояние кнопок.

Проблема в другом: В тестере событий выбираю панельку, нажимаю старт, пошло тестирование, после этого выбираю шаблон и панелька визуально пропадает, хотя деинициализация её не происходит.

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

(Панельку которую я прикрепил - это пример, чтобы можно было увидеть проблему.)


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

  А что мешает вам назвать нужный вам шаблон как "tester.tpl"   тогда при запуске тестера он автоматом подгрузиться, а потом на нем прорисуется панелька ???

 
Rustamzhan Salidzhanov:

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

  А что мешает вам назвать нужный вам шаблон как "tester.tpl"   тогда при запуске тестера он автоматом подгрузиться, а потом на нем прорисуется панелька ???


Насчет tester.tpl интересный вариант, я даже и не знал, что тестер по умолчанию пытается подхватить шаблон с таким наименованием.

Но он не очень удобный, т.к. шаблонов может быть много и каждый раз переименовывать их не очень удобно. Тем более я собираюсь выложить разрабатываемую панельку в общественный доступ, чтобы люди пользовались, но с такими заморочками у пользователей будут сложности.

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

С помощью IsVisible не получится проверить наличия видимости панельки, при пропадание панельки метод всё равно будет возвращать истину.

 
Alexander Sedyh:

Насчет tester.tpl интересный вариант, я даже и не знал, что тестер по умолчанию пытается подхватить шаблон с таким наименованием.

Но он не очень удобный, т.к. шаблонов может быть много и каждый раз переименовывать их не очень удобно. Тем более я собираюсь выложить разрабатываемую панельку в общественный доступ, чтобы люди пользовались, но с такими заморочками у пользователей будут сложности.

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

С помощью IsVisible не получится проверить наличия видимости панельки, при пропадание панельки метод всё равно будет возвращать истину.


  Вы удивитесь, но если назвать шаблон именем советника, то он так же будет подгружаться при тестировании этого советника.

  теперь перейдем к объектам на графике. Когда вы подгружаете шаблон, то он физически сносит все текущие визуальные объекты с графика, и ставит свои. Так что IsVisible вам тут не поможет - их там нет.  если вы откроете список объектов на чарте, и нажмете кнопочку все, то вы увидите что вас советник установил набор объектов их которых состоит ваша панелька, причем имена этих объектов всегда идут с префиксом. итого : в ините вам нужно инициализировать либу, зачитать текущий префикс объектов, и на каждом тике, или на каждом баре проверять - а есть ли они на чарте, если нет - то переинициализировать либку (переставить объекты)

 
Rustamzhan Salidzhanov:

переинициализировать либку (переставить объекты)


Как переинициализировать - создан объект на базе класса, создать еще один объект, потом перекинуть нужные данные из первого объекта во второй и удалить первый объект?

 
Alexander Sedyh:

Как переинициализировать - создан объект на базе класса, создать еще один объект, потом перекинуть нужные данные из первого объекта во второй и удалить первый объект?

  да, но это если только вы храните состояние объектов. а так как нет, то достаточно Destroy / Create

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