Posição na fila do book de ofertas?

Para adicionar comentários, por favor Faça o login ou registrar
Rodrigo Pandini
720
Rodrigo Pandini  

Pessoal, bom dia.

É possível saber qual a posição na fila do book de ofertas que a sua ordem está?

Fiz uns testes aqui mas estou com algumas dúvidas e queria discutir com vocês.
No exemplo abaixo, a cada execução do BookEvent, é consultado o volume corrente em um determinado preço (onde foi posta a ordem). Se o volume diminuir, ele atualiza a posição na fila.

Mas como determinar a posição inicial na fila?
Quando você envia a ordem, temos que esperar a confirmação de que a ordem foi aceita. Se consultarmos o volume assim que a ordem foi aceita, esse volume indicaria a posição correta inicial da ordem?

Outra dúvida, pelo que li na documentação e nos artigos, quando você usa MarketBookGet, o tamanho do array que é retornado, depende da correta, de ativo, etc. Pelos testes rápidos aqui, na conta demo da XP, pro WINV16 o tamanho tá retornado 32. Ou seja, seriam 32 níveis de preço que estão no book (vamos supor 16 pra venda e 16 pra compra). Se o seu preço (onde foi posta a ordem) estiver fora desse intervalo, e ocorrer a diminuição do volume nesse preço (ordens que foram canceladas), você não vai conseguir "enxergar" essa mudança, correto?

void OnBookEvent(const string &symbol) {
  if(symbol == Symbol()) {
    MqlBookInfo last_bookArray[];
    if(MarketBookGet(Symbol(), last_bookArray)) {
      for(int i = 0; i < ArraySize(last_bookArray); i++) {
        MqlBookInfo curr_info = last_bookArray[i];
        if(curr_info.price == orderPrice) {
          if(isFirstTime) {
            pos = curr_info.volume - orderVolume;
            isFirstTime = false;
          }
          else
          if(curr_info.volume < pos) {
            pos = curr_info.volume;
          }
        }
      }
      PrintFormat("Pos: %d", pos);
    }
  }
}

Acho que na verdade o correto seria consultar as negociações realizadas.
Alguma outra forma mais adequada para isso?

Até

Rodrigo Malacarne
Moderador
8103
Rodrigo Malacarne  
Rodrigo Pandini:

Pessoal, bom dia.

É possível saber qual a posição na fila do book de ofertas que a sua ordem está?

Olá Rodrigo Pandini,

Até onde me consta, infelizmente isso (ainda) não é possível no MetaTrader 5, uma vez que a ferramenta disponibiliza apenas os dados sintéticos de book.

Abraços,
Malacarne

Rodrigo Pandini
720
Rodrigo Pandini  
Obrigado Malacarne.

Outra pergunta, você acha que é possível estimar o pior caso usando a solução acima e analisando junto com Times e Sales?
Por exemplo, assim que confirmado que a ordem foi colocada no book, lemos o volume total do nível preço correspondente da ordem.
Assumimos que essa é nossa posição inicial na fila.
A cada nova alteração no book de ofertas analisamos se o volume total está abaixo da posição inicial definida (ordens que estavam na frente formam canceladas) e atualizamos a posição estimada na fila que a ordem está.
Além disso, analisamos o Times and Sales e verificamos se algum negócio foi feito no nível de preço da ordem. Se houver, verificamos o volume executado no negócio e subtraímos da posição estimada da ordem.
Acha que daria para estimar dessa forma a posição na fila no "pior caso"?
Japa Trader
237
Japa Trader  
Rodrigo Pandini:
Obrigado Malacarne.

Outra pergunta, você acha que é possível estimar o pior caso usando a solução acima e analisando junto com Times e Sales?
Por exemplo, assim que confirmado que a ordem foi colocada no book, lemos o volume total do nível preço correspondente da ordem.
Assumimos que essa é nossa posição inicial na fila.
A cada nova alteração no book de ofertas analisamos se o volume total está abaixo da posição inicial definida (ordens que estavam na frente formam canceladas) e atualizamos a posição estimada na fila que a ordem está.
Além disso, analisamos o Times and Sales e verificamos se algum negócio foi feito no nível de preço da ordem. Se houver, verificamos o volume executado no negócio e subtraímos da posição estimada da ordem.
Acha que daria para estimar dessa forma a posição na fila no "pior caso"?

Vc pode "simular" a posição da fila, se considerar que será o ultimo a ser executado: coloque sua saída 1 tick acima do seu gain. Se ele consumir a fila e beliscar 1 tick acima, pegará seu gain ou loss.

rogerio_labanca
12
rogerio_labanca  
Rodrigo Pandini:
Obrigado Malacarne.

Outra pergunta, você acha que é possível estimar o pior caso usando a solução acima e analisando junto com Times e Sales?
Por exemplo, assim que confirmado que a ordem foi colocada no book, lemos o volume total do nível preço correspondente da ordem.
Assumimos que essa é nossa posição inicial na fila.
A cada nova alteração no book de ofertas analisamos se o volume total está abaixo da posição inicial definida (ordens que estavam na frente formam canceladas) e atualizamos a posição estimada na fila que a ordem está.
Além disso, analisamos o Times and Sales e verificamos se algum negócio foi feito no nível de preço da ordem. Se houver, verificamos o volume executado no negócio e subtraímos da posição estimada da ordem.
Acha que daria para estimar dessa forma a posição na fila no "pior caso"?

Rodrigo Pandini,

Tenho o mesmo problema. Quero colocar uma ordem no book e monitorar sua posição. Ou seja, saber o volume que está na "frente" da minha ordem num dado instante.

Acho que no máximo daria para fazer uma estimativa da posição considerando o DOM e Time & Trades. Mas seria uma estimativa, pois acho que não tem como obter as ordens canceladas.

Você evoluiu algo?

Saudações,

Rogério Labanca

Para adicionar comentários, por favor Faça o login ou registrar