Помогите найти название(наименование) в коде

 

Всем привет, долгое время мучаюсь не знаю что дальше делать вот и решил написать:
В общем есть код, показывает историю сделок. Я же этот код немного переделал и перенес в индикатор, добавив кнопку на клавиатуре по нажатию на которую показывается эта самая история одреров, но чтобы этот код работал мне пришлось вручную узнать название, чтобы посмотреть вообще работает или нет, работает, но только у меня)) помогите определить название чтобы у всех работало.


Само название(эта сделка у меня была когда то):

sh569296869 selllimit 0.03 GBPUSD at 1.3561
мой код по нажатию кнопки показывает ордера, но не удаляет их:
     if(lparam==(StringGetChar(Knopka_P,0)))
     {
      if(ObjectFind(0,"sh569296869 selllimit 0.03 GBPUSD at 1.3561")>=0)
        {             
 
    for(int ihist=ObjectsTotal()-1; ihist>=0; ihist--)
     {
      if(StringFind(ObjectName(ihist),"sh",0)>=0) ObjectDelete(ObjectName(ihist));
     }
 
        }
      else
        {  

//--- История ордеров
  int ihist=0;
  
   string name;  // Имя объекта-стрелки
   int Arrow;    // Код стрелки 
   double Color; // Цвет стрелки

      //  Проверка для всех открытых и отложенных ордеров    
      for(ihist=0; ihist<OrdersTotal(); ihist++)
        {
         bool s=OrderSelect(ihist,SELECT_BY_POS);
         // Символы ордера и графика не совпадают
         if(OrderSymbol()!=Symbol())
            continue;        // Следующий ордер
         switch(OrderType()) // Параметры стрелок
           {
            case OP_BUY:       Arrow=1; Color=ihistbuy;
            name="sh"+OrderTicket()+" buy "+
                 DoubleToStr(OrderLots(),2)+" "+
                 OrderSymbol()+" at "+
                 DoubleToStr(OrderOpenPrice(),
                 MarketInfo(OrderSymbol(),MODE_DIGITS));
                 break;
            case OP_SELL:      Arrow=2; Color=ihistsell;
            name="sh"+OrderTicket()+" sell "+
                 DoubleToStr(OrderLots(),2)+" "+
                 OrderSymbol()+" at "+
                 DoubleToStr(OrderOpenPrice(),
                 MarketInfo(OrderSymbol(),MODE_DIGITS));
                 break;
            case OP_BUYLIMIT:  Arrow=1; Color=ihistbuylimit;
            name="sh"+OrderTicket()+" buylimit "+
                 DoubleToStr(OrderLots(),2)+" "+
                 OrderSymbol()+" at "+
                 DoubleToStr(OrderOpenPrice(),
                 MarketInfo(OrderSymbol(),MODE_DIGITS));
                 break;
            case OP_BUYSTOP:   Arrow=1; Color=ihistbuystop;
            name="sh"+OrderTicket()+" buystop "+
                 DoubleToStr(OrderLots(),2)+" "+
                 OrderSymbol()+" at "+
                 DoubleToStr(OrderOpenPrice(),
                 MarketInfo(OrderSymbol(),MODE_DIGITS));
                 break;
            case OP_SELLLIMIT: Arrow=2; Color=ihistselllimit;
            name="sh"+OrderTicket()+" selllimit "+
                 DoubleToStr(OrderLots(),2)+" "+
                 OrderSymbol()+" at "+
                 DoubleToStr(OrderOpenPrice(),
                 MarketInfo(OrderSymbol(),MODE_DIGITS));
                 break;
            case OP_SELLSTOP:  Arrow=2; Color=ihistsellstop;
            name="sh"+OrderTicket()+" sellstop "+
                 DoubleToStr(OrderLots(),2)+" "+
                 OrderSymbol()+" at "+
                 DoubleToStr(OrderOpenPrice(),
                 MarketInfo(OrderSymbol(),MODE_DIGITS));
                 break;
           }
         // Стрелка открытия ордера
         ObjectCreate(name,OBJ_ARROW,0,OrderOpenTime(),OrderOpenPrice());
         ObjectSet(name,OBJPROP_ARROWCODE,Arrow);
         ObjectSet(name,OBJPROP_COLOR,Color);
        }
      //  Проверка для всех закрытых и удалённых ордеров
      for(ihist=0; ihist<HistoryTotal(); ihist++)
        {
         bool s=OrderSelect(ihist,SELECT_BY_POS,MODE_HISTORY);
         // Символы ордера и графика не совпадают
         if(OrderSymbol()!=Symbol())
            continue;   // Следующий ордер
         switch(OrderType())
           {
            case OP_BUY:       Arrow=1; Color=ihistbuy;
            name="sh"+OrderTicket()+" buy "+
                 DoubleToStr(OrderLots(),2)+" "+
                 OrderSymbol()+" at "+
                 DoubleToStr(OrderOpenPrice(),
                 MarketInfo(OrderSymbol(),MODE_DIGITS));
                 break;
            case OP_SELL:      Arrow=2; Color=ihistsell;
            name="sh"+OrderTicket()+" sell "+
                 DoubleToStr(OrderLots(),2)+" "+
                 OrderSymbol()+" at "+
                 DoubleToStr(OrderOpenPrice(),
                 MarketInfo(OrderSymbol(),MODE_DIGITS));
                 break;
            case OP_BUYLIMIT:  Arrow=1; Color=ihistbuylimit;
            name="sh"+OrderTicket()+" buylimit "+
                 DoubleToStr(OrderLots(),2)+" "+
                 OrderSymbol()+" at "+
                 DoubleToStr(OrderOpenPrice(),
                 MarketInfo(OrderSymbol(),MODE_DIGITS));
                 break;
            case OP_BUYSTOP:   Arrow=1; Color=ihistbuystop;
            name="sh"+OrderTicket()+" buystop "+
                 DoubleToStr(OrderLots(),2)+" "+
                 OrderSymbol()+" at "+
                 DoubleToStr(OrderOpenPrice(),
                 MarketInfo(OrderSymbol(),MODE_DIGITS));
                 break;
            case OP_SELLLIMIT: Arrow=2; Color=ihistselllimit;
            name="sh"+OrderTicket()+" selllimit "+
                 DoubleToStr(OrderLots(),2)+" "+
                 OrderSymbol()+" at "+
                 DoubleToStr(OrderOpenPrice(),
                 MarketInfo(OrderSymbol(),MODE_DIGITS));
                 break;
            case OP_SELLSTOP:  Arrow=2; Color=ihistsellstop;
            name="sh"+OrderTicket()+" sellstop "+
                 DoubleToStr(OrderLots(),2)+" "+
                 OrderSymbol()+" at "+
                 DoubleToStr(OrderOpenPrice(),
                 MarketInfo(OrderSymbol(),MODE_DIGITS));
                 break;
           }
         // Стрелка открытия ордера
         ObjectCreate(name,OBJ_ARROW,0,OrderOpenTime(),OrderOpenPrice());
         ObjectSet(name,OBJPROP_ARROWCODE,Arrow);
         ObjectSet(name,OBJPROP_COLOR,Color);
         switch(OrderType())
           {
            case OP_BUY:       Arrow=1; Color=ihistbuy;
            name="sh"+OrderTicket()+" buy  "+
                 DoubleToStr(OrderLots(),2)+" "+
                 OrderSymbol()+" at "+
                 DoubleToStr(OrderOpenPrice(),
                 MarketInfo(OrderSymbol(),MODE_DIGITS));
                 break;
            case OP_SELL:      Arrow=2; Color=ihistsell;
            name="sh"+OrderTicket()+" sell  "+
                 DoubleToStr(OrderLots(),2)+" "+
                 OrderSymbol()+" at "+
                 DoubleToStr(OrderOpenPrice(),
                 MarketInfo(OrderSymbol(),MODE_DIGITS));
                 break;
            case OP_BUYLIMIT:  Arrow=1; Color=ihistbuylimit;
            name="sh"+OrderTicket()+" buylimit  "+
                 DoubleToStr(OrderLots(),2)+" "+
                 OrderSymbol()+" at "+
                 DoubleToStr(OrderOpenPrice(),
                 MarketInfo(OrderSymbol(),MODE_DIGITS));
                 break;
            case OP_BUYSTOP:   Arrow=1; Color=ihistbuystop;
            name="sh"+OrderTicket()+" buystop  "+
                 DoubleToStr(OrderLots(),2)+" "+
                 OrderSymbol()+" at "+
                 DoubleToStr(OrderOpenPrice(),
                 MarketInfo(OrderSymbol(),MODE_DIGITS));
                 break;
            case OP_SELLLIMIT: Arrow=2; Color=ihistselllimit;
            name="sh"+OrderTicket()+" selllimit  "+
                 DoubleToStr(OrderLots(),2)+" "+
                 OrderSymbol()+" at "+
                 DoubleToStr(OrderOpenPrice(),
                 MarketInfo(OrderSymbol(),MODE_DIGITS)); break;
                 case OP_SELLSTOP:  Arrow=2; Color=ihistsellstop;
            name="sh"+OrderTicket()+" sellstop  "+
                 DoubleToStr(OrderLots(),2)+" "+
                 OrderSymbol()+" at "+
                 DoubleToStr(OrderOpenPrice(),
                 MarketInfo(OrderSymbol(),MODE_DIGITS));
                 break;
           }
         // Стрелка закрытия ордера
         ObjectCreate(name,OBJ_ARROW,0,OrderCloseTime(),OrderClosePrice());
         ObjectSet(name,OBJPROP_ARROWCODE,3);
         ObjectSet(name,OBJPROP_COLOR,Color);
         // Прорисовка линий закрытых позиций
         name="sh"+OrderTicket()+DoubleToStr(OrderOpenPrice(),MarketInfo(OrderSymbol(),
                               MODE_DIGITS))+"->"+DoubleToStr(OrderClosePrice(),
                               MarketInfo(OrderSymbol(),MODE_DIGITS));
         ObjectCreate(name,OBJ_TREND,0,OrderOpenTime(),OrderOpenPrice(),
                      OrderCloseTime(),OrderClosePrice());
         ObjectSet(name,OBJPROP_STYLE,STYLE_DOT);
         ObjectSet(name,OBJPROP_WIDTH,1);
         ObjectSet(name,OBJPROP_RAY,false);
         ObjectSet(name,OBJPROP_COLOR,Color);
        }
//--- История ордеров
      
        }
     }
Файлы:
WeekAv3.mq4  22 kb
 

В данном случае sh - это префикс всех объектов, которые нужны. Не самый лучший префикс, но все равно сгодится. Вот по нему и ищите:

#define PREFIX "sh"
#define PREFIX_LEN int(StringLength(PREFIX))

for(int ihist=ObjectsTotal()-1; ihist>=0; ihist--)
     {
      if(StringFind(ObjectName(ihist),PREFIX,PREFIX_LEN)>=0) ObjectDelete(ObjectName(ihist));
     }

Код не проверял. Возможны опечатки.

 
Ihor Herasko:

В данном случае sh - это префикс всех объектов, которые нужны. Не самый лучший префикс, но все равно сгодится. Вот по нему и ищите:

Код не проверял. Возможны опечатки.

Спасибо большое, а что поставить вместо:

sh569296869 selllimit 0.03 GBPUSD at 1.3561
 
Ihor Herasko:

В данном случае sh - это префикс всех объектов, которые нужны. Не самый лучший префикс, но все равно сгодится. Вот по нему и ищите:

Код не проверял. Возможны опечатки.

Может это будет проще?

int  ObjectsDeleteAll(
   long           chart_id,   // идентификатор графика
   const string     prefix,   // префикс имени объекта
   int    sub_window=EMPTY,   // индекс окна
   int    object_type=EMPTY   // тип объекта для удаления
   );
ObjectsDeleteAll - Графические объекты - Справочник MQL4
ObjectsDeleteAll - Графические объекты - Справочник MQL4
  • docs.mql4.com
[in]  Префикс, по которому будут удалены все объекты, чьи имена начинаются с данного набора символов. Префикс можно указывать как 'name' или 'name*' – оба варианта работают одинаково. Если в качестве префикса указана пустая строка, то будут удалены объекты с любым именем. [in]  Необязательный параметр. Индекс окна, на котором будут удалены...
 
Ничего не подошло, пожалуйста помогите
как удалить и как найти название
 
Ihor Herasko:

В данном случае sh - это префикс всех объектов, которые нужны. Не самый лучший префикс, но все равно сгодится. Вот по нему и ищите:

Код не проверял. Возможны опечатки.

ошибка появляется

 
vebster005:

Спасибо большое, а что поставить вместо:

Ничего не нужно. Нашли объект по префиксу - дальше, если требуется можно распарсить его название на составляющие: тип ордера, символ, объем, цена открытия. Ведь, насколько я понимаю, формат названия Вы сами установили.

 
vebster005:

Всем привет, долгое время мучаюсь не знаю что дальше делать вот и решил написать:
В общем есть код, показывает историю сделок. Я же этот код немного переделал и перенес в индикатор, добавив кнопку на клавиатуре по нажатию на которую показывается эта самая история одреров, но чтобы этот код работал мне пришлось вручную узнать название, чтобы посмотреть вообще работает или нет, работает, но только у меня)) помогите определить название чтобы у всех работало.


Само название(эта сделка у меня была когда то):

мой код по нажатию кнопки показывает ордера, но не удаляет их:

Расскажите сначала почему именно это название получилось. По какому критерию именно этот ордер был выбран для названия? Наверное лучше изменить критерий на время, тип ордера или ещё что-то.

 
vebster005:

Всем привет, долгое время мучаюсь не знаю что дальше делать вот и решил написать:
В общем есть код, показывает историю сделок. Я же этот код немного переделал и перенес в индикатор, добавив кнопку на клавиатуре по нажатию на которую показывается эта самая история одреров, но чтобы этот код работал мне пришлось вручную узнать название, чтобы посмотреть вообще работает или нет, работает, но только у меня)) помогите определить название чтобы у всех работало.


Само название(эта сделка у меня была когда то):

мой код по нажатию кнопки показывает ордера, но не удаляет их:

помнится в 4-ке были ограничения на длину строки для имени граф.объекта. Не стоит идентификаторы делать излишне длинными.

префикс+номер_тикета+опция более чем достаточно для уникальности и поиска. А человеко-читаемую информация помещать в  OBJPROP_TEXT, OBJPROP_TOOLTIP  

 
Alexey Viktorov:

Расскажите сначала почему именно это название получилось. По какому критерию именно этот ордер был выбран для названия? Наверное лучше изменить критерий на время, тип ордера или ещё что-то.

Нужно вставить любой элемент что мне поставить за место:

sh569296869 selllimit 0.03 GBPUSD at 1.3561
 
vebster005:

Нужно вставить любой элемент что мне поставить за место:

Ну... как вы ответили так и обратно получите: любой элемент и подставляйте.
Причина обращения: