Как разобрать строку (описание) передаваемую из индикатора?

 

У меня советник выставляет ордера по линиям выставленным ранее, данные для выставления ордера берутся из описания этой горизонтальной линии. Пример моего кода. Такой разбор не очень удачен, так как надо вручную выставлять с какого места начинать и заканчивать разбор строги, что достаточно примитивно. Какие есть идеи. Буду очень признателен за помощь.

int obj_total=ObjectsTotal();
      for(int i=0;i<obj_total;i++)
      {
         string LineName=ObjectName(i);
         if(ObjectType(LineName)!=OBJ_HLINE)continue;// если объект на графике не линия с данными об отложеннике, то идем дальше
         string LineText=ObjectDescription(LineName);
   
         string strOrderType=StringSubstr(LineText,0,1);
         int iOrderType=StrToInteger(strOrderType);
   
         string strOrderLots=StringSubstr(LineText,1,4);
         double dOrderLots=StrToDouble(strOrderLots);
         double nOrderLots=NormalizeDouble(dOrderLots,2);

         string strOrderOpenPrice=StringSubstr(LineText,5,7);
         double dOrderOpenPrice=StrToDouble(strOrderOpenPrice);
         double nOrderOpenPrice=NormalizeDouble(dOrderOpenPrice,Digits);
            
         string strOrderStopLoss=StringSubstr(LineText,12,7);
         double dOrderStopLoss=StrToDouble(strOrderStopLoss);
         double nOrderStopLoss=NormalizeDouble(dOrderStopLoss,Digits);
         
         string strOrderTakeProfit=StringSubstr(LineText,19,7);
         double dOrderTakeProfit=StrToDouble(strOrderTakeProfit);
         double nOrderTakeProfit=NormalizeDouble(dOrderTakeProfit,Digits);
         
         string strOrderMagicNumber=StringSubstr(LineText,26);
         int iOrderMagicNumber=StrToInteger(strOrderMagicNumber);
     
         double margin=MarketInfo(Symbol(),MODE_STOPLEVEL)*Point;
         
         RefreshRates();
         if(Ask<nOrderOpenPrice-margin || Bid>nOrderOpenPrice+margin)
         {
            if(ObjectDelete(LineName)==true)
            {
               RefreshRates();
               int ticketdel=OrderSend(Symbol(),iOrderType,nOrderLots,nOrderOpenPrice,30,nOrderStopLoss,nOrderTakeProfit,"Delete order",iOrderMagicNumber,0,CLR_NONE);      
               Print("Ордер с тикетом - ",ticketdel," был установлен из удаленных");   
            }
         }
         else//if(iOrderType==OP_BUYSTOP&&Ask>=nOrderOpenPrice-margin*Point || iOrderType==OP_SELLSTOP&&Bid<nOrderOpenPrice+margin*Point)
         {   
            if(ObjectDelete(LineName)==true)
            {
               Print("Данные по ордеру были удаленны, так как цена не соответствует требованиям");
               continue;
            }
         }
      } 
 
Есть идеи?
 

Удаленный ордер записывается в историю ордеров, в линию забей только тикет, и при обратной установке читай тикет и ищи в истории по тикету, найдя ордер копируй нужные параметры для вновь устанавливаемого ордера.

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

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