Caso estranho em que ordem a mercado foi enviada com sucesso, mas não foi aberta

 

Olá, tudo bem?


Passei por um caso ontem, em que a ordem a mercado foi enviada e processada, mas a posição não foi aberta.

Alguém já passou por isso e sabe o que pode ter causado? Agradeço antecipadamente!



void OpenSellPosition(double BidPrice)
  {
   MqlTradeRequest request;
   MqlTradeResult result;

   ZeroMemory(request);
   ZeroMemory(result);

// Configurar a requisição
   request.action   = TRADE_ACTION_DEAL;
   request.symbol   = _Symbol;
   request.volume   = Lots;
   request.type     = ORDER_TYPE_SELL;
   request.price    = BidPrice;
   request.sl       = BidPrice + StopLoss_Points;
   request.tp       = NormalizeToHalf(previousClose - (previousClose * TP_Percent));
   request.deviation= Slippage;
   request.magic    = MagicNumber;
   request.comment  = "Venda baseada na estratégia LBNF";

// Enviar a ordem
   if(!OrderSend(request, result))
     {
      PrintFormat("Erro ao enviar a ordem de venda: %s", result.comment);
     }
   else
     {
      PrintFormat("Ordem de venda enviada com sucesso. Ticket: %d", result.order);
      lastPositionTicket = result.order;
      lastPositionType = POSITION_TYPE_SELL;
      isPositioned = true;
     }
  }
 
Jvmelo:

Olá, tudo bem?


Passei por um caso ontem, em que a ordem a mercado foi enviada e processada, mas a posição não foi aberta.

Alguém já passou por isso e sabe o que pode ter causado? Agradeço antecipadamente!



Esse código só envia a ordem, tem que esperar ela ser consumida. Eu não vi configuração do filling, o valor para ficar com a ordem pendente esperando consumir tudo:

request.type_filling=ORDER_FILLING_RETURN;

O padrão parece ser o ORDER_FILLING_FOK que é o zero, ja que nada foi dito que pode ou nao ser aceito pelo ativo (pode consultar as propriedades do mesmo).

 
Ricardo Rodrigues Lucca #:

Esse código só envia a ordem, tem que esperar ela ser consumida. Eu não vi configuração do filling, o valor para ficar com a ordem pendente esperando consumir tudo:

O padrão parece ser o ORDER_FILLING_FOK que é o zero, ja que nada foi dito que pode ou nao ser aceito pelo ativo (pode consultar as propriedades do mesmo).

Na RICO isso é bastante frequente. Eu criei uma rotina para verificar a posição dos ativos após o envio das ordens, acrescentando um limite de tempo (mínimo de 60 segundos, que foi o tempo que eu medi para os problemas se definirem junto à corretora, o "timeout"). Como regra, tudo da corretora precisa ser conferido, mas as corretoras costumam bloquear acesso às informações mais fundamentais, como saldo, por exemplo, ou posições abertas por outros homebrokers, os quais também não são listados para o MT5.

 
Zoltan Paulini #:

Na RICO isso é bastante frequente. Eu criei uma rotina para verificar a posição dos ativos após o envio das ordens, acrescentando um limite de tempo (mínimo de 60 segundos, que foi o tempo que eu medi para os problemas se definirem junto à corretora, o "timeout"). Como regra, tudo da corretora precisa ser conferido, mas as corretoras costumam bloquear acesso às informações mais fundamentais, como saldo, por exemplo, ou posições abertas por outros homebrokers, os quais também não são listados para o MT5.

Tenso né, nessa corretora também não da(va) pra usar a atualização de ordens que congelava o programa porque ele se perdia. Em uma outra, teve uma excentricidade que mesmo em ações sem o F no final o volume minimo vinha sempre 1 então meu calculo de lote minimo não funcionava -.-'