Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Ведешь свой блог? Размести в нем ссылку на MQL5.community и заработай!
Grizly
136
Grizly 2013.08.21 10:04 

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

на чистом графике запускается скрипт, который рисует 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);
  }
Mikhail Kozhemyako
1180
Mikhail Kozhemyako 2013.08.21 10:21  

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

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

string ObjectName( int index)

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

Valeriy Korobeynik
24363
Valeriy Korobeynik 2013.08.21 10:24  
Grizly:

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

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

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

Рустам
3604
Рустам 2013.08.21 10:31  
перебирать надо все объекты причем задом наперед, как с ордерами.
Grizly
136
Grizly 2013.08.21 11:16  
FAQ:
перебирать надо все объекты причем задом наперед, как с ордерами.

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

ObjectDelete(ObjectName(h-t));

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

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

Grizly
136
Grizly 2013.08.21 11:16  
Sepulca:

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

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

string ObjectName( int index)

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


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

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

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

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


потому что когда один объект уничтожается, то количество уменьшается и счетчик передвигается на один вниз. если считать по порядку, то будет удалять через один.
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий