OrderSend resultou em "Order or position is Frozen"

 

Por que isso aconteceu?

O que precisa ter com a ordem ou com a posição para uma requisição nova ser congelada?

Isso tem sido frequente no meu robô (uma a cada 500 ordens, mais ou menos). O que considero frequente para ter que arrumar uma saída imediata.

Obrigado pela atenção 

 
humbertobrandao:

Por que isso aconteceu?

O que precisa ter com a ordem ou com a posição para uma requisição nova ser congelada?

Isso tem sido frequente no meu robô (uma a cada 500 ordens, mais ou menos). O que considero frequente para ter que arrumar uma saída imediata.

Obrigado pela atenção 

Olá Humberto, também me acontece esse erro em robôs que operam com maior frequência (dezenas de trades por minuto), e me parece uma mensagem gerada pelo OMS e replicada no terminal.

Analisando as regras compostas nas mensagens FIX na BM&FBovespa, existem várias delas para algum tipo de status de congelamento.

Para maiores detalhes acesse http://www.bmfbovespa.com.br/en-us/services/download/BELL-BMF-Electronic-Link-Specification-v3.0.11.pdf

A lógica que imagino é que o OMS da corretora recebe um desses status e repassa pelo protocolo FIX para o Trade Server do MT5, chegando dessa forma um status simplificado no terminal sem maiores detalhes do que exatamente aconteceu.

 
figurelli:

Olá Humberto, também me acontece esse erro em robôs que operam com maior frequência (dezenas de trades por minuto), e me parece uma mensagem gerada pelo OMS e replicada no terminal.

Analisando as regras compostas nas mensagens FIX na BM&FBovespa, existem várias delas para algum tipo de status de congelamento.

Para maiores detalhes acesse http://www.bmfbovespa.com.br/en-us/services/download/BELL-BMF-Electronic-Link-Specification-v3.0.11.pdf

A lógica que imagino é que o OMS da corretora recebe um desses status e repassa pelo protocolo FIX para o Trade Server do MT5, chegando dessa forma um status simplificado no terminal sem maiores detalhes do que exatamente aconteceu.

Muito obrigado pelo feedback Figurelli! Concordo que a corretora apenas repassa o que o mercado falou, e que nós temos que driblar o "problema".

Dando também um retorno ao conteúdo do forum, percebi hoje que isso acontece/acontecceu comigo quando a requisição está "mudando de estado", pois pouco tempo depois sou informado sobre um trade sobre a mesma requisição (ordem).

Pelo visto, o mercado congela a ordem, como em um conceito de semáforo para sincronização, enquanto o matching engine da bolsa muda o estado da requisição. Se eu pergunto o estado pouco tempo depois de receber um "frozen", ao tentar cancelar a ordem, o estado está, por exemplo, como "ORDER_STATE_FILLED", e antes da tentativa de cancelamento estava "ORDER_STATE_STARTED". E recebo o "TRADE_TRANSACTION_DEAL_ADD" depois da tentativa de cancelamento no evento que chama "OnTradeTransaction".

O que complica razoavelmente o meu controle de estado interno do meu sistema de execução. Fazer o que né. Problemas de um sistema distribuído. Não é problema da corretora. Não é problema do algoritmo. É problema relacionado a natureza dos algotraders...

Espero que em conta real isso não seja tão frequente, em função da menor latência se comparado a conta demo.

Se alguém souber de mais detalhes, ou sobre dicas de como um algotrader pode tentar contornar a questão... Seria bem interessante enviar aqui no forum.

 
humbertobrandao:

Muito obrigado pelo feedback Figurelli! Concordo que a corretora apenas repassa o que o mercado falou, e que nós temos que driblar o "problema".

Dando também um retorno ao conteúdo do forum, percebi hoje que isso acontece/acontecceu comigo quando a requisição está "mudando de estado", pois pouco tempo depois sou informado sobre um trade sobre a mesma requisição (ordem).

Pelo visto, o mercado congela a ordem, como em um conceito de semáforo para sincronização, enquanto o matching engine da bolsa muda o estado da requisição. Se eu pergunto o estado pouco tempo depois de receber um "frozen", ao tentar cancelar a ordem, o estado está, por exemplo, como "ORDER_STATE_FILLED", e antes da tentativa de cancelamento estava "ORDER_STATE_STARTED". E recebo o "TRADE_TRANSACTION_DEAL_ADD" depois da tentativa de cancelamento no evento que chama "OnTradeTransaction".

O que complica razoavelmente o meu controle de estado interno do meu sistema de execução. Fazer o que né. Problemas de um sistema distribuído. Não é problema da corretora. Não é problema do algoritmo. É problema relacionado a natureza dos algotraders...

Espero que em conta real isso não seja tão frequente, em função da menor latência se comparado a conta demo.

Se alguém souber de mais detalhes, ou sobre dicas de como um algotrader pode tentar contornar a questão... Seria bem interessante enviar aqui no forum.

Apenas corrigindo o titulo. Nao foi o OrderSend que resultou em frozen.

Foi uma modificação ou tentativa de cancelamento de uma requisição. 

 
humbertobrandao:

Apenas corrigindo o titulo. Nao foi o OrderSend que resultou em frozen.

Foi uma modificação ou tentativa de cancelamento de uma requisição. 

Prezado humbertobrandao,

Tentativas de cancelamento / modificação de ordens também são feitas através da função OrderSend...

Uma vez que você identificou (corretamente no meu ponto de vista) a origem desse problema, basta agora, sabendo que o mesmo ocorre, determinar um tratamento para o mesmo internamente no seu código.

Pelo menos nos EA's que desenvolvo, essa é uma mensagem que não interfere (minha opinião) na lógica de operação do robô, de maneira que meu tratamento para essa mensagem é meramente uma impressão em log, mas em termos de tomada de ação propriamente dito, não vejo necessidade de intervenções específicas por conta dessa mensagem de retorno.

Abraços,
Malacarne 

 
Malacarne:

Prezado humbertobrandao,

Tentativas de cancelamento / modificação de ordens também são feitas através da função OrderSend...

Uma vez que você identificou (corretamente no meu ponto de vista) a origem desse problema, basta agora, sabendo que o mesmo ocorre, determinar um tratamento para o mesmo internamente no seu código.

Pelo menos nos EA's que desenvolvo, essa é uma mensagem que não interfere (minha opinião) na lógica de operação do robô, de maneira que meu tratamento para essa mensagem é meramente uma impressão em log, mas em termos de tomada de ação propriamente dito, não vejo necessidade de intervenções específicas por conta dessa mensagem de retorno.

Abraços,
Malacarne 

É isso mesmo que estamos fazendo Malacarne. Obrigado pela dica.

abraços 

 
humbertobrandao:

Apenas corrigindo o titulo. Nao foi o OrderSend que resultou em frozen.

Foi uma modificação ou tentativa de cancelamento de uma requisição. 

Olá Humberto, apenas para complementar, para mim essa mensagem também acontece no simples envio de ordens para abertura/fechamento de posições a mercado.

Acredito, portanto, que a lógica esteja realmente relacionada à latência de execução de ordens pelo match engine da bolsa, como você comentou, mas que isso se aplica a qualquer tipo de ordem, principalmente se ela tiver um SL/TP curto, que será executado poucos milissegundos após a abertura da posição.

Abraço