ERRO AO MODIFICAR STOP E TAKE

 

Fala galera, eu de novo. Seguinte, o código do jeito que está aqui em baixo modifica normalmente a ordem na conta demo, mas quando vou pra conta real fica dando erro ao modificar o stoploss e takeprofit da ordem


//CONFIGURANDO O REQUEST,RESULT E ULTIMO PRECO
      MqlTradeRequest request;
      MqlTradeResult result;
      MqlTick latest_price;
      
      SymbolInfoTick(_Symbol,latest_price);
      
      ZeroMemory(request);
      SymbolInfoTick(Symbol(),latest_price);
      
      //AJUSTANDO OS DADOS PARA TICK DO SIMBOLO
      double ticksize= SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE); 
      
      double lastTick = (MathRound(latest_price.last/ticksize)*ticksize);
      
      double envUpTick = (MathRound(EnvelopesUpper[0]/ticksize)*ticksize);
      double envDownTick = (MathRound(EnvelopesLower[0]/ticksize)*ticksize);
      double ATRTick = (MathRound(ATR[0]/ticksize)*ticksize);
            
      //COMPRA E VENDA
      if(lastTick == envUpTick && isNewBar() && PositionSelect(_Symbol) == false
         && trade_time == true && trade_money == true && ATR[0] < 100)
      {
         Trade.Sell(Contrato,_Symbol,lastTick,(lastTick+ATRTick),(lastTick-ATRTick),"OneShotEA");
         Trade.SetExpertMagicNumber(MagicNumber);
         if(myposition.Select(_Symbol))
         {
            do Sleep(100); while(PositionSelect(_Symbol) == false);
            Trade.PositionModify(_Symbol,(lastTick+ATRTick),(lastTick-ATRTick));
         }
      }
      else if(lastTick == envDownTick  && isNewBar() && PositionSelect(_Symbol) == false
               && trade_time == true && trade_money == true && ATR[0] < 100)
      {
         Trade.Buy(Contrato,_Symbol,lastTick,(lastTick-ATRTick),(lastTick+ATRTick),"OneShotEA");
         Trade.SetExpertMagicNumber(MagicNumber);
         if(myposition.Select(_Symbol))
         {
            do Sleep(100); while(PositionSelect(_Symbol) == false);
            Trade.PositionModify(_Symbol,(lastTick-ATRTick),(lastTick+ATRTick));
         }
      }////COMPRA E VENDA



 

Modifiquei essa linha do código. Na modal está normal, mas na XP só vai a ordem e não tá dando erro no Diário.


do Sleep(100); while(PositionSelect(_Symbol) == false);
            double positionOpenPrice = myposition.PriceOpen();
            Trade.PositionModify(_Symbol,(positionOpenPrice+ATRTick),(positionOpenPrice-ATRTick+offset_takeprofit));
do Sleep(100); while(PositionSelect(_Symbol) == false);
            double positionOpenPrice = myposition.PriceOpen();
            Trade.PositionModify(_Symbol,(positionOpenPrice-ATRTick),(positionOpenPrice+ATRTick-offset_takeprofit));
 
northedan:

Modifiquei essa linha do código. Na modal está normal, mas na XP só vai a ordem e não tá dando erro no Diário.


Sugiro que tente reescrever a funçao sem usar a classe CTrade. Ao invés disso, tente utilizar "request.tp" e "request.sl" e enviar ordens via "OrderSend".

[ ]´s

 
Joscelino Celso de Oliveira:

Sugiro que tente reescrever a funçao sem usar a classe CTrade. Ao invés disso, tente utilizar "request.tp" e "request.sl" e enviar ordens via "OrderSend".

[ ]´s

Blz.. Vou deixar aqui no ponto pra testar na segunda.
 
Joscelino Celso de Oliveira:

Sugiro que tente reescrever a funçao sem usar a classe CTrade. Ao invés disso, tente utilizar "request.tp" e "request.sl" e enviar ordens via "OrderSend".

[ ]´s

Deu certo amigo, obrigado.
Razão: