validade intraday para uma ordem limite. como fazer?

 

Ola pessoal,

Preciso colocar uma validade na minha ordem de alguns segundos. Quero inserir ela agora, e ela aguardará no livro de ofertas por 5 segundos por exemplo. Caso ela não seja executada, quero que ela seja cancelada ou parcialmente cancelada, por sua validade configurada. Não cogito a possibilidade de meu próprio código enviar um cancelamento pois isso me traria alguns problemas em função do sistema ser distribuido.

 Assim, tentei usar o parâmetro expiration do objeto request, que eh enviado no SendOrder:

...
request.expiration = TimeCurrent()+5;
...
SendOrder(request, result);

 O problema eh que a ordem limite entra para o livro normalmente, mas não está sendo cancelada automaticamente com uma validade intraday.

Já testei na conta demo e na conta real. Mesmo comportamento nas duas.

Alguma ideia pessoal?

Abraços 

 

 

Dando um feedback ao conteúdo do forum, descobri que isso não é possível fazer ainda no MT5 ligado ao mercado brasileiro.

Nao sei se a limitacao eh da BM&FBOVESPA ou se a limitacao eh da corretora que liga o MT5 por aqui.

 Para descobrir isso, usei uma funcao se me diz se o tipo de "expiration" é permitida para aquele determinado ativo.

bool IsExpirationTypeAllowed(string symbol,int exp_type){
//--- Obtain the value of the property that describes allowed expiration modes
   int expiration=(int)SymbolInfoInteger(symbol,SYMBOL_EXPIRATION_MODE);
//--- Return true, if mode exp_type is allowed
   return((expiration&exp_type)==exp_type);
}

Quando consulto o exp_type como  ORDER_TIME_SPECIFIED, a funcao me retorna false!

E ai precisamos controlar uma validade em um tempo especifico no próprio EA, o que dificulta as coisas. Mas... é a opção! 

 
humbertobrandao:

Ola pessoal,

Preciso colocar uma validade na minha ordem de alguns segundos. Quero inserir ela agora, e ela aguardará no livro de ofertas por 5 segundos por exemplo. Caso ela não seja executada, quero que ela seja cancelada ou parcialmente cancelada, por sua validade configurada. Não cogito a possibilidade de meu próprio código enviar um cancelamento pois isso me traria alguns problemas em função do sistema ser distribuido.

 Assim, tentei usar o parâmetro expiration do objeto request, que eh enviado no SendOrder:

 O problema eh que a ordem limite entra para o livro normalmente, mas não está sendo cancelada automaticamente com uma validade intraday.

Já testei na conta demo e na conta real. Mesmo comportamento nas duas.

Alguma ideia pessoal?

Abraços 

 

Olá Humberto, esse problema acontece também com ordens FOK? 

 
figurelli:

Olá Humberto, esse problema acontece também com ordens FOK? 

Ola Figurelli,

Eu não sei se entendi exatamente sua pergunta, mas vou responder pela minha interpretação. 

Eu não testei, mas acredito que não aconteça, independente que a função que eu citei acima retorne. Pelo que eu entendo, embora não seja especialista em MQL5, requisições FOK são equivalentes as "TUDO OU NADA" na tradução ao português, que deriva do "FILL OR KILL".

Ao meu ver, não faz sentido algum uma ordem que só pode ser executada imediatamente ter validade descrita. Pois a ideia é que a validade dela tenda a zero (só o tempo de chegar no matching engine da BM&FBOVESPA). Ou executa todo o volume requerido, ou a ordem é rejeitada ou cancelada (não sei, qual retorno que ela tem. Teria que ver na documentação da Bovespa). Mas como eu disse, não sou especialista em MQL5, e acho que no mundo da programação tudo pode acontecer. rs.

Minha estratégia usa apenas ordens limite, e com imensa raridade usa ordens a mercado, e isso me limita bastante em responder dúvidas fora deste contexto.

Abraços 

 
humbertobrandao:

Ola Figurelli,

Eu não sei se entendi exatamente sua pergunta, mas vou responder pela minha interpretação. 

Eu não testei, mas acredito que não aconteça, independente que a função que eu citei acima retorne. Pelo que eu entendo, embora não seja especialista em MQL5, requisições FOK são equivalentes as "TUDO OU NADA" na tradução ao português, que deriva do "FILL OR KILL".

Ao meu ver, não faz sentido algum uma ordem que só pode ser executada imediatamente ter validade descrita. Pois a ideia é que a validade dela tenda a zero (só o tempo de chegar no matching engine da BM&FBOVESPA). Ou executa todo o volume requerido, ou a ordem é rejeitada ou cancelada (não sei, qual retorno que ela tem. Teria que ver na documentação da Bovespa). Mas como eu disse, não sou especialista em MQL5, e acho que no mundo da programação tudo pode acontecer. rs.

Minha estratégia usa apenas ordens limite, e com imensa raridade usa ordens a mercado, e isso me limita bastante em responder dúvidas fora deste contexto.

Abraços 

Olá Humberto,

Exato sobre o FOK, era esse o ponto (na verdade esse tipo de ordem já é herdada no MQL5 do protocolo FIX, e foi bastante melhorada com a operacionalização na XP, já que simplifica o controle de ordens parciais).

Mas no teu caso que não está usando esse tipo de ordem, e tem aplicações bem mais complexas, o problema de não conseguir programar a expiração parece relacionado realmente às regras da corretora, e isso acontece também em vários brokers Forex. 

Para 'driblar' esse problema de forma genérica, para qualquer corretora, é realmente necessário monitorar a expiração no próprio EA, executando quando ela não for feita pela corretora.

Abraço

Razão: