Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Roman Starinskij
1917
Roman Starinskij  

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

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

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

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

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

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

Vladimir Karputov
Модератор
85556
Vladimir Karputov  
WePlexus:

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

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

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

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

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

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

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

ObjectName

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

Roman Starinskij
1917
Roman Starinskij  
barabashkakvn:

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

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

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

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

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

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

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

123
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий