Алгоритм определения последнего созданного объекта. Читать обязательно!!!!
Последний объект определяется по номеру, который находится в названии объектов. Например: "Fibo 13194", "Fibo 13222". Предполагается что максимальный номер соответствует последнему созданному объекту.
Нюанс заключается в том, что в MT4 нумерация объектов сбрасывается минимум раз в сутки где-то в 18 МСК у Fibo или если объектов слишком много (номера объектов переваливают за 65000). Например после "Fibo 13194" идет "Fibo 123" - официально в этом случае последним будет считаться "Fibo 13194".
К сожалению обойти это пока низя и других способов определения последнего созданного объекта я пока не нашел.
насколько я понял, номера объектов нужны вот в таком контексте
string name = RECTANGLE_NAME() + ObjectsTotal(OBJ_RECTANGLE);
и нужны только лишь для определения последнего созданного, через перебор всех имен, вытаскивание номера, определение максимального, потом еще скрипт на ренейм...
завязки на поиск объекта по его номеру не нашел.
зачем тогда завязываться на системные номера, если они плавают и столько гемора с этим?
вижу несколько решений, они похожи...
например:
1.создавать спец объект OBJ_TEXT с постоянным именем хитрым - "хитроеимя", во время инициализации любого скрипта- проверяем - если такого обекта нет, значит в первый раз, или ошибка какая-то итп, если надо - создаем.
писать в него через разделители имена последних созданных объектов
или просто номера:
FIBO 12345;RECT 123567;
при создании нового объекта достаем функцией ObjectDescription( "хитроеимя")
описание и вытаскиваем нужный номер, прибавляем 1 - создаем новое имя нового последнего объекта.
обновляем текст в объекте "хитроеимя"...
2.тоже самое - но с файлом (FileWrite()...)
3.хитрый обжект для каждого типа...
еще мысль - может для нумерации подойдет время создания в формате 20090723154933... тогда можно процедурку очистки написать старых объектов чтоб не мешались - например, удалять каждый день объекты созданные более чем месяц назад... ну это уже изыски.
судя по уровню скриптов - дальше додумаешь
зы. если я не врубился в тему и все гораздо хуже - заранее сорри, хочу помочь, т.к. вижу что работа проведена большая и вроде качественно.
---------------
додумал в спокойной обстановке - может быть проблема, если удалили объект,в частности -последний ,тогда нужен предпоследний, который теперь новый последний...
вот тут конечно засада. тогда (если важен не порядок создания, а порядок размещения на нрафике) можно нумеровать например временем , с которого рисуется объект, если таких несколько - то добавлять секунды например.
тут от полного перебора объектов не уйдешь, но можно организовать связный массив - в имени объекта хранить номер предыдущего. тогда можно перемещаться туда-сюда, ну соответственно будет обвязка - корректировка следующего объекта при удалении предыдущего, вставка объекта...
нда, наверное все-таки проще нумеровать попорядку, но номер последнего - хранить и последовательно увеличивать, а не вытаскивать из ObjectsTotal() - ведь (в том числе) количество объктов может оказаться одинаковым в разное время(хотя это и редкость), но вот гарантировать, что это будет наибольший номер среди уже нумерованных объектов - нельзя.
на случай переполнения - переименовать RenameOldObjects в CompactObjectNumbers... хотя она может и не понадобиться - какая там макс длина имени? сколько знаков номера влезет?
Сообщение изменено: forxpvm, 23 Июль 2009 - 06:29 .