Possible to have a trailing stop loss on losing trades? - page 2

 

I thought that it would be better with 4 functions.  One to manage the Trailingstop on winning buy trades, one to manage the Trailingstop on winning sell trades, one to manage the Stoploss on losing Buy trades and one to manage the Stoploss on losing sell trades.  Everything seems to work fine except the Stoploss on losing Buy trades.  Can someone please have alook and let me know what is wrong?

//+------------------------------------------------------------------+
//| Trailingstopbuy                                                  |
//+------------------------------------------------------------------+
void TrailingstopBuy(){
   double TSTP=TrailingStart*Pip,Trail=TrailingStop*Pip;
   for(int i=OrdersTotal()-1; i>=0; i--){
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
         if(OrderSymbol()==Symbol()){               
            if(OrderType()==OP_BUY){
               if(Bid-OrderOpenPrice()>TSTP){
                  if(OrderStopLoss()<Bid-Trail){
                     if(OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Trail,OrderTakeProfit(),0,Orange))
                     RefreshRates();
                    }
                  }
                }
              }
            }
          }
        }    
//+------------------------------------------------------------------+
//| TrailingstopSell                                                 |
//+------------------------------------------------------------------+
void TrailingstopSell(){
   double TSTP=TrailingStart*Pip,Trail=TrailingStop*Pip;
   for(int i=OrdersTotal()-1; i>=0; i--){
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
         if(OrderSymbol()==Symbol()){               
            if(OrderType()==OP_SELL){
               if(OrderOpenPrice()-Ask>TSTP){
                  if(OrderStopLoss()>Ask+Trail || OrderStopLoss()==0){
                     if(OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Trail,OrderTakeProfit(),0,Orange))
                      RefreshRates();
                     }
                   }
                 }
               }
             }
           }
         }
//+------------------------------------------------------------------+
//| Stoplosssell                                                     |
//+------------------------------------------------------------------+
void StoplossSell(){
   double TSTP=StoplossStart*Pip,Trail=StoplossStop*Pip;
   for(int i=OrdersTotal()-1; i>=0; i--){
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
         if(OrderSymbol()==Symbol()){               
            if(OrderType()==OP_SELL){
               if(OrderOpenPrice()-Bid>=TSTP){
                  if(OrderStopLoss()>Bid+Trail){
                  if(OrderModify(OrderTicket(),OrderOpenPrice(),Bid+Trail,OrderTakeProfit(),0,Orange))
                  RefreshRates();
                 }
                  if(OrderStopLoss()>Bid+Trail){
                        if(OrderModify(OrderTicket(),OrderOpenPrice(),Bid+Trail,OrderTakeProfit(),0,Orange))
                        RefreshRates();
                       }
                     }
                   }
                 }
               }
             }
//+------------------------------------------------------------------+
//| Stoplossbuy                                                      |
//+------------------------------------------------------------------+
void StoplossBuy(){
   double TSTP=StoplossStart*Pip,Trail=StoplossStop*Pip;
   for(int i=OrdersTotal()-1; i>=0; i--){
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
         if(OrderSymbol()==Symbol()){               
            if(OrderType()==OP_BUY){
               if(Ask-OrderOpenPrice()>=TSTP){
                  if(OrderStopLoss()<Ask-Trail
                  if(OrderModify(OrderTicket(),OrderOpenPrice(),Ask-Trail,OrderTakeProfit(),0,Orange))
                  RefreshRates();
                  }
                  if(OrderStopLoss()<Ask-Trail){
                        if(OrderModify(OrderTicket(),OrderOpenPrice(),Ask-Trail,OrderTakeProfit(),0,Orange))
                        RefreshRates();
                       }
                     }
                   }
                 }
               }
             }





 

The above didn't work either, so my latest attempt is as follows, but it doesn't work all the time:

//+------------------------------------------------------------------+
//| TrailingStop                                                    |
//+------------------------------------------------------------------+
void Trailing_Stop(){
   double TSTPwin=TrailingStart*Pip,Trailwin=TrailingStop*Pip;
   double TSTPlose=StoplossStart*Pip,Traillose=StoplossStop*Pip;
   for(int i=OrdersTotal()-1; i>=0; i--){
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
         if(OrderSymbol()==Symbol()){               
            if(OrderType()==OP_BUY){
               if(Bid-OrderOpenPrice()>=TSTPwin){
                  if(OrderStopLoss()<=Bid-Trailwin){
                     Trailing_StopSell();
                     if(OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Trailwin,OrderTakeProfit(),0,Orange))
                     RefreshRates();
                    }
                  }
                }
            if(OrderType()==OP_SELL){
               if(OrderOpenPrice()-Ask>=TSTPwin){
                  if(OrderStopLoss()>=Ask+Trailwin || OrderStopLoss()==0){
                     Trailing_StopBuy();
                     if(OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Trailwin,OrderTakeProfit(),0,Orange))
                      RefreshRates();;
                     }
                   }
                 }
               }
             } 
           }
         } 
//+------------------------------------------------------------------+
//| StoplossBuy                                                         |
//+------------------------------------------------------------------+
void Trailing_StopBuy(){
   double TSTPwin=TrailingStart*Pip,Trailwin=TrailingStop*Pip;
   double TSTPlose=StoplossStart*Pip,Traillose=StoplossStop*Pip;
   for(int i=OrdersTotal()-1; i>=0; i--){
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
         if(OrderSymbol()==Symbol()){               
            if(OrderType()==OP_BUY){
               if(Ask-OrderOpenPrice()>=TSTPlose){
                  if(OrderStopLoss()<=Ask-Traillose){
                     if(OrderModify(OrderTicket(),OrderOpenPrice(),Ask-Traillose,OrderTakeProfit(),0,Orange))
                      RefreshRates();
               
                    }
                  }
                   }
                 }
               }
             }  
           }         
//+------------------------------------------------------------------+
//| Stoploss                                                         |
//+------------------------------------------------------------------+
void Trailing_StopSell(){
   double TSTPwin=TrailingStart*Pip,Trailwin=TrailingStop*Pip;
   double TSTPlose=StoplossStart*Pip,Traillose=StoplossStop*Pip;
   for(int i=OrdersTotal()-1; i>=0; i--){
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
         if(OrderSymbol()==Symbol()){               
            if(OrderType()==OP_SELL){
               if(OrderOpenPrice()-Bid>=TSTPlose){
                  if(OrderStopLoss()>=Bid+Traillose || OrderStopLoss()==0){
                     if(OrderModify(OrderTicket(),OrderOpenPrice(),Bid+Traillose,OrderTakeProfit(),0,Orange))
                      RefreshRates();
               
                    }
                  }
               
                     }
                   }
                 }
               }
             }
Reason: