1) наносятся граф. объекты, сохранённые в шаблоне.
2) индикатором/советником создаются новые граф. объекты, с новыми уникальными числовыми префиксами.
А т.к. префиксы от "прошлого раза" неизвестны программе, она ничего и не знает о существовании лишних граф. объектов.
В своих программах решил так:
1) избавился от рандомых префиксов (немного подпилил классы по умолчанию).
2) при старте индикатора/советника удаляются все граф. объекты, которые могли бы принадлежать этой программе до того, как создаются экземпляры соответствующих классов (т.е. в OnInit делается подчистка на случай, если остались объекты на графике от прошлого запуска).
При сохранение шаблона в нём сохраняются граф. объекты соответствующего индикатора/советника. Причём у граф. объектов рандомные числовые префиксы, которые задаются при создании соответствующих экземпляров классов. Соответственно, когда применяем шаблон, получаем такое:
1) наносятся граф. объекты, сохранённые в шаблоне.
2) индикатором/советником создаются новые граф. объекты, с новыми уникальными числовыми префиксами.
А т.к. префиксы от "прошлого раза" неизвестны программе, она ничего и не знает о существовании лишних граф. объектов.
В своих программах решил так:
1) избавился от рандомых префиксов (немного подпилил классы по умолчанию).
2) при старте индикатора/советника удаляются все граф. объекты, которые могли бы принадлежать этой программе до того, как создаются экземпляры соответствующих классов (т.е. в OnInit делается подчистка на случай, если остались объекты на графике от прошлого запуска).
Действительно шаблон сохраняет и прикреплённый индикатор и всю графику (а панель не что иное, как совокупность объектов). Для проверки вставил принт в OnInit() - действительно при применении шаблона с индикатором-панелью получаем только один раз OnInit().
Вносить правку в стандартную библиотеку не буду, а наследованием похоже нужно всю библиотеку менять. Во всяком случае спасибо за указание пути.
Действительно шаблон сохраняет и прикреплённый индикатор и всю графику (а панель не что иное, как совокупность объектов). Для проверки вставил принт в OnInit() - действительно при применении шаблона с индикатором-панелью получаем только один раз OnInit().
Вносить правку в стандартную библиотеку не буду, а наследованием похоже нужно всю библиотеку менять. Во всяком случае спасибо за указание пути.
Достаточно перед сохранением шаблона удалить все объекты.
Это обычное дело при использовании индикаторов с объектами или панелей.
Достаточно перед сохранением шаблона удалить все объекты.
Это обычное дело при использовании индикаторов с объектами или панелей.
Уже думал удалять всё. Но всё огульно удалять нельзя. Вдруг пользователь или другой индикатор понасоздавали объектов? Получается нужно выборочно удалять. А если выборочно, то нужно знать префикс, который приписывается ко всем именам панели.
P.S. А имя (префикс) получить можно. Достаточно вызвать Name().
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Если к графики присоединить индикатор на базе CAppDialog (для примера беру стандартный пример из папки ...\MQL5\Indicators\Examples\Panels\SimplePanel\):
потом сохранить шаблон, пусть с именем "test_template.tpl", затем очистить график от индикаторов - это можно сделать применив шаблон "ADX" (в шаблоне ADX нет никаких панелей):
и к этому чистому графику применить ранее сохранённый шаблон "test_template.tpl" (это шаблон с индикатором на базе CAppDialog):
то вроде всё правильно. Вот только если вызвать "Список объектов" и выбрать "Все" и отсортировать по колонке "Описание" видно, что на графике теперь две панели:
Вопрос: "Откуда взялась вторая панель?".