Получить имя объекта на текущем баре соседего графика.

 

Добрый день. Недавно столкнулся с такой задачей:

Есть советник, который рисует набор графический объектов-линий на своем графике. Другому советнику нужно "понять" графические объекты соседнего графика, получить значения.

Есть вариант перебирать объекты в списке объектов, но у меня на графике более 10000 объектов, взять из них нужно всего 200. Пока все переберешь, слишком долго.

Как можно, не перебирая весь список объектов, подключившись к соседнему графику, получить имя объекта, цену и цвет стоящего на текущем баре.

То есть, перебираем от текущего бары. Смотрим 0-й бар, стоит ли на нем начало или конец объекта-линии. Если за этим баром закреплен какой-нибудь объект - получаем имя этого объекта. Переходим к 1-му бару, так же смотрим, есть ли на нем объект. Перебирать не список объектов, а бары и смотреть по номерам баров есть ли на них графические элементы.

Надеюсь что пытаюсь реализовать понятно. :) Спасибо. Кто может, помогите, пожалуйста. 

 
WePlexus:

Добрый день. Недавно столкнулся с такой задачей:

Есть советник, который рисует набор графический объектов-линий на своем графике. Другому советнику нужно "понять" графические объекты соседнего графика, получить значения.

Есть вариант перебирать объекты в списке объектов, но у меня на графике более 10000 объектов, взять из них нужно всего 200. Пока все переберешь, слишком долго.

Как можно, не перебирая весь список объектов, подключившись к соседнему графику, получить имя объекта, цену и цвет стоящего на текущем баре.

То есть, перебираем от текущего бары. Смотрим 0-й бар, стоит ли на нем начало или конец объекта-линии. Если за этим баром закреплен какой-нибудь объект - получаем имя этого объекта. Переходим к 1-му бару, так же смотрим, есть ли на нем объект. Перебирать не список объектов, а бары и смотреть по номерам баров есть ли на них графические элементы.

Надеюсь что пытаюсь реализовать понятно. :) Спасибо. Кто может, помогите, пожалуйста. 

Для сокращения перебора нужно в 

ObjectName

 четвёртым параметром указывать тип объекта. Так можно сократить список искомых объектов. А потом всё равно перебирать свойства полученного списка объектов.

 
barabashkakvn:

Для сокращения перебора нужно в 

 четвёртым параметром указывать тип объекта. Так можно сократить список искомых объектов. А потом всё равно перебирать свойства полученного списка объектов.

Да, я так сделал, из 10000 получилось 6000. Это все-равно много. :) Нужно взять только первые 10 баров, там глазом видно всего 15 объектов. А приходится перебирать целых 6000 чтобы понять какие находятся на этих 10... Это слишком тормозит работу. Возможно есть способ получить название объекта (а уже после его свойства) по номеру бара?
 
WePlexus:

Если за этим баром закреплен какой-нибудь объект - получаем имя этого объекта.

Если "закреплён" - это значит его создал и привязал к этому бару бот? Почему тогда боту при создании не включить в название объекта дату этого бара? Напр "Line 2014.11.25 23:15". Тада боту с др графика будет достаточно названия для фильтрации нужных. А вообще, эту траблему стоит решать в месте её возникновения - вам действительно нужны нефильтрованные десятки тыщщ объектов на графике?
 
WePlexus:
Да, я так сделал, из 10000 получилось 6000. Это все-равно много. :) Нужно взять только первые 10 баров, там глазом видно всего 15 объектов. А приходится перебирать целых 6000 чтобы понять какие находятся на этих 10... Это слишком тормозит работу. Возможно есть способ получить название объекта (а уже после его свойства) по номеру бара?
Добрый день. Если нужно постоянно смотреть объекты с последних N баров, создайте двумерный массив lines[ ][ N ]. При образовании нового бара сдвигайте объекты в массиве. Думаю, будет гораздо быстрее перебрать объекты за последние N баров, удалить лишние и добавить вновь образованные в массив, нежели перебирать все на графике.
 
Не нужно перебирать, кодируйте идентифицирующие признаки в наименовании объектов.
 
gip:
Не нужно перебирать, кодируйте идентифицирующие признаки в наименовании объектов.
Можно подробнее, что Вы имеете ввиду?
 
f2011:
Если "закреплён" - это значит его создал и привязал к этому бару бот? Почему тогда боту при создании не включить в название объекта дату этого бара? Напр "Line 2014.11.25 23:15". Тада боту с др графика будет достаточно названия для фильтрации нужных. А вообще, эту траблему стоит решать в месте её возникновения - вам действительно нужны нефильтрованные десятки тыщщ объектов на графике?
Увы советник имеет закрытый код... Внести в него изменения не могу.
 
Tapochun:
Добрый день. Если нужно постоянно смотреть объекты с последних N баров, создайте двумерный массив lines[ ][ N ]. При образовании нового бара сдвигайте объекты в массиве. Думаю, будет гораздо быстрее перебрать объекты за последние N баров, удалить лишние и добавить вновь образованные в массив, нежели перебирать все на графике.
Было бы здорово. Но линии каждый новый бар обновляют свое положение на графике. Поэтому нужно каждый бар перебирать все объекты. Вот в чем трудность. :) А их ~10000 шт. 
 
WePlexus:
Увы советник имеет закрытый код... Внести в него изменения не могу.
Попросите у автора код. Практически всегда при заказе в сервисе Фриланс  отдаётся исходный код.
 
barabashkakvn:
Попросите у автора код. Практически всегда при заказе в сервисе Фриланс  отдаётся исходный код.

Оу... Это не простой советник, его писали с десяток программистов. Нигде в заказах не публиковался. Вариант конечно попросить внедрить пару строк в код, но уж очень он недоверчив, его система это как его дитя.

Возможно есть вариант обойти такое? Через какой-то iBarsShift, обратной функцией, получить имя объекта, находящегося на номере бара... Выкрутиться можно конечно, решение уже есть, но все оно медленно работает.

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