Идиотизм... Боюсь опять забанят... :))

 

Очередной идеодизм, от МТ... Причем не просто, а опять нахрен ни кем не обнаруженный, вернее скажем так я не нашел, вопроса об этом на форуме...

Итак...

Предположим вы хотите перчислисть все обьекты на графике... Ну там линии, прямоугольники... и пр. ОК, это просто

Берем "обьект тотал", и в цикле шуршим от нуля до этого количества... ) Перечесляем и получаем имя обьекта по его индексу... Радости полные штаны, все работает как часы... Но...

НО! ) Допустим вам надо не просто их перечислить и там свойства какие-то посмотреть, ну и скажем еще и потереть некоторые из них... Отлично, скажете вы... - в чем проблема-то, есть же функция "обьект делит" ... Все просто перечесляем, получаем имя по индексы и трем обьект по имени. НО! Опять но... ) При стирании индекс-то уедет... Да, ха-ха проблема... ) Ну какая опять скажете вы нахрен проблема, так просто иди по индексу сзади... Ну типа чтобы после стирания сьезжали индексы только те что мы уже просмотрели... ОТЛИЧНО.... Суперское решение... ) Кретенизм конечно, так НЕ ДЕЛАЕТСЯ в правильных языках... Делается примерно так - Запрашиваем тотал, да и не плохо было бы и еще с вилдкардом, или регекспом, но не суть... Допустим, мы хотим сделать, как положенно! с точки зрения языков программирования, а не удобства... ОК, значит продолжим - итак - запрашиваем тотал, обьявляем начало транзакции, трем обьекты, обьявляем конец транзакции, или отмену... Все... После коммита, все обьекты помеченные для удаления удаляются... Если комита не было, а был дискадр, то просто метки удаляются... Точнее уже не важно, что там делается... А важно, что отмена... означает ничего не делать...

Ну дык, опять я тут мета-квотеров учу... Учитель нашелся... Ага... ) Обьясняю.... !!! Да, вроде, все рабоает с удалением... вот с добавление нахрен, вооще... Счас матом ругаться начну... ОКАЗЫВАЕТСЯ что перечесление обьектов по индексу, идет не по их порядку рождения... А по А-Л-Ф-А-В-И-Т-У... То есть, если мы добавляем обьект, начинающийся на букву которая идет раньше чем некоторый обьект который уже есть в этом иннумераторе... Ну в этом списке... То он будет добавлен с этот список раньше чем уже существующий обьект... Ну тоесть вы запросли тотал, стали перчислять обьеты, и добавлять новые по мере надобности... И ваш список весь уехал... Те обьеты которые вы еще не просмотрели могут оказаться в конце, за тем номером который вы прошли...

Нда... То есть даже и не знаю что получится, но уверен, что столько народу! на этом форуме перебирая обьекты об этой фиче ) мета-терминала и не догадывалась... И думала - что это за глюки при работе с обьектами...

//+------------------------------------------------------------------+
//|                                                     идеотизм.mq4 |
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright ""
#property link      ""

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
   int i;
   for( i=0;i<10;i++)
      ObjectCreate("O"+i,OBJ_HLINE,0,0,Ask+i*Point );
   
   Print("===================1====================");
   int t=ObjectsTotal();
   Print("T:",t);
   for( i=t-1;i>=0;i--)
      Print("#",i,"n:",ObjectName(i));
   
   Print("===================2=====================");
   
   Print("===================2.0=====================");
   
   for( i=0;i<3;i++)
      ObjectCreate("AO"+i,OBJ_HLINE,0,0,Ask+i*Point );
   
   t=ObjectsTotal();
   Print("T:",t);
   for( i=t-1;i>=0;i--)
      Print("#",i,"n:",ObjectName(i));
      
   for( i=0;i<3;i++)
      ObjectCreate("ZO"+i,OBJ_HLINE,0,0,Ask+i*Point );
   
   t=ObjectsTotal();
   Print("T:",t);
   for( i=t-1;i>=0;i--)
      Print("#",i,"n:",ObjectName(i));         
   
   return(0);
  }
//+------------------------------------------------------------------+

----

 
По алфавиту - эт жесть! Не баньте юзера.. хоть он и не прав с матом.
 
NProgrammer >>:

ОКАЗЫВАЕТСЯ что перечесление обьектов по индексу, идет не по их порядку рождения... А по А-Л-Ф-А-В-И-Т-У...

А кто запрещает в идентификаторы объекта добавлять время их создания, чтобы они перечислялись в нужном программеру порядке?


Неча на зеркало пенять, коли рожа крива (с) Козьма Прутков

 
Reshetov писал(а) >>

А кто запрещает в идентификаторы объекта добавлять время их создания, чтобы они перечислялись в нужном программеру порядке?


Неча на зеркало пенять, коли рожа крива (с) Козьма Прутков

А могет еще и лаком покрыть?

Ты чо? :)) Имя обьекта, во первых - имеет ограничение на длинну. во-вторых, может мне стоит предложить тебе "решение" это проблемы получше чем бред ввиде добавления времени... Ха-ха, а можно я поиздевась, над чудом которое решило поучить Программера программировать... Ага поиздевась, ты хоть понял что предлагаешь... ВРЕМЯ... умру со смеху... Да и еще с таким, понимаешь ПАФАСОМ... Чудо, время в МТ оно в СЕКУНДАХ... А если я 100 штук обьеков в одну секунду добавить захочу... Посоветуешь мне их нумеровать... Типа O#222364... :)) Ну, да... :))

А может MQ делать правильно...

 
NProgrammer >>:

ОКАЗЫВАЕТСЯ что перечесление обьектов по индексу, идет не по их порядку рождения... А по А-Л-Ф-А-В-И-Т-У...

Вообще-то, писал уже где-то об этом.

Этот способ мне понравился тем, что можно именем назначить объект первым. Т.е. он будет фоновым для всех остальных объектов.

Хотя, конечно, это можно было решить на уровне создания MQL4 в явном виде спецальными свойствами.

 
Zhunko писал(а) >>

Вообще-то, писал уже где-то об этом.

Этот способ мне понравился тем, что можно именем назначить объект первым. Т.е. он будет фоновым для всех остальных объектов.

Хотя, конечно, это можно было решить на уровне создания MQL4 в явном виде спецальными свойствами.

Господа, боюсь что не все поняли... ЭТО ПРОБЛЕМА... Которую чтобы решить надо программировать, нечто... Ну типа, сначала засосать все обьекты в некий массив, и потом по нему ходить, а иначе нельзя ВООБЩЕ незьзя перчислять обьекты, и хоть что-то делать с ними... Ведь услыште... же ... Представтьте что у вас есть индикатор, который тоже обьеты добавляет... Жуть...

ну точно жесть... :))

 
NProgrammer >>:

... Ну типа, сначала засосать все обьекты в некий массив, и потом по нему ходить,...

Хорошее предложение. Может так сделают в MQL5?...

 
NProgrammer >>:

А могет еще и лаком покрыть?

Ты чо? :)) Имя обьекта, во первых - имеет ограничение на длинну. во-вторых, может мне стоит предложить тебе "решение" это проблемы получше чем бред ввиде добавления времени... Ха-ха, а можно я поиздевась, над чудом которое решило поучить Программера программировать... Ага поиздевась, ты хоть понял что предлагаешь... ВРЕМЯ... умру со смеху... Да и еще с таким, понимаешь ПАФАСОМ... Чудо, время в МТ оно в СЕКУНДАХ... А если я 100 штук обьеков в одну секунду добавить захочу... Посоветуешь мне их нумеровать... Типа O#222364... :)) Ну, да... :))

А может MQ делать правильно...


Возможно у Юрия Решетова такой стиль общения

но пафос полезно стряхивать,он мешает часто!

Вы на него не сердитесь он не программист и просто проблемы не понял

--

по сути проблемы

при разработке MQL не все учли и видимо есть для совершенства большая ниша

действительно один из вариантов это массив в котором можно найти объекты по порядку добавления

а далее самостоятельно можно отсортировать

думаю спецы MQ это решат наилучшим способом

--

я обычно при создании делал так

ltDatCurBeg = CurrentTime();

oNameHIGHDay ="yhd";

lsDay = TimeToStr(ltDatCurBeg,TIME_DATE); // дата дня в строке


-- и где то в тексте

lNOHD = oNameHIGHDay + Symbol()+lsDay;

CreateObject( lNOHD, ...


к слову - надеюсь понятно что этот код срабатывал один раз в день или на этапе init а не на каждом тике


т е лепил в имя объекта дату время - если я знаю что к примеру этот объект внутри дня не может быть занесен два раза

я смело леплю ему имя в стиле

yhd20081231

но это касаемо только ситуации кода внутри дня конкретный объект создается один раз

это годится так же если объект на свечке находится один раз!

т е запросто можно привязать объект к дате времени свечи!


на практике я не встречал ситуации когда один тот же объект

надо рисовать НЕСКОЛЬКО раз на одной и той же свече + на одной и той же единице курса


--

к описанной проблеме это достаточно отдалено относится, но как стиль вполне годится

 

1.
у ANG3110 был очень древний индюк, AFIRMA что ли, он нарисован объектами.
вся линия - объектами. + Перерисовка Быстро и без Проблем.
2.
время в имени объекта при ручном креативе -ДА!,
....и где такие часы у которых такая секунда чтобы этакий белковый юзер успел создать N объектов.

ах да - етого юзера зовут Айпи)))

 

Я уже давно отказался от индикаторных буферов. Кривые они какие-то...

Всё рисую графическими объектами. Так возможностей больше, да и удобнее.

Есть только один недостаток. Удаление большого количества объектов по списку слишком долгая процедура. Это при количестве более 1000000. 

 

Один говорит "дайте мне несортированный массив, чтобы индексы не менялись при вставках", а другой тут же заявляет "да я все на объектах делаю, у меня более 1 млн объектов на графиках". Кого из них поддержат разработчики?


Если объяснять совсем просто, то мы реализовали очень эффективную работу с графическими объектами, что позволяет обслуживать списки из сотен тысяч объектов, эффективно их отрисовывать и мгновенно доступаться до любого из них. Это означает, что максимальный приоритет дается именно скорости работы с большими массивами.

В случае, если нужно иметь свои собственные индексы, то реализуйте их самостоятельно.


ps: за мат предупреждение

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