Ordem a mercado consumindo o book para liquidar o volume

 

Boa noite!

Qual a melhor forma de enviar uma ordem a mercado e garantir que a ordem seja concluída com sucesso, mesmo que o volume da ordem precisa de consumir vários níveis de preço do book?

Estou usando ordens ORDER_TYPE_BUY/ORDER_TYPE_SELL, action TRADE_ACTION_DEAL e preenchimento ORDER_FILLING_FOK, pois quero que garantir que todo volume seja negociado e não só parcial.

O que acontece quando a liquidez não está grande é que por exemplo se o preço R$80,00 tem 1 contrato venda somente e depois no R$80,01 tem mais 5 contratos no book. Se eu mando uma ordem de compra como descrevi, de 2 contratos, o MT5 executa a ordem porém ela é cancelada, pois não há 2 contratos disponíveis no primeiro nível de preço, e eu escolhi o filling FOK (Fill or Kill). E as ordens a mercado não aceitam passar o preço. Por código até aceita, mas na documentação fala que se informado, o preço é ignorado para ordens a mercado.

Porém o conceito geral de ordem a mercado é negociar os lotes preenchidos a todos os preços que precisar, nesse caso seria em R$80,00 e R$80,01.

Como faço para a ordem a mercado consumir todos os níveis de preços do book necessário para liquidar todo o volume da ordem, ao invés de cancelar a ordem por falta de volume no primeiro nível?

Obrigado

 
rodsibin:

....

https://www.mql5.com/pt/docs/constants/tradingconstants/orderproperties


Documentação sobre MQL5: Constantes, Enumeradores e Estruturas / Constantes de Negociação / Propriedades de uma Ordem
Documentação sobre MQL5: Constantes, Enumeradores e Estruturas / Constantes de Negociação / Propriedades de uma Ordem
  • www.mql5.com
As solicitações para executar operações de negociação são formalizadas como ordens. Cada ordem tem uma variedade de propriedades para leitura. As informações sobre elas podem ser obtidas usando as funções Identificador de posição que é definido para uma ordem tão logo ela é executada. Cada ordem executada resulta em uma operação que abre ou...
 

Fala Jonathan, obrigado pela resposta rápida.

Sim, estou familiarizado com os outros tipos de filling, porém pelo meu entendimento, o tipo ORDER_FILLING_RETURN irá realizar o trade com volume parcial no primeiro nível de preço e o volume restante irá ficar no book esperando que alguém agrida minha ordem.

No meu exemplo acima, eu teria comprado 1 contrato a R$80,00 e o outro 1 contrato ficaria no book como ordem limitada de compra, ao invés de ter comprado a mercado 1 contrato a R$80,00 e mais 1 contrato a R$80,01.

Não é assim que funciona?

Razão: