
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
extern string SL_name = "SL";
extern string TP_name = "TP";      

int start()
  {
  int cnt, total;
  double level_TP, level_SL;
  
  level_TP = 0;
  level_SL = 0;
  
   double pt=MarketInfo(Symbol(),MODE_POINT);

   for(int i=0;i<=ObjectsTotal();i++) {
    string name=ObjectName(i);
   

    if(StringLen(name)==0) {
     continue;
    }
   
    if(ObjectType(name)!=OBJ_TREND) {
     continue;
    }
   
    if(StringFind(name,"helpline")!=-1) {
     continue; 
    }
 
    if(name != TP_name && name != SL_name) {
     continue; 
    } 
    

    double datediff1=iBarShift(NULL,0,ObjectGet(name,OBJPROP_TIME2))-iBarShift(NULL,0,ObjectGet(name,OBJPROP_TIME1));
    double datediff2=iBarShift(NULL,0,ObjectGet(name,OBJPROP_TIME1));
   
    double pricediff=ObjectGet(name,OBJPROP_PRICE2)-ObjectGet(name,OBJPROP_PRICE1);
    
    double level=-(pricediff*datediff2/datediff1)+ObjectGet(name,OBJPROP_PRICE1);
    
    if (name == "TP") level_TP = level;
    if (name == "SL") level_SL = level;
}    
   
   total=OrdersTotal();        
       for(cnt=0;cnt<total;cnt++)
     {

      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderSymbol()==Symbol())
        {
         if(OrderType()==OP_BUY)   // long position is opened
           {

           if (Bid >= level_TP || Bid <= level_SL)
              OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE); // close position
           
           }
         else if(OrderType()==OP_SELL)   // short position is opened
           {
       
           if (Ask <= level_TP || Ask >= level_SL)
              OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE); // close position           
           }   
      }
      }     
    
   


      
   return(0);
  }

