Как узнать имя последнего созданного объекта?

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

Здравствуйте! Как узнать имя последнего созданного объекта. Сначала я подумал отслеживать через функцию которая возвращает общее кол-во объектов на графике ObjectsTotal() и при изменении общего кол-ва обьектов на графике просто обращаться к последнему объекту через общее кол-во ;

x=0;

y=ObjectsTotal();

if (y>x) {

Comment ("Имя нового обьекта ", ObjectName(y));

x=y;

}

Но! Общее кол-во обьектов не совпадает с индексом последнего добавленного объекта на графике,(MQL их сортирует по своему!)

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

Пересмотрел справку по объектам и никакого решения не нашел.

Прошу Вашей помощи!

P.S. Объекты типа Text, Rectangle и TrendLine

pavlick_
773
pavlick_  
Вручную объекты создаёте, я так понимаю, тогда думаю надо отлавливать событие CHARTEVENT_OBJECT_CREATE в обработчике OnChartEvent, и формировать упорядоченную очередь самостоятельно (самое простое из того, что приходит в голову - добавлять целочисленные метки в описание). Объект с наибольшим значением метки - последний.
https://www.mql5.com/ru/docs/basis/function/events#onchartevent
Tango_X
715
Tango_X  
pavlick_:
Вручную объекты создаёте, я так понимаю, тогда думаю надо отлавливать событие CHARTEVENT_OBJECT_CREATE в обработчике OnChartEvent, и формировать упорядоченную очередь самостоятельно (самое простое из того, что приходит в голову - добавлять целочисленные метки в описание). Объект с наибольшим значением метки - последний.
https://www.mql5.com/ru/docs/basis/function/events#onchartevent
Обьекты я не создаю... их создает индикатор - мне их надо как-то отлавливать.. Пришла мысль попробовать использовать время создания объекта (OBJPROP_CREATETIME), но в любом случае на каждом новом объекте нужно будет пересматривать весь массив объектов! а если их тысячи.....
Vitalie Postolache
7137
Vitalie Postolache  
Tango_X:
Обьекты я не создаю... их создает индикатор - мне их надо как-то отлавливать.. Пришла мысль попробовать использовать время создания объекта (OBJPROP_CREATETIME)

Верно.

Добавлено: Но в предыдущем вашем способе тоже могло бы получиться, если бы не ошибка логики. Счёт в программе ведётся от 0, значит последний из 100 - 99-й, а не 100-й.

Другими словами -  Comment ("Имя нового обьекта ", ObjectName(ObjectsTotal()-1));

Tango_X
715
Tango_X  
Vitalie Postolache:
Верно.
Спасибо! Другого варианта никто не предложит, чтобы не пересматривать весь массив объектов?
Artyom Trishkin
Модератор
52740
Artyom Trishkin  
Tango_X:

Здравствуйте! Как узнать имя последнего созданного объекта. Сначала я подумал отслеживать через функцию которая возвращает общее кол-во объектов на графике ObjectsTotal() и при изменении общего кол-ва обьектов на графике просто обращаться к последнему объекту через общее кол-во ;

x=0;

y=ObjectsTotal();

if (y>x) {

Comment ("Имя нового обьекта ", ObjectName(y));

x=y;

}

Но! Общее кол-во обьектов не совпадает с индексом последнего добавленного объекта на графике,(MQL их сортирует по своему!)

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

Пересмотрел справку по объектам и никакого решения не нашел.

Прошу Вашей помощи!

P.S. Объекты типа Text, Rectangle и TrendLine

А вы проверьте что вам вернут эти строки:

string obj_name1=ObjectName(0,ObjectsTotal(0)-1);
string obj_name2=ObjectName(0,0);
сразу и увидите с каким индексом у вас последний объект - либо 0, либо ObjectsTotal()-1
Tango_X
715
Tango_X  
Artyom Trishkin:

А вы проверьте что вам вернут эти строки:

string obj_name1=ObjectName(0,ObjectsTotal(0)-1);
string obj_name2=ObjectName(0,0);
сразу и увидите с каким индексом у вас последний объект - либо 0, либо ObjectsTotal()-1

Ответ не верный.

obj_name1 - возвращает последний элемент в массиве объектов но не последний элемент на графике

obj_name2 - возвращает просто первый графический объект.

Artyom Trishkin
Модератор
52740
Artyom Trishkin  
Tango_X:

Ответ не верный.

obj_name1 - возвращает последний элемент в массиве объектов но не последний элемент на графике

obj_name2 - возвращает просто первый графический объект.

А ChartID, переданный в функцию как 0 - для текущего графика - разве не выбирает именно из текущего графика? Экспериментируйте сами тогда.

Причём тут "ответ не верный"? Вы меня экзаменуете что-ли?

Так я вам скажу - я очень легко нахожу нужные мне объекты на любом графике.

Вот и вы поищите.

Tango_X
715
Tango_X  
Artyom Trishkin:

А ChartID, переданный в функцию как 0 - для текущего графика - разве не выбирает именно из текущего графика? Экспериментируйте сами тогда.

Причём тут "ответ не верный"? Вы меня экзаменуете что-ли?

Так я вам скажу - я очень легко нахожу нужные мне объекты на любом графике.

Вот и вы поищите.

Вы наверное не поняли вопроса, а так же ответа! Попробую еще раз объяснить...

К примеру на графике уже лежит 10 объектов и считать мы их можем легко через ObjectsTotal() по порядковому номеру. Проблема в другом... При добавлении нового объекта он никак не будет 11-ым! он может быть 3,4,5,6,7, и т.д.... но не более чем ObjectsTotal(). Как определить индекс нового объекта?

Это не экзамен = это просто вопрос, и если Вы отвечаете неверно - то я так Вам и отвечаю - что ответ не верный.

Или Вы считаете что Ваш ответ верный?

Artyom Trishkin
Модератор
52740
Artyom Trishkin  
Tango_X:

Вы наверное не поняли вопроса, а так же ответа! Попробую еще раз объяснить...

К примеру на графике уже лежит 10 объектов и считать мы их можем легко через ObjectsTotal() по порядковому номеру. Проблема в другом... При добавлении нового объекта он никак не будет 11-ым! он может быть 3,4,5,6,7, и т.д.... но не более чем ObjectsTotal(). Как определить индекс нового объекта?

Это не экзамен = это просто вопрос, и если Вы отвечаете неверно - то я так Вам и отвечаю - что ответ не верный.

Или Вы считаете что Ваш ответ верный?

Я вам не давал готового решения... Я просто предложил вам проверить что выдадут предложенные строки. Это не был ответ на ваш вопрос. 
Tango_X
715
Tango_X  
Artyom Trishkin:
Я вам не давал готового решения... Я просто предложил вам проверить что выдадут предложенные строки. Это не был ответ на ваш вопрос. 
Спасибо за отклик и желание помочь!
123
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий