Erro com Modificação de StopLoss

 

Galera, sou meio novo no MetaTrader e estava desenvolvendo algumas coisas, no entanto, está dando o seguinte erro:

'3002739829': failed modify #0 buy 0 sl:0.00000, tp:0.00000 -> sl98835.00000, tp: 99795.00000 [invalid request]

No backtest a função funciona normalmente. Na conta demo, também pedi para imprimir todas as variaveis (supostamente zeradas) e estão todas com valores corretos, alguem sabe o que pode ser?


void ProtectionOrder(double &ask, double &bid) 
   {
   double pt = Pontos*SymbolInfoDouble(ativo,SYMBOL_POINT);
   
   for(int i=PositionsTotal()-1; i>=0; i--)
     {
      MqlTradeRequest myrequest;
      MqlTradeResult myresult;
      ZeroMemory(myrequest);
      
      ulong  position_ticket=PositionGetTicket(i);
      string position_symbol=PositionGetString(POSITION_SYMBOL); 
      int    digits=(int)SymbolInfoInteger(position_symbol,SYMBOL_DIGITS); s
      ulong  magic=PositionGetInteger(POSITION_MAGIC);
      double volume=PositionGetDouble(POSITION_VOLUME);    
      double sl=PositionGetDouble(POSITION_SL);  
      double tp=PositionGetDouble(POSITION_TP);  
      double op=PositionGetDouble(POSITION_PRICE_OPEN);
      ENUM_POSITION_TYPE type=PositionGetInteger(POSITION_TYPE);  
      
      if(protecao == 0) //se for breakeven
        {
         if(type == POSITION_TYPE_BUY && ask-op >= pt && sl != op)
            {
             myrequest.action = TRADE_ACTION_SLTP;
             myrequest.position=position_ticket; 
             myrequest.sl = NormalizeDouble(op,_Digits);
             myrequest.tp = NormalizeDouble(tp,_Digits);
             myrequest.magic = MagicNum;
             OrderSend (myrequest,myresult);
            } 
         if(type == POSITION_TYPE_SELL && op-bid >= pt && sl != op)
            {
             myrequest.action = TRADE_ACTION_SLTP;
             myrequest.position=position_ticket; 
             myrequest.sl = NormalizeDouble(op,_Digits);
             myrequest.tp = NormalizeDouble(tp,_Digits);
             myrequest.magic = MagicNum;
             OrderSend (myrequest,myresult);
            }
        }
      if(protecao == 1) //se for trailing stop
        {
         if(type == POSITION_TYPE_BUY && ask-sl > pt)
            {
             myrequest.action = TRADE_ACTION_SLTP;
             myrequest.position=position_ticket; 
             myrequest.sl = NormalizeDouble(ask-pt,_Digits);
             myrequest.tp = NormalizeDouble(tp,_Digits);
             myrequest.magic = MagicNum;
             OrderSend (myrequest,myresult);
            } 
         if(type == POSITION_TYPE_SELL && sl-bid > pt )
            {
             myrequest.action = TRADE_ACTION_SLTP;
             myrequest.position=position_ticket; 
             myrequest.sl = NormalizeDouble(bid+pt,_Digits);
             myrequest.tp = NormalizeDouble(tp,_Digits);
             myrequest.magic = MagicNum;
             OrderSend (myrequest,myresult);
            }
        }   
     }  
   }
 

Experimente adicionar também:


request.symbol = position_symbol;


(:

Razão: