Problemas com execução de ordem

 

Pessoal,

Estou operando na conta demo da Clear e estou com problemas na execução de ordens.

Estou usando a função Buy da ctrade e as ordens são sempre executadas a mercado independentes do preço colocado como argumento da função Buy. 

trade.Buy(100,"VALE3", 100.00, 0, 0, "Buy.");

No exemplo acima, as ordens sao executadas ao preço de mercado. Elas não deveriam ser limitadas a R$ 100?


O que eu gostaria é de executar ordens FOK (FIll or Kill) com um limite de preço. 

Já executei o comando abaixo, mas o sistema ignora e continua executando as ordens a mercado.

trade.SetTypeFilling(ORDER_FILLING_FOK);


Alguma ideia do que estou fazendo errado? Qualquer sugestão é ajuda...


- dwlf

 

Olá,


Utilizando o comando trade.Buy você vai comprar a mercado.


Para comprar a um preço determinado você precisa utilizar trade.BuyLimit.

 

Ivan Ronchi:

Olá,


Utilizando o comando trade.Buy você vai comprar a mercado.


Para comprar a um preço determinado você precisa utilizar trade.BuyLimit.

Olá,


Eu não gostaria de deixar a ordem pendente, caso ela não seja executada. Estou tentando usar as opções de preenchimento "ORDER_FILLING_FOK" ou "ORDER_FILLING_IOC", mas tenho a impressão que essas opções não funcionam na conta demo da Clear. Ou eu estou fazendo alguma coisa errada?


Estou executando o comando:

trade.SetTypeFilling(ORDER_FILLING_IOC);

dentro da função "OnInit()"


Alguém consegue dizer se há alguma coisa errada?


Muito obrigado!

- dwlf

 
dwlf:

Olá,


Eu não gostaria de deixar a ordem pendente, caso ela não seja executada. Estou tentando usar as opções de preenchimento "ORDER_FILLING_FOK" ou "ORDER_FILLING_IOC", mas tenho a impressão que essas opções não funcionam na conta demo da Clear. Ou eu estou fazendo alguma coisa errada?


Estou executando o comando:

trade.SetTypeFilling(ORDER_FILLING_IOC);

dentro da função "OnInit()"


Alguém consegue dizer se há alguma coisa errada?


Muito obrigado!

- dwlf

Oi dwlf,

A maioria das corretoras brasileiras (senão todas) NÃO aceitam ordem "Fill or Kill" (ORDER_FILLING_FOK).

ORDER_FILLING_RETURN funciona em todas as que eu testei (inclusive Clear), mas tem esse efeito colateral que vc não deseja: se o volume não for totalmente preenchido, o volume restante vai ficar pendurado como ordem pendente.

Para tentar chegar o mais próximo possível de uma ordem FOK, vc teria que, antes de enviar a ordem, verificar o book de ofertas (usando MarketBookGet()) e só enviar a ordem se existir volume suficiente ofertado naquele preço. Mesmo assim, a execução pode não ser perfeita (por exemplo: se o volume ofertado for consumido/cancelado antes de chegar a vez da sua ordem ser processada) e nesse caso o único jeito será zerar a posição gerada pelo preenchimento parcial (com possível prejuízo do spread) e cancelar a ordem pendente referente ao volume não-preenchido.

Talvez seja interessante vc rever as razões pelas quais não deseja esse comportamento. Em mercados líquidos, na grande maioria dos casos (a menos que sua ordem seja enviada exatamente num momento de mínima ou de máxima de preço), o volume restante geralmente é preenchido em questão de poucos segundos. 

Abraços!

Razão: