Envio de Ordem com Lote Aparente (ou Escondido, ICEBERG)

 

Olá a todos,

Alguém sabe se é possível, usando MQL5, enviar uma ordem com lote Aparente (alguns chamam de ordem ICEBERG, ordem com lote Escondido), na Modal é definido como lote APARENTE na boleta de preenchimento.

Caso tenha ficado meio confuso, explico com mais detalhes: pretendo enviar uma ordem de compra, por exemplo, com 1000 lotes, porém, não quero que no book de ofertas apareça os 1000 lotes, mas sim somente 50 lotes. Quando os 50 lotes são executados, uma nova ordem de 50 lotes aparece no book (o sistema Bolsa executa esta ação automaticamente); esta ação se repete até consumir todos os 1000 lotes ou ser cancelado.

Percebi, pesquisando nos artigos, que não têm referências sobre este assunto. Até faz sentido, pois a maioria dos EAs são desenvolvidos para trades curtos e com pouco lote, logo não faz sentido uma ordem com lote aparente. 

No meu caso, que opero Fundos Imobiliários, esse tipo de ordem se faz necessário em alguns momentos.

Abraço a todos.

 
Márcio Hermes:

Olá a todos,

Alguém sabe se é possível, usando MQL5, enviar uma ordem com lote Aparente (alguns chamam de ordem ICEBERG, ordem com lote Escondido), na Modal é definido como lote APARENTE na boleta de preenchimento.

Caso tenha ficado meio confuso, explico com mais detalhes: pretendo enviar uma ordem de compra, por exemplo, com 1000 lotes, porém, não quero que no book de ofertas apareça os 1000 lotes, mas sim somente 50 lotes. Quando os 50 lotes são executados, uma nova ordem de 50 lotes aparece no book (o sistema Bolsa executa esta ação automaticamente); esta ação se repete até consumir todos os 1000 lotes ou ser cancelado.

Percebi, pesquisando nos artigos, que não têm referências sobre este assunto. Até faz sentido, pois a maioria dos EAs são desenvolvidos para trades curtos e com pouco lote, logo não faz sentido uma ordem com lote aparente. 

No meu caso, que opero Fundos Imobiliários, esse tipo de ordem se faz necessário em alguns momentos.

Abraço a todos.

Olá Marcio Hermes

Até onde sei, não há esse recurso nativo no Metatrader, nem na boleta manual e nem na API de envio de ordens (OrderSend).

Porém, é relativamente simples simular uma ordem iceberg por programação MQL5.

É só enviar uma nova ordem de 50 lotes a cada vez que for recebido o evento OnTradeTransaction informando a execução total da ordem anterior.

A única diferença entre essa ideia que descrevi acima e uma verdadeira ordem iceberg é que vai haver um pequeno delay adicional entre a execução de cada grupo de 50 lotes e a entrada da nova ordem com o grupo seguinte. Esse delay adicional vai corresponder ao tempo total de latência ida-e-volta entre o seu terminal e a bolsa, pois numa ordem iceberg verdadeira a reposição dos lotes é feita automaticamente pelo próprio servidor da bolsa, enquanto que na nossa solução alternativa o robô que estará rodando no seu terminal é que fará a reposição dos lotes com o envio de uma nova ordem a cada vez que vier a notificação da bolsa de que os lotes anteriores foram executados. 

Como você negocia ativos de "baixa liquidez" (quero dizer: ativos que não são negociados com frequência tão alta quanto mini-índice e mini-dólar, por exemplo), acredito que esse delay de poucos milésimos de segundos não deverá afetar o desempenho da sua estratégia e essa solução funcionará bem para você.

 
Trader_Patinhas:

Olá Marcio Hermes

Até onde sei, não há esse recurso nativo no Metatrader, nem na boleta manual e nem na API de envio de ordens (OrderSend).

Porém, é relativamente simples simular uma ordem iceberg por programação MQL5.

É só enviar uma nova ordem de 50 lotes a cada vez que for recebido o evento OnTradeTransaction informando a execução total da ordem anterior.

A única diferença entre essa ideia que descrevi acima e uma verdadeira ordem iceberg é que vai haver um pequeno delay adicional entre a execução de cada grupo de 50 lotes e a entrada da nova ordem com o grupo seguinte. Esse delay adicional vai corresponder ao tempo total de latência ida-e-volta entre o seu terminal e a bolsa, pois numa ordem iceberg verdadeira a reposição dos lotes é feita automaticamente pelo próprio servidor da bolsa, enquanto que na nossa solução alternativa o robô que estará rodando no seu terminal é que fará a reposição dos lotes com o envio de uma nova ordem a cada vez que vier a notificação da bolsa de que os lotes anteriores foram executados. 

Como você negocia ativos de "baixa liquidez" (quero dizer: ativos que não são negociados com frequência tão alta quanto mini-índice e mini-dólar, por exemplo), acredito que esse delay de poucos milésimos de segundos não deverá afetar o desempenho da sua estratégia e essa solução funcionará bem para você.

Obrigado pela ideia. Pena que não tem essa opção na programação.

Acredito que deveria ser incorporado na programação MQL5 uma opção para ordens ICEBERG. Como o mundo do trading evolui, e novas formas de operar são desenvolvidas, essa opção deverá ser adicionada em versões futuras.

Grande Abraço. 

Razão: