Expert Advisors • Indicators • Scripts • Libraries

MQL.RobotFX.org is the biggest collection of MetaTrader expert advisors (MT5 & MT4), indicators, scripts and libraries that can be used to improve trading results, minimize risks or simply automate trading tasks

MetaTrader 4 Script | Trailing Function

MetaTrader Experts, Indicators, Scripts and Libraries
//+------------------------------------------------------------------+  //|                                                                  |  //+------------------------------------------------------------------+  void Trailing(double trailingStartPips, double _trailingPips, double initialStopLossInPips=0, bool useSymbol=false, bool useMagicNumber=false, int _magicNumber=0, bool initialStopLossWillBeDone=true) {      for(int i=OrdersTotal()-1; i>=0; i--) {          if(OrderSelect(i,SELECT_BY_POS)) {              bool magic = (useMagicNumber) ? (OrderMagicNumber()==_magicNumber) : true;              bool symbol = (useSymbol) ? (OrderSymbol()==Symbol()) : true;              if(!magic || !symbol) continue;              if(OrderType() == OP_BUY) {                  if(OrderStopLoss() >= NormalizeDouble(OrderOpenPrice() + initialStopLossInPips*_Point*10,_Digits) && OrderStopLoss() != 0) {//OrderStopLoss() != 0 is not necessary here cause in Buy NULL SL is Zero and 0 Will never be grater than Order Open Price + Jobhi hai                      if(Bid - OrderStopLoss() > _trailingPips * Point() * 10) {                          if(NormalizeDouble(OrderStopLoss(),_Digits) != NormalizeDouble(Bid - (_trailingPips * Point() * 10),_Digits)) {                              ResetLastError();                              if(!OrderModify(OrderTicket(), OrderOpenPrice(), Bid - _trailingPips * Point() * 10, OrderTakeProfit(), 0)) {                                  Print("ERROR:"," Order Modify Failed: ",_LastError,"  ||  Function Name: ",__FUNCTION__,"  ||  Line Number: ",__LINE__);                              }                          }                      }                  } else if(initialStopLossWillBeDone && OrderStopLoss() < NormalizeDouble(OrderOpenPrice() + initialStopLossInPips*_Point*10,_Digits)){                      if(Bid - OrderOpenPrice() >= trailingStartPips * Point() * 10) {                          if(OrderStopLoss() != NormalizeDouble(OrderOpenPrice() + initialStopLossInPips*_Point*10,_Digits)) {                              ResetLastError();                              if(!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(OrderOpenPrice() + initialStopLossInPips*_Point*10,_Digits), OrderTakeProfit(), 0)) {                                  Print("ERROR:"," Order Modify Failed: ",_LastError,"  ||  Function Name: ",__FUNCTION__,"  ||  Line Number: ",__LINE__);                              }                          }                      }                  }              }              if(OrderType() == OP_SELL) {                  if(OrderStopLoss() <= NormalizeDouble(OrderOpenPrice() - initialStopLossInPips*_Point*10,_Digits) && OrderStopLoss() != 0) {//OrderStopLoss() != 0 is necessary here cause in Sell NULL SL is Zero and 0 Will Always be Lower than Order Open Price - Jobhi hai                      if(OrderStopLoss() - Bid > _trailingPips * Point() * 10) {                          if(NormalizeDouble(OrderStopLoss(),_Digits) != NormalizeDouble((_trailingPips * Point() * 10) + Bid,_Digits)) {                              ResetLastError();                              if(!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble((_trailingPips * Point() * 10) + Bid,_Digits), OrderTakeProfit(), 0)) {                                  Print("ERROR:"," Order Modify Failed: ",_LastError,"  ||  Function Name: ",__FUNCTION__,"  ||  Line Number: ",__LINE__);                              }                          }                      }                  } else if(initialStopLossWillBeDone && (OrderStopLoss() > NormalizeDouble(OrderOpenPrice() - initialStopLossInPips*_Point*10,_Digits) || OrderStopLoss()==0)) {                      if(OrderOpenPrice() - Bid >= trailingStartPips * Point() * 10) {                          if(OrderStopLoss() != NormalizeDouble(OrderOpenPrice() - Bid >= _trailingPips * Point() * 10,_Digits)) {                              ResetLastError();                              if(!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(OrderOpenPrice() - initialStopLossInPips*_Point*10,_Digits), OrderTakeProfit(), 0)) {                                  Print("ERROR:"," Order Modify Failed: ",_LastError,"  ||  Function Name: ",__FUNCTION__,"  ||  Line Number: ",__LINE__);                              }                          }                      }                  }              }          }      }  }
37065