Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Поиск в документации доступен через MetaTrader 5. Ищи и изучай!
Roman Starinskij
1870
Roman Starinskij 2014.11.27 06:20 

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

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

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

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

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

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

Vladimir Karputov
Модератор
46155
Vladimir Karputov 2014.11.27 06:39  
WePlexus:

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

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

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

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

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

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

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

ObjectName

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

Roman Starinskij
1870
Roman Starinskij 2014.11.27 06:41  
barabashkakvn:

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

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

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

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

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

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

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

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