Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
ind_subwindow определяется заранее при добавлении индикатора на график в OnInit().
ind_subwindow на самом деле это не идентификатор. Это номер окна и он влёгкую меняется.
В OnDeinit его надо искать заново
ind_subwindow на самом деле это не идентификатор. Это номер окна и он влёгкую меняется.
В OnDeinit его надо искать заново
Я не писал, что это идентификатор. В предыдущем посте я написал про "искать заново".
Без рабочего примера кода можно, что угодно утверждать, уж простите.
Я не писал, что это идентификатор. В предыдущем посте я написал про "искать заново".
Без рабочего примера кода можно, что угодно утверждать, уж простите.
вот вырезка из рабочего кода (со стандартным ATR, который в OnInit создаётся и аттачится к чарту):
вот вырезка из рабочего кода (со стандартным ATR, который в OnInit создаётся и аттачится к чарту):
Ну хорошо, эта ваша мысль понятна.
А теперь если на графике один ATR добавлен ботом, а второй добавлен вручную, тогда оба индикатора будут иметь имя вида ATR(14) и как отличить какой из них создан ботом?
Ну хорошо, эта ваша мысль понятна.
А теперь если на графике один ATR добавлен ботом, а второй добавлен вручную, тогда оба индикатора будут иметь имя вида ATR(14) и как отличить какой из них создан ботом?
это просто вырезка про ATR, чтобы copy-paste помешьше. Со своими индикаторами тоже самое, только бот передаёт имя name+magick_бота, индикатор себе в своём OnInit его присваивает.
различия кода (моего/вашего) - у меня есть ChartRedraw и IndicatorRelease (и поиск окна при удалении). В индикаторах кстати тоже ChartRedraw есть в OnInit/Deinit, не для того конечно сделан, но возможно влияет.
PS/ И по мелочи, переменные всегда инициализируются и всегда очищаются. без принудительного присваивания в OnInit и обнуления в OnDeinit int foo=default_value в глобальной секции это эпичная ошибка.
тогда получается что на каждый период создаёте индикатор. Сами. Очень качественный исходник :-)
решение проблемы на виду, не надо заниматься овер-инжинирингом. При раскрутке советника придумал индикатору имя, создал+приаттачил, в OnDeinit отцепил от чарта по уникальному имени и удалил хендл. ВСЁ. По классике: "я тебя породил, я тебя и убью"
а вы начали мудрить с "не удалять при смене ТФ" и городить код. При "неудалении" индикатор сохраняется во внутренний шаблон и перезагражается по нему уже в чарте (отличительная особенность - начинает получать OnChartEvent). Причём перезагрузка происходит параллельно с перезагрузкой советника и чей OnInit на какой стадии впереди кому как повезёт.
PS/ там есть другие вопросы без ответов - что происходит при изменении пользователем параметров приаттаченого к чарту индикатора. Старый сгинет и будет новый с новыми параметрами или поменяются опции работающего с советником, или это неопределённое поведение от билда-к-билду
Вы не разобрались в проблеме совершенно. Никто ничего специально не мудрит, а использует штатный способ - на текущем графике размещается эксперт, который под свои нужны создает индикатор - ВСЁ. После этого пользователь переключает таймфрейм и получает задвоенные подокна индикаторов - одно нормальное, второе "зомби" - либо с полным дубликатом параметров первого индикатора (что не может быть в МТ5 по определению - это баг), либо с непроинициализированным именем, то есть без сработавшего OnInit.
В приложенных исходниках MQL5 инициализация и деинициализация производятся по лучшим стандартам. Потрудились бы изучить что ли тестовый пример, прежде чем писать лабуду.
Что происходит при изменении параметров приатаченного индикатора (ТФ - один из неявных параметров индикатора), доподлинно известно и постоянно - старая копия удаляется, а новая создается, и это видно даже в прилагаемых логах - там выведены все хендлы.
Ну хорошо, эта ваша мысль понятна.
А теперь если на графике один ATR добавлен ботом, а второй добавлен вручную, тогда оба индикатора будут иметь имя вида ATR(14) и как отличить какой из них создан ботом?
это просто вырезка про ATR, чтобы copy-paste помешьше. Со своими индикаторами тоже самое, только бот передаёт имя name+magick_бота, индикатор себе в своём OnInit его присваивает.
различия кода (моего/вашего) - у меня есть ChartRedraw и IndicatorRelease (и поиск окна при удалении). В индикаторах кстати тоже ChartRedraw есть в OnInit/Deinit, не для того конечно сделан, но возможно влияет.
PS/ И по мелочи, переменные всегда инициализируются и всегда очищаются. без принудительного присваивания в OnInit и обнуления в OnDeinit int foo=default_value в глобальной секции это эпичная ошибка.
Я для вас сделал другие максимально упрощенные тестовые файлы в соответствии с вашим примером. (но без ChartRedraw).
Ожидаемо он работает в случае стандартного индикатора (нужно раскоментировать #define ATR //использовать iATR)
И не работает для пользовательского индикатора с передеваемым magic.
Просто хочу чтобы вы у себя воспроизвели проблему - индикатор не найден в OnDeinit при смене ТФ.
Это будет один и тот же экземпляр индикатора. Более того, встроенные индикаторы кешируются даже между графиками (если совпадает символ/ТФ). См.книгу.
В книге вы пишете "Можно также напомнить, что создать два идентичных индикатора на одном графике вручную нельзя."
Здесь имеется в виду, что расчетная часть всегда будет одна, а добавить условный MACD я могу 10 раз в 10 подокон одного графика? Ведь вручную это получается.
В книге вы пишете "Можно также напомнить, что создать два идентичных индикатора на одном графике вручную нельзя."
Здесь имеется в виду, что расчетная часть всегда будет одна, а добавить условный MACD я могу 10 раз в 10 подокон одного графика? Ведь вручную это получается.