помогите с кусочком кода. что, тут, не так?

koko_moko
381
koko_moko  
void OnDeinit(const int reason)      
   { 
      string z[4];                           //-- массив результатов со строками 
      ushort sep=StringGetCharacter(" ",0);  //--- получим код разделителя 
      int obj_total=ObjectsTotal(0,0);       
      for(int i;i<obj_total;i++) 
          { StringSplit(ObjectName(i),sep,z); Print(i,">>>", obj_total); if (z[0]=="NAME") {ObjectDelete(ObjectName(i));}    }    
     
      EventKillTimer(); //--- destroy timer
   }                            


провел 4 часа в экспериментах. узнал что удаляется ровно половина обьектов. а потом 2017.08.07 00:50:10.218 _T+copy EURUSD,M5: array out of range in '_T+copy.mq4' (31,79)

хочу разобраться где проблема
Sofiia Butenko
15122
Sofiia Butenko  
koko_moko:


провел 4 часа в экспериментах. узнал что удаляется ровно половина обьектов. а потом 2017.08.07 00:50:10.218 _T+copy EURUSD,M5: array out of range in '_T+copy.mq4' (31,79)

хочу разобраться где проблема

1) См.строчку 31

2) Считайте с конца

for(int i;i<obj_total;i++)  

for(int i=total-1;i>=0;i--)  

Вы удалением меняете порядок объектов

3) Не инициализировать переменные - очень плохая примета (см. счетчик) 

------

И зачем вообще перебирать объекты? Можно задавать заранее единый префикс и потом удалить одной строчкой - ObjectsDeleteAll 

koko_moko
381
koko_moko  
Galina Bobro:

1) См.строчку 31   --- выделил в коде к чему относится ошибка

2) Считайте с конца --- пробую/ РАБОТАЕТ!!! хоть и не понимаю зачем -1, но без него не работает.

for(int i;i<obj_total;i++)  

for(int i=total-1;i>=0;i--)  

Вы удалением меняете порядок объектов  ---хммм....даже и представить не мог такое, спасибо

3) Не инициализировать переменные - очень плохая примета (см. счетчик)   ---- не понял 

4) И что находится в массиве z также загадка...    --- там имя обьектов разбитое разделителем.  "прогаваська версия четыре". в ячейках каждое слово по порядку


СПАСИБО!!))

"И зачем вообще перебирать объекты? Можно задавать заранее единый префикс и потом удалить одной строчкой - ObjectsDeleteAll "

что за чертовщина !!?!? давно обновили эту ф-цию ???? заглянул в справку и никогда такого не видел, что б префикс .... извините. спасибо!

Maxim Kuznetsov
17830
Maxim Kuznetsov  
koko_moko:


провел 4 часа в экспериментах. узнал что удаляется ровно половина обьектов. а потом 2017.08.07 00:50:10.218 _T+copy EURUSD,M5: array out of range in '_T+copy.mq4' (31,79)

хочу разобраться где проблема

и кстати есть стандартная функция ObjectsDeleteAll() которая заменяет то что вы написали. Вы же хотели удалить все объекты начинающиеся с NAME ??

ObjectsDeleteAll(0,"NAME ") вам в помощь :-) Только обратите внимание что сепаратор " " включен в имя, чтобы случайно не поудалялись "NAMEFOO"

Konstantin Erin
2833
Konstantin Erin  
koko_moko:  удаляется ровно половина обьектов.  хочу разобраться где проблема

Вот здесь объяснено для ордеров. Для объектов то же самое...

koko_moko
381
koko_moko  
STARIJ:

Вот здесь объяснено для ордеров. Для объектов то же самое...


да, спасибо, почитал. просто я не думал что номера плавающие.

Maxim Kuznetsov:

и кстати есть стандартная функция ObjectsDeleteAll() которая заменяет то что вы написали. Вы же хотели удалить все объекты начинающиеся с NAME ??

ObjectsDeleteAll(0,"NAME ") вам в помощь :-) Только обратите внимание что сепаратор " " включен в имя, чтобы случайно не поудалялись "NAMEFOO"


спасибо, просто не знал что там есть параметры, почему то.

Виктор Астахов
107
Виктор Астахов  
Maxim Kuznetsov:

и кстати есть стандартная функция ObjectsDeleteAll() которая заменяет то что вы написали. Вы же хотели удалить все объекты начинающиеся с NAME ??

ObjectsDeleteAll(0,"NAME ") вам в помощь :-) Только обратите внимание что сепаратор " " включен в имя, чтобы случайно не поудалялись "NAMEFOO"

у меня почему то не работает это

string magic = "fibo_label ";
string obj_name = magic + time[i]+" "+high[i];
ObjectCreate(0,obj_name,OBJ_FIBO,0,time[i],high[i],time[i]+3600,low[i]);
ObjectSetInteger(0,obj_name,OBJPROP_LEVELS,1);
ChartRedraw();

  void OnDeinit()
  { 
  ObjectsDeleteAll(0,magic,-1,-1);
  ChartRedraw();
  }

индикатор в подокне у меня, а объекты на главном графике

FXwin
808
FXwin  
Виктор Астахов:

у меня почему то не работает это

индикатор в подокне у меня, а объекты на главном графике

Ищет объекты с похожим названием и удаляет все разом

string magic = "fibo_label ";

void OnDeinit(const int reason)      
   { 
      DellObj(magic);    
      EventKillTimer(); //--- destroy timer
   }   
//+------------------------------------------------------------------+
//| Удаление объектов с графика                                      |
//+------------------------------------------------------------------+
void DellObj(string obj){
   string name;
   for(int cnt=ObjectsTotal()-1;cnt>=0;cnt--){
      name=ObjectName(cnt);
      if(StringFind(name,obj,0)>-1) ObjectDelete(name);    
WindowRedraw();}}
Vitaly Muzichenko
16839
Vitaly Muzichenko  
FXwin:

Ищет объекты с похожим названием и удаляет все разом

ObjectsDeleteAll(0,"odj_name");
vponed
151
vponed  
FXwin:

Ищет объекты с похожим названием и удаляет все разом

да я так могу...непонятно, почему стандартная функция не пашет