Orem a Mercado

 

Pessoal,

Estou encontrando problemas na execução de ordens a mercado. Utilizo a ModalMais e não sei se o problema que estou enfrentando é na verdade característica da corretora.

Segue o código que estou usando para abrir posição:

   mrequest.symbol = _Symbol; //DEFINE O NOME DO ATIVO
   mrequest.action = TRADE_ACTION_DEAL; //DEFINE O TIPO DE OPERACAO A SER REALIZADA
   mrequest.volume = volume; //DEFINE O VOLUME DA OPERACAO
   mrequest.type= ORDER_TYPE_BUY;//DEFINE QUE SERA UMA ORDEM A MERCADO
   mrequest.type_filling = ORDER_FILLING_FOK; //EXECUTAR NA QUANTIDADE EXATA
   bool i = OrderSend(mrequest,mresult); //ENVIA A ORDEM E RETORNA O RESULTADO

E o código para fechar posição:

   mrequest.symbol = _Symbol;//DEFINE O NOME DA ATIVO
   mrequest.action = TRADE_ACTION_DEAL;//DEFINE O TIPO DE OPERACAO A SER REALIZADA
   mrequest.volume = volume;//DEFINE O VOLUME DA OPERACAO
   mrequest.type= ORDER_TYPE_SELL;//DEFINE QUE SERA UMA ORDEM A MERCADO
   mrequest.type_filling = ORDER_FILLING_FOK;//EXECUTAR NA QUANTIDADE EXATA
   bool i = OrderSend(mrequest,mresult);//ENVIA A ORDEM E RETORNA O RESULTADO

O problema ocorre quando meu EA envia uma ordem para fechar a posição que está aberta. No momento de envio da ordem, o objetivo é fechar a posição aberta a mercado. Acontece que a ordem enviada não está sendo executada a mercado, mas está sendo colocada como ordem pendente.

Segue o log das operações realizadas. Notem que as ordens foram enviadas a mercado, porém, na verdade, elas foram colocadas como pendente e não foram executadas.

Tentei fazer a mesma operação a mercado manualmente e o mesmo problema acontece. A ordem não é executada imediatamente e é colocada como pendente com o último preço negociado do ativo.

Não sei o motivo das ordens não terem sido executadas imediatamente já que enviei elas a mercado. Há algum problema no código? A corretora que utilizo executa ordens a mercado como ordens pendentes?

Agradeço desde já!

 
Alysson Vilela:


Boa noite Alysson,

na MODAL conta REAL dá erro ORDER_FILLING_FOK,  altera o modo de preenchimento para ORDER_FILLING_RETURN.

 
Rogerio Giannetti Torres:

Boa noite Alysson,

na MODAL conta REAL dá erro ORDER_FILLING_FOK,  altera o modo de preenchimento para ORDER_FILLING_RETURN.

Obrigado Rogerio!

Vou alterar o modo de preenchimento e testar.

E no caso das operações manuais, sabe o motivo da ordem não ter sido executada a mercado? Tentei executar várias vezes e ela é colocada como ordem pendente com o último preço negociado.


 
Alysson Vilela:

Obrigado Rogerio!

Vou alterar o modo de preenchimento e testar.

E no caso das operações manuais, sabe o motivo da ordem não ter sido executada a mercado? Tentei executar várias vezes e ela é colocada como ordem pendente com o último preço negociado.


Olá, 

não faço ideia, talvez examinando o log <diário> chegue a uma conclusão.

 
Rogerio Giannetti Torres:

Boa noite Alysson,

na MODAL conta REAL dá erro ORDER_FILLING_FOK,  altera o modo de preenchimento para ORDER_FILLING_RETURN.

Rogerio,


Meu EA testa os tipos de preenchimento aceitos, e, o retorno na Modal eh de que FOK eh aceita.

[ ]'s

 
Joscelino Celso de Oliveira:

Rogerio,


Meu EA testa os tipos de preenchimento aceitos, e, o retorno na Modal eh de que FOK eh aceita.

[ ]'s


Depende do tipo da ordem. A mercado não aceita FOK. Tem que ser RETURN. Verifique se eu EA testa FOK a mercado. 

FOK e IOC só para limit e stop. 

 
Sonia Tait:


Depende do tipo da ordem. A mercado não aceita FOK. Tem que ser RETURN. Verifique se eu EA testa FOK a mercado. 

FOK e IOC só para limit e stop. 

Legal! Muito agradecido pelo Feedback, Sonia.

[ ]´s

 

Pessoal, obrigado pela contribuicao!

Fiz alguns testes com o código abaixo, usando ORDER_FILLING_RETURN, mas deu erro.

   mrequest.symbol = _Symbol; //DEFINE O NOME DO ATIVO
   mrequest.action = TRADE_ACTION_DEAL; //DEFINE O TIPO DE OPERACAO A SER REALIZADA
   mrequest.volume = volume; //DEFINE O VOLUME DA OPERACAO
   mrequest.type= ORDER_TYPE_BUY;//DEFINE QUE SERA UMA ORDEM A MERCADO
   mrequest.type_filling = ORDER_FILLING_RETURN; //EXECUTAR NA QUANTIDADE EXATA
   bool i = OrderSend(mrequest,mresult); //ENVIA A ORDEM E RETORNA O RESULTADO

Os alertas de erro e o log da operação:

O que poderia estar errado? O que esse preço fora das bandas 'B' quer dizer?

Razão: