Requisição inválida Erro 4756

 

Estou tentando adaptar um EA exemplo do site mql5, mas quando tento executar o teste recebo o erro:

failed request buy 4.00 at 42505.00000 sl: 42475.00000 tp: 42605.00000 [Invalid request]

O código de erro é este: 10013

Já pesquisei nos fóruns e já usei a função ZeroMemory(), já pesquisei o valor de SYMBOL_TRADE_STOPS_LEVEL e ainda não consegui fazer funcionar.

O exemplo é este: https://www.mql5.com/pt/articles/116

Minha função de compra, adaptada, é esta:

void SingleMA::openBuy(ENUM_ORDER_TYPE otype,double askprice,double SL,double TP,int dev,string comment="")
  {
      ZeroMemory(tradeRequest);
      tradeRequest.action=TRADE_ACTION_DEAL;
      tradeRequest.type=otype;
      tradeRequest.volume=lots;
      tradeRequest.price=askprice;
      tradeRequest.sl=SL;
      tradeRequest.tp=TP;
      tradeRequest.deviation=dev;
      tradeRequest.magic=magicNumber;
      tradeRequest.symbol=symbol;
      tradeRequest.type_filling=ORDER_FILLING_FOK;
      tradeRequest.type_time=ORDER_TIME_DAY;
      //--- send
      OrderSend(tradeRequest,tradeResult);
      Print("Código de resultado: "+tradeResult.retcode);
      //--- check result
      if(tradeResult.retcode==10009 || tradeResult.retcode==10008) //Request successfully completed 
        {
         Alert("Uma ordem de compra foi colocada com sucesso. Ticket#:",tradeResult.order,"!!");
        }
      else
        {
         msgError= "A ordem de compra não pode ser completada!";
         codeError =GetLastError();
         showError(msgError,codeError);
        }
  }

 

O código que chama a ordem de compra é este:

 if(objEA.checkBuy())
 {
   double askPrice = NormalizeDouble(latestPrice.ask,_Digits);
   double askSTP = NormalizeDouble(latestPrice.ask - STP*_Point,_Digits);
   double askTKP = NormalizeDouble(latestPrice.ask + TKP*_Point,_Digits);
   objEA.openBuy(ORDER_TYPE_BUY,askPrice,askSTP,askTKP,dev);
 }

 

 Alguém sabe o motivo do erro e como corrigir?

 Obs: o exemplo, com as mesmas funções e mesmos parâmetros, executa as ordens normalmente. 

 
Já encontrei o erro. Eu simplesmente havia me esquecido de configurar a propriedade Symbol no objeto criado. Era o sono...
 
mabesi:
Já encontrei o erro. Eu simplesmente havia me esquecido de configurar a propriedade Symbol no objeto criado. Era o sono...

Olá mabesi,

Que bom que você resolveu o problema! 

Na verdade, bastaria modificar sua função openbuy() em uma linha. Ao invés de

tradeRequest.symbol=symbol;

você poderia utilizar 

tradeRequest.symbol=_Symbol;

Abraços,

Malacarne 

Razão: