
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
extern int SL = 30;
extern int TP = 60;  
extern int slippage = 3;
extern bool remove_SL_TP = true;

string SL_name = "trendline_EA_SL";
string TP_name = "trendline_EA_TP";   

int init()
{
   int total, cnt;
   double value_SL, value_TP;
   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 (OrderStopLoss() > 0) value_SL = OrderStopLoss();
           else value_SL = Bid - SL * Point;
           
           if (OrderTakeProfit() > 0) value_TP = OrderTakeProfit();   
           else value_TP = Bid + TP * Point;
           }
         else if(OrderType()==OP_SELL)   // short position is opened
           {
           if (OrderStopLoss() > 0) value_SL = OrderStopLoss();
           else value_SL = Ask + SL * Point;
           
           if (OrderTakeProfit() > 0) value_TP = OrderTakeProfit();
           else value_TP = Ask - TP * Point;
           
           }
         if (!ObjectCreate(SL_name, OBJ_TREND, 0, Time[100], value_SL, Time[0], value_SL))
         {
            Print("error: can't create text_object! code #",GetLastError());
            return(0);
         }
    
         if (!ObjectCreate(TP_name, OBJ_TREND, 0, Time[100], value_TP, Time[0], value_TP))
         {
            Print("error: can't create text_object! code #",GetLastError());
            return(0);
         }       
         ObjectSet(SL_name, OBJPROP_COLOR, Red);
         ObjectSet(TP_name, OBJPROP_COLOR, Green);   
         
         ObjectSet(SL_name, OBJPROP_WIDTH, 2);
         ObjectSet(TP_name, OBJPROP_WIDTH, 2);      
            
         
         if (remove_SL_TP == true) OrderModify(OrderTicket(),OrderOpenPrice(),0,0,0,CLR_NONE);
                       
        break;   
        }   
   }
 
   

}

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 level =ObjectGetValueByShift(name, 0);
    
    if (name == TP_name) level_TP = level;
    if (name == SL_name) 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 && level_TP > 0)|| (Bid <= level_SL && level_SL > 0))
           {           
              OrderClose(OrderTicket(),OrderLots(),Bid,slippage,CLR_NONE); // close position
              ObjectDelete(TP_name);
              ObjectDelete(SL_name);
           }
           }
         else if(OrderType()==OP_SELL)   // short position is opened
           {
       
           if ((Ask <= level_TP && level_TP > 0) || (Ask >= level_SL && level_SL > 0))
           {        
              OrderClose(OrderTicket(),OrderLots(),Ask,slippage,CLR_NONE); // close position    
              ObjectDelete(TP_name);
              ObjectDelete(SL_name);
                     
           }   
           }   
      }
      }     
    
   


      
   return(0);
  }

