Change SL to breakeven

 

Hi,

I'd like to change my SL to breakeven when certain logic triggered. 

string GetTradeManagementStatus(int SymbolLoop)
  {
   string CurrentSymbol = SymbolArray[SymbolLoop];

//Need to copy values from indicator buffers to local buffers
   int    numValuesNeeded = 3;
   double bufferIndi[];
   
   //copy value to local buffer
   bool fillSuccessMiddle = tlamCopyBuffer(handle_DonchianChannel[SymbolLoop], 2, bufferMid, numValuesNeeded, CurrentSymbol, "Donchian Channel");

   double CurrentIndi= bufferIndi[0];

   double CurrentClose = iClose(CurrentSymbol, Period(), 0);
   double CurrentAsk   = SymbolInfoDouble(CurrentSymbol,SYMBOL_ASK);
   double CurrentBid   = SymbolInfoDouble(CurrentSymbol,SYMBOL_BID);

//INSERT YOUR OWN LOGIC MANAGEMENT HERE
   if(logic here)
      return("CHANGE BUY SL");
   else
      if(logic here)
         return("CHANGE SELL SL");
    else
      return("NO CHANGE IN SL");
  }


void ProcessTradeMangement(int SymbolLoop, string TradeManagementDirection)
  {
   string CurrentSymbol = SymbolArray[SymbolLoop];
   int    buyCount      = 0;
   int    sellCount     = 0;
   bool   changeSL      = false;

   //SETUP CTrade tradeObject HERE
   CTrade tradeObject;
   //SETUP CPositionInfo Pinfo HERE
   CPositionInfo  position;
   
   //looked for open position direction
   for(int i=PositionsTotal()-1; i>=0; i--)
      if(position.SelectByIndex(i))
         if(position.Symbol() == CurrentSymbol && position.Magic() == MagicNumber)
           {   
            if(position.PositionType() == POSITION_TYPE_BUY)
               buyCount++;
            if(position.PositionType() == POSITION_TYPE_SELL)
               sellCount++;
           }

   if(TradeManagementDirection == "CHANGE BUY SL" && buyCount>0)
      changeSL = true;

   if(TradeManagementDirection == "CHANGE SELL SL" && sellCount>0)
      changeSL = true;
   
   if(changeSL == true)
     {
      double openPrice = position.PriceOpen();
      double TP        = position.TakeProfit();
      bool bTMCheck = tradeObject.PositionModify(CurrentSymbol, openPrice, TP);
     }
  }

I used code above to change SL to Breakeven when logic returns true. I'd like to ask if there's anything that can be optimize or corrected.

Thank you

 
Luandre Ezra: if there's anything that can be optimize or corrected
  1. Do not use strings or ints
          return("CHANGE BUY SL");
       ⋮
             return("CHANGE SELL SL");
        else
          return("NO CHANGE IN SL");
    ⋮
    void ProcessTradeMangement(int SymbolLoop, string TradeManagementDirection)
       bool   changeSL      = false;    
       if(TradeManagementDirection == "CHANGE BUY SL" && buyCount>0)
           changeSL = true;
    when you mean an enumeration:
    enumeration ChangeSL{ CSL_BUY, CSL_SELL, CSL_IDLE};
       ⋮
          return(CSL_BUY);
       ⋮
    void ProcessTradeMangement(int SymbolLoop, ChangeSL TradeManagementDirection)
       ⋮
       if(TradeManagementDirection == CSL_BUY && buyCount>0)
  2. Simplify
    bool   changeSL      = false;    
    if(TradeManagementDirection == "CHANGE BUY SL" && buyCount>0)
        changeSL = true;
    your booleans
    bool   changeSL      = TradeManagementDirection == "CHANGE BUY SL" && buyCount>0;