problems, failed to modify invalid stops error?

 

Hello. when my expert advisor is back tested some of the open orders stop losses are modified by a trailing stop function.

Sometimes during these instances an invalid stops error is returned failed to modify, and every time the modification of the open orders stops is the same.

The error is "failed modify #508 buy 0.01 EURUSD sl: 1.12411, tp: 0.00000 -> sl: 1.12411, tp: 0.00000 [Invalid stops]".

Help is greatly appreciated



   MqlRates PriceData[];
   ArraySetAsSeries(PriceData, true);
   int Data = CopyRates(_Symbol,_Period,0,10,PriceData);

   static double BreakEvenBuy;
   
   static double BreakEvenSell;
   

   double min_volume = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN),_Digits);
   
   double max_volume = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MAX),_Digits);
   
   if(IncreaseLots > max_volume)
   {
   
   IncreaseLots = max_volume;
   }
   
   double Ask =  NormalizeDouble(SymbolInfoDouble(_Symbol, SYMBOL_ASK),_Digits);
   double Bid =  NormalizeDouble(SymbolInfoDouble(_Symbol, SYMBOL_BID),_Digits);
   
   
   double Balance = AccountInfoDouble(ACCOUNT_BALANCE);
   
   double IncreaseLots = NormalizeDouble(Balance/9000,2);


   if(isNewBar() == true) 
   {
   
   
  trade.Sell(IncreaseLots,NULL,Bid,(Bid+400*_Point),0,NULL);
   
   BreakEvenSell = Bid - 100 * _Point;
   

   
   
   
   }
   
   
   
   if(isNewBar() == true)
  {
   
   trade.Buy(IncreaseLots,NULL,Ask,Ask-400*_Point,0,NULL); //20 minute 26 consequtive wins 7 consequitive losses works since 2000 gdpusd got to five million 2009 got to over five million froze
  
   BreakEvenBuy = Ask + 100 * _Point;
   
  
   
   }
   

   
   CheckEnvelopesSellTrailingStop(Bid,BreakEvenSell);
   
   CheckEnvelopesBuyTrailingStop(Ask,BreakEvenBuy);
   
   
   
   }
   
   
   
void CheckEnvelopesBuyTrailingStop(double Ask,double BreakEvenBuy)
{  

   double StopLoss = (Ask - 50 * _Point);

   for(int i = PositionsTotal() - 1; i>=0; i--)
   {
   
      string symbol = PositionGetSymbol(i);
      
      if(_Symbol==symbol && Ask > BreakEvenBuy)
         {
         
            ulong PositionTicket = PositionGetInteger(POSITION_TICKET);
            
            double CurrentStopLoss = PositionGetDouble(POSITION_SL);
            
            if( (CurrentStopLoss < StopLoss) || (CurrentStopLoss==0) )
              {
              
              trade.PositionModify(PositionTicket,StopLoss,0);
              }
         
         
         }
   
   
   }


}
   
   
   
   
   
   

void CheckEnvelopesSellTrailingStop(double Bid,double BreakEvenSell)
{  

   double StopLoss = (Bid + 50 * _Point);

   for(int i = PositionsTotal() - 1; i>=0; i--)
   {
   
      string symbol = PositionGetSymbol(i);
      
      if(_Symbol==symbol && BreakEvenSell > Bid)
         {
         
            ulong PositionTicket = PositionGetInteger(POSITION_TICKET);
            
            double CurrentStopLoss = PositionGetDouble(POSITION_SL);
            
            if( (CurrentStopLoss > StopLoss) || (CurrentStopLoss==0) )
              {
              
              trade.PositionModify(PositionTicket,StopLoss,0);
              }
         
         
         }
   
   
   }




      bool isNewBar()
  {
   static datetime t_bar=iTime(_Symbol,_Period,0);
   datetime time=iTime(_Symbol,_Period,0);
//---
   if(t_bar==time)
      return false;
   t_bar=time;
//---
   return true;
  
  
  }

Documentation on MQL5: Constants, Enumerations and Structures / Codes of Errors and Warnings / Trade Server Return Codes
Documentation on MQL5: Constants, Enumerations and Structures / Codes of Errors and Warnings / Trade Server Return Codes
  • www.mql5.com
Trade Server Return Codes - Codes of Errors and Warnings - Constants, Enumerations and Structures - MQL5 Reference - Reference on algorithmic/automated trading language for MetaTrader 5
 
SocratesPhilosopher:

Hello. when my expert advisor is back tested some of the open orders stop losses are modified by a trailing stop function.

Sometimes during these instances an invalid stops error is returned failed to modify, and every time the modification of the open orders stops is the same.

The error is "failed modify #508 buy 0.01 EURUSD sl: 1.12411, tp: 0.00000 -> sl: 1.12411, tp: 0.00000 [Invalid stops]".

Help is greatly appreciated



Properly select a position to work with it 

See example here

For invalid stops issue check here

How to start with MQL5
How to start with MQL5
  • 2020.03.12
  • www.mql5.com
This thread discusses MQL5 code examples. There will be examples of how to get data from indicators, how to program advisors...
 
SocratesPhilosopher:

Hello. when my expert advisor is back tested some of the open orders stop losses are modified by a trailing stop function.

Sometimes during these instances an invalid stops error is returned failed to modify, and every time the modification of the open orders stops is the same.

The error is "failed modify #508 buy 0.01 EURUSD sl: 1.12411, tp: 0.00000 -> sl: 1.12411, tp: 0.00000 [Invalid stops]".

Help is greatly appreciated



if( (CurrentStopLoss > StopLoss) || (CurrentStopLoss==0) )
              {
              trade.PositionModify(PositionTicket,0,0);
              trade.PositionModify(PositionTicket,StopLoss,0);
              }
 
  trade.Sell(IncreaseLots,NULL,Bid,(Bid+400*_Point),0,NULL);
   ⋮
   trade.Buy(IncreaseLots,NULL,Ask,Ask-400*_Point,0,NULL); 

You buy at the Ask and sell at the Bid. Pending Buy Stop orders become market orders when hit by the Ask.

  1. Your buy order's TP/SL (or Sell Stop's/Sell Limit's entry) are triggered when the Bid / OrderClosePrice reaches it. Using Ask±n, makes your SL shorter and your TP longer, by the spread. Don't you want the specified amount used in either direction?

  2. Your sell order's TP/SL (or Buy Stop's/Buy Limit's entry) will be triggered when the Ask / OrderClosePrice reaches it. To trigger close to a specific Bid price, add the average spread.
              MODE_SPREAD (Paul) - MQL4 programming forum - Page 3 #25

  3. The charts show Bid prices only. Turn on the Ask line to see how big the spread is (Tools → Options (control+O) → charts → Show ask line.)

    Most brokers with variable spreads widen considerably at end of day (5 PM ET) ± 30 minutes.
    My GBPJPY shows average spread = 26 points, average maximum spread = 134.
    My EURCHF shows average spread = 18 points, average maximum spread = 106.
    (your broker will be similar).
              Is it reasonable to have such a huge spreads (20 PIP spreads) in EURCHF? - General - MQL5 programming forum (2022)