У меня индикаторы общаются между собой и с экспертом по своему протоколу через графические переменные.
Таким образом выясняют кто из них кто и под каким номером. Эксперт тоже это знает и раздаёт графические объекты и вертикальную развёртку по подокнам.
У меня индикаторы общаются между собой и с экспертом по своему протоколу через графические переменные.
Таким образом выясняют кто из них кто и под каким номером. Эксперт тоже это знает и раздаёт графические объекты по подокнам.
Да, этот способ, как альтернатива гл.терм. переменным я тоже юзаю - почти массивы!)))
Но я о другом немного писал - о различении копий индикаторов и созданных ими гр. объектов.
Потом, когда открыто много подокон, при уничтожении части из них - возникает геморой с изменением номера подокна. Здесь этой проблемы нет как таковой.
Для генерации уникального имени использую такую сабрутину:
// подпрограмма генерации уникального имени граф.объекта с занесением его в буфер string DrawArray() {string out; DrawCnt++; // счетчик граф. объектов out=IndTime+": "+DrawCnt; // имя объекта = время подсоединения индикатора + счетчик граф. объектов ArrayResize(Draw,DrawCnt); // увеличение массива граф. объектов на 1 Draw[DrawCnt-1]=out; // занесение имени объекта в массив return(out); // возврат уникального имени объекта }
Счетчик, ясен пионер, в головной част объявлен. Так же как и массив объектов.
Деинициализация, соответственно, так:
int deinit() { for(int i=0; i<DrawCnt; i++) ObjectDelete(Draw[i]); // Стереть созданные индикатором объекты ArrayResize(Draw,1); DrawCnt=0; // сброс массива и счетчика return(0); }Если используется IndicatorCounted() и связанные с ней стандартные конструкции, то сброс счетчика, деинит нужно делать при ее обнулении - иначе каша будет на экране.
Да, этот способ, как альтернатива гл.терм. переменным я тоже юзаю - почти массивы!)))
Но я о другом немного писал - о различении копий индикаторов.
Потом, когда открыто много подокон, при уничтожении части из них - возникает геморой с изменением номера подокна. Здесь этой проблемы нет как таковой.
При удалении подокна другие индикаторы и эксперт об этом узнают и переинициализируются.
Отслеживаю и контроллирую:
1. Номер подокна.
2. Порядковый номер индикатора. Это чтобы при удалении других индикаторов не было проблем.
3. Постфикс имени индикатора.
При удалении подокна другие индикаторы и эксперт об этом узнают и переинициализируются.
Отслеживаю и контроллирую:
1. Номер подокна.
2. Порядковый номер индикатора. Это чтобы при удалении других индикаторов не было проблем.
3. Постфикс имени индикатора.
ок.
Дано:
- Несколько копий индикатора, создающих гр. объекты, имеющих одинаковые шортнеймы на экране.
Задача:
- Обеспечить их одновременную безконфликтную работу с возможностью их уничтожения, добавления новых копий, удаления/прикрепления других индикаторов.
Если вашим способом это решается компактней, проще и изящней - с удовольствием воспользуюсь. (У меня подобный вашему способ получился очень громоздким и не гибким - поэтому сделал то, что сделал))).)
Покажите, как это решено у вас.
з.ы. Что значит "переинициализируются"? Стирается все и рисуется заново?
С одинаковыми именами не получиться.
Надо сделать так, чтобы индикатор сам себя назвал в процессе загрузки. Для этого необходимо общение индикаторов между собой.
Можно и без переинициализации, но уж больно сложно всё получается. Пересчитать проще.
Перемещение объектов на графике почти не загружает МТ4. В отличии от их создания и операций с индикаторными буферами. Т.е. стирать ни чего не надо.
С одинаковыми именами не получиться.
Надо сделать так, чтобы индикатор сам себя назвал в процессе загрузки. Для этого необходимо общение индикаторов между собой.
Можно и без переинициализации, но уж больно сложно всё получается. Пересчитать проще.
Перемещение объектов на графике почти не загружает МТ4. В отличии от их создания и операций с индикаторными буферами. Т.е. стирать ни чего не надо.
Так получилось же. Можно сделать моим способом и разные имена - достаточно просто прибавить к имени индюка его времени прикрепления. И все. По-моему, проще некуда. И ничего не надо ни переинициализировать, ни пересчитывать. Каждое имя получается уникальным, каждый создаваемый им объект содержит в имени время прикрепления и тоже уникален и привязан жестко к создавшему ему индюку.
Не знаю. Я так и не понял, у вас проще?
Так получилось же. Можно сделать моим способом и разные имена - достаточно просто прибавить к имени индюка его времени прикрепления. И все. По-моему, проще некуда. И ничего не надо ни переинициализировать, ни пересчитывать. Каждое имя получается уникальным, каждый создаваемый им объект содержит в имени время прикрепления и тоже уникален и привязан жестко к создавшему ему индюку.
Не знаю. Я так и не понял, у вас проще?
Если добавляете время, то не получилось. Это уже совсем другое имя индикатора.
Мне такой способ не подходит. Все вычисления провожу в эксперте. Индикатор у меня является просто пустым окном. Он принимает графические объекты от эксперта.
Если добавляете время, то не получилось. Это уже совсем другое имя индикатора.
??? Вы, вообще-то, первый пост читали? В подокнах все копии индикатора выводятся под ОДНИМ именем и все корректно рисуют у себя в окнах, не мешая друг дружке. Если нужно получать свойства гр. объектов конкретного индикатора, то и тогда можно обойтись без его уникального шортнейма - все имена граф.объектов привязаны к конкретному индикатору временем его прикрепления. Можно это время добавить к шортнейму. А можно и не - совсем необязательно.
Мне такой способ не подходит. Все вычисления провожу в эксперте. Индикатор у меня является просто пустым окном. Он принимает графические объекты от эксперта.
Я и говорю (см. выше) - мы о разных задачах.
Я про визуализацию данных индикаторами, когда нужно много эксперементировать (при разработке стратегий), вы - про работу из эксперта. В вашем случае, если не ставить задержку, то время подключения м.б. у всех одинаковым...
Ну, тем не менее, спасибо за общение. Успехов.
Бывают случаи, когда один и тот же индикатор, рисующий графику, подсоединен несколько раз.
Все просто.
Задаете текстовый идентификатор и выносите его во внешние параметры, затем ручками задаете.
У советников магик по-хорошему задается ручками, Здесь практически тот же случай.
____
Ваш способ тоже неплох. Но при загрузке терминала.... Может тогда лучше использовать GetTickCount?
Все просто.
Задаете текстовый идентификатор и выносите его во внешние параметры, затем ручками задаете.
У советников магик по-хорошему задается ручками, Здесь практически тот же случай.
____
Ваш способ тоже неплох. Но при загрузке терминала.... Может тогда лучше использовать GetTickCount?
))) Да. Ручками оно конечно.
При загрузке терминала - согласен, не канает. Но, во-первых, я его и не выключаю почти никогда (низачтоникода))), а во-вторых, для тех, кто все-таки иногда перезагружает комп, можно очень просто доработать методу:
Первый загружаемый индикатор создает гл.т.переменную со своим именем и кладет в нее свое время подсоединения, каждая следующая копия проверяет наличие переменной, если есть, то берет имеющееся время, прибавляет 1 (да хоть тыщу!), делает своим временем и заносит уже свое время обратно в эту переменную. И так далее.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Определить номер подокна для копии. бывает затруднительно - короткое имя может быть одинаковым для всех (ну, например, громоздко в нем отображать все параметры индикатора).
Возникает проблема: как отличить индикаторы друг от друга для рисования в своем подокне.
Для создания уникальности каждой копии индикатора я использую их локальное время прикрепления, и перед созданием объекта задаю короткое имя равным этому времени прикрепления, выясняю номер подокна, после чего возвращаю оригинальное имя.
Кроме того, локальное время прикрепления использую как часть имени объекта.
Кстати, довольно странно, что в MQL4 нет возможности создавать объекты в своем подокне без выяснения его номера. Например, было бы логично, если номер подокна задан как -1, то объект создается в подокне индикатора. Хотя, это все равно не снимает проблему уникальности имени объектов для копий индикаторов - тогда пришлось бы через глобальные терм. переменные крутиться...