Дорогие товарищи! подсобите советом!

 

Проблема такая:

на чистом графике запускается скрипт, который рисует 10 линий на графике, делает задержку 5 сек, и удаляет эти 10 линий. Почемуто часть из них не удаляет...

скрин во время задержки:

скрин после задержки:

#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
string p; int t, h, s, k; //переменные для графической части
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  { 
for (t=1; t<=10; t++)
{
p=DoubleToStr( t, 0); Print(p);
ObjectCreate("line"+p, OBJ_TREND, 0, Time[t*50], High[t*50], Time[t*100], Low[t*100]);//10, High[10], 100, Low[100]);//Time[10], High[10], Time[100], Low[100]);
ObjectSet("line"+p, OBJPROP_RAY, false);
ObjectSet("line"+p, OBJPROP_COLOR, Yellow);
ObjectSet("line"+p, OBJPROP_STYLE, STYLE_DASH);
ObjectSet("line"+p, OBJPROP_WIDTH, 1);
}
Sleep(5000);

 h=ObjectsTotal();
 for (t=1; t<=h; t++)
 { 
 ObjectDelete(ObjectName(t));
 }
   return(0);
  }
 

Может стоит попробовать for (t=0; t<h; t++)

из документации:

string ObjectName( int index)

index - Порядковый номер в списке объектов. Должен быть большим или равным 0 и меньшим, чем ObjectsTotal().

 
Grizly:

Проблема такая:

на чистом графике запускается скрипт, который рисует 10 линий на графике, делает задержку 5 сек, и удаляет эти 10 линий. Почемуто часть из них не удаляет...

Если не принципиально, можно вместо перебора объектов использовать ObjectsDeleteAll().

 
перебирать надо все объекты причем задом наперед, как с ордерами.
 
FAQ:
перебирать надо все объекты причем задом наперед, как с ордерами.

спасибо за подсказку, сам бы неделю искал, а почему надо именно наоборот перебирать?

ObjectDelete(ObjectName(h-t));

теперь все исправно!

П.С.: спс всем кто откликнулся!

 
Sepulca:

Может стоит попробовать for (t=0; t<h; t++)

из документации:

string ObjectName( int index)

index - Порядковый номер в списке объектов. Должен быть большим или равным 0 и меньшим, чем ObjectsTotal().


согласен, но почемуто все работает исправно))
 
Grizly:

спасибо за подсказку, сам бы неделю искал, а почему надо именно наоборот перебирать?

теперь все исправно!

П.С.: спс всем кто откликнулся!


потому что когда один объект уничтожается, то количество уменьшается и счетчик передвигается на один вниз. если считать по порядку, то будет удалять через один.
Причина обращения: