Envio de Ordem com data de expiração BMF - página 2

 
Jonathan Pereira:

Ruy, obrigado por colaborar...

Vou acrescentar meus 0,02 centavos a essa discussão.

É bom validar o numero magico e moeda a qual esta olhando para as ordens, pois OrdesTotal(), olha no âmbito geral....logo ele agrega todas as ordens da plataforma.


Bem lembrado Jonathan, sempre esqueço que nem todos são como eu que utiliza apenas 1 robô por conta-corretora e não faço operações manuais. Obrigado viu.

 
Ruy Christian Hoffmann #:

... e entenda que estou usando o CTrade. Então onde você lê "negocio" é apenas porque estou utilizando uma Instância baseada na Biblioteca do CTrade.

Obrigado!
 
Boa tarde, pessoal. Adaptei a sugestão do Rui Christian no meu EA e funcionou. Porém, coloquei:
int   tempoExpiraOrdemPend = 60;       //Tempo expiração (segundos)

EventSetTimer(60)
No entanto, a Ordem é posta e quase que imediatamente é cancelada. Para ser cancelada com 2 minutos tive que escrever 700 no EventSetTimer.
Alguém sabe se precisa fazer mais algum tratamento no tempo que eu quero? Por exemplo: 5 minutos. Muito grato.
 
George Silva #:
Boa tarde, pessoal. Adaptei a sugestão do Rui Christian no meu EA e funcionou. Porém, coloquei:
int   tempoExpiraOrdemPend = 60;       //Tempo expiração (segundos)

No entanto, a Ordem é posta e quase que imediatamente é cancelada. Para ser cancelada com 2 minutos tive que escrever 700 no EventSetTimer.
Alguém sabe se precisa fazer mais algum tratamento no tempo que eu quero? Por exemplo: 5 minutos. Muito grato.
O EventSetTimer nao estava errado, tu precisa passar pelas ordens e validar que ela esta valida para isso tu recupera o tempo que a ordem foi colocada via OrderGetInteger(ORDER_TIME) e soma uma quantidade de segundos e compara com o horario atual. Sem fazer isso, mesmo com um EventSetTimer configurado pra 700 pode dar errado pq se faltando 1s antes dele checar tu colocar uma ordem, ela vai ser removida indevidamente.
 

No passado já funcionou,..


inclusive tão simples qnto assim : 

m_trade.SellLimit(lote, PRC, Symbol(), STL, TKP, ORDER_TIME_SPECIFIED, TimeCurrent() + PeriodSeconds(10));


hoje com essas atualizações vc tem q escrever um monte de linha pra executar uma função era simplesmente nativa,..

 
ermis #:

No passado já funcionou,..


inclusive tão simples qnto assim : 

m_trade.SellLimit(lote, PRC, Symbol(), STL, TKP, ORDER_TIME_SPECIFIED, TimeCurrent() + PeriodSeconds(10));


hoje com essas atualizações vc tem q escrever um monte de linha pra executar uma função era simplesmente nativa,..

Ressuscitou um tópico de 2021 para fazer comentários errados !

Sempre funcionou e continua funcionado. Quem determina se para o instrumento pode ser emitido uma ordem com data prescrição é a B3.

Na especificação do instrumento você deve observar  o campo TÉRMINO VALIDADE para saber o que é permitido para o instrumento.C

Como exemplo compare a especificação de uma AÇÃO qualquer com contrato futuro de índice.