OnTradeTransaction - página 9

 
Aleksey Mavrin:

Sim, você está certo, porque neste caso é um identificador de posição, constante ao longo de sua vida. Confundi com o ticket da posição, que muda durante os rollovers e as redes.

Mas eu não entendo - quando uma posição é parcialmente fechada, o bilhete não muda para o bilhete da última ordem que afeta a posição?

Vou rever meus códigos, obrigado. Eu visitei o fórum não por nada)

Quanto à "ordem perdida" que não está na lista de ordens atuais ou históricas: Parece-me que não se trata de um bug, só preciso olhar cuidadosamente as características de

Acho que isto não é um bug, basta olhar com cuidado as peculiaridades do mercado de MT-servidor de terminais (no caso de execução instantânea, o mercado não funciona). Acho que sim, veja - o terminal envia uma ordem de mercado, no caso de função síncrona - ele espera e recebe uma resposta do servidor,

Se não houver erro, a resposta pode ser apenas TRADE_RETCODE_DONE (no caso de execução instantânea, são requerimentos, mas até agora é o tipo de mercado), o que significa essencialmente que o servidor enviou a ordem para o mercado e

Na verdade, isso significa que o servidor enviou o pedido e espera por sua resposta. O estado do pedido neste momento éORDER_STATE_STARTED se eu não estiver enganado e seu bilhete for conhecido. Se o pedido for executado, o servidor envia a OnTradeTransaction ao terminal e o status do pedido muda para ORDER_STATE_FILLED e o comércio é conhecido

e a posição se torna conhecida. É somente neste ponto que o terminal registra a ordem na história. Não o faz de antemão, pois não temos certeza do que aconteceu com ele e já deu a resposta inicial do servidor.

Este é o tempo até que a ordem seja executada na rede ECN ou em outro lugar, eles não estão em nenhuma das duas listas. Isto é, no caso da ordem de mercado, ela só aparece na história (não tenho certeza sobre o caso das solicitações durante a execução imediata),

nunca aparecerá na lista de abertos. E quando uma ordem pendente é acionada, ela é removida da lista das abertas porque já se tornou uma ordem de mercado e esperamos que o servidor de mercado responda, e então ela é enviada para a história.

Eu estou certo?

Nem por isso.
 
Aleksey Mavrin:

Eu estou certo?

Andrey explicou-o muito bem.

Fórum sobre comércio, sistemas automatizados de comércio e testes estratégicos

OnTradeTransaction

Andrey Khatimlianskii, 2019.12.17 08:24

Não, as coisas estão piores.

A ordem no momento da transformação de pendente (ou mercado) em histórica (executada ou cancelada) por algum tempo desaparece do terminal. Ela não aparece nem entre os mercados pendentes (ou "iniciados"), nem entre os históricos.

Portanto, não se trata de uma questão de execução, mas de sincronização destas duas tabelas. A resposta do servidor veio ("Order executed, generated transaction so-and-so"), ela é removida de uma tabela, mas não inserida na outra.


O problema não é o OrderSend. Houve a BuyLimit por um longo tempo. E de repente isso e as posições de compra não se encontram em lugar algum. Esta é mais ou menos a mesma situação que acontece.

 
fxsaber:

Andrei escreveu-o bem.


Não se trata de OrderSend. Foi BuyLimit por um longo tempo. E, de repente, nem isso nem a posição de compra estão em qualquer lugar. É mais ou menos a mesma situação que acontece.


Artyom Trishkin:
Nem por isso.

Eu entendi. Mesmo a ordem de mercado está na lista de ordens atuais há algum tempo (mas parece que ela não é exibida no terminal na guia comercial?

Então, quando a ordem foi executada e uma transação correspondente do servidor foi recebida, o terminal executa as seguintes ações

1. eliminar o pedido do atual

2. Escrever a ordem nos históricos

3. Escrever o comércio na lista

4. Escreva a posição na lista

e considerando que o Expert Advisor e o próprio terminal trabalham em fluxos paralelos independentes, o terminal ainda não será capaz de abrir uma posição se você o solicitar dentro deste curto período de tempo.

posição, ela ainda não estará lá. Como escrevi antes, se isto estivesse acontecendo pelos padrões do SGBD, não haveria tal coisa, porque todas as 4 operações ali seriam fundidas em uma única transação, e você não poderia ser pego em "estados intermediários".

Certo? Mas estou realmente interessado - se confiamos na OnTrade e na OnTradeTransaction, então não deveria haver nenhum atraso nesses manipuladores, eles acontecem criando mudanças nas tabelas correspondentes, certo?

Ou o Terminal simplesmente os envia para o Expert Advisor quando recebe eventos e muda de tabela ao mesmo tempo? Neste último caso, é claro, está errado e precisa ser corrigido, especialmente se a OnTradeTransaction, da qual as informações reais poderiam ser obtidas, não estiver garantida.

 
Aleksey Mavrin:

Entendi. Mesmo a ordem de mercado está presente na lista de ordens atuais por um tempo (só que parece que não é exibida na guia de negociação no terminal?)

Às vezes você pode até vê-lo lá com seus olhos no estado Iniciado. E é fácil de rastrear com um robô.


Aleksey Mavrin:

E considerando que o Expert Advisor e o próprio terminal operam em fluxos paralelos independentes, a situação é a seguinte: se você solicitar uma posição dentro deste curto período de tempo, ela não aparecerá.

Não estamos nos referindo a posições, mas apenas a ordens.

Precisamos de muito menos tempo para acrescentar uma entrada à mesa do que às vezes conseguimos. E não estou falando sério, não há garantia de que conseguiremos o ambiente comercial correto.


Aleksey Mavrin:

E eu realmente me perguntei - se dependemos da OnTrade e da OnTradeTransaction, então esses manipuladores não deveriam ter atraso, porque eles acontecem quando as mudanças são escritas em tabelas apropriadas?

Ou o Terminal simplesmente os envia para o Expert Advisor quando recebe eventos e muda de tabela ao mesmo tempo? Neste último caso, é claro, está errado e precisa ser corrigido, especialmente se a OnTradeTransaction, da qual você poderia obter informações reais, não estiver garantida.

A OnTrade em sua forma pura não vai ajudar.

Também é possível combinar a sincronização da mesa de espera de pedidos nela, é uma questão de gosto. Mas você ainda tem que esperar.

 
Aleksey Mavrin:

Quanto à "ordem perdida", que não está na lista de ordens atuais ou históricas: acho que não é um bug, só precisamos olhar atentamente as características do Terminal-Server MT-Market (em caso de execução instantânea o mercado está fora). Eu acho que o terminal envia uma ordem de mercado, no caso de função síncrona ele espera e recebe uma resposta do servidor. Se não houver erro a resposta pode ser apenas TRADE_RETCODE_DONE (no caso de execução instantânea há solicitações, mas até agora é a ordem de mercado) o que na verdade significa que o servidor enviou a ordem para o mercado e espera por uma resposta. O estado do pedido neste momento é ORDER_STATE_STARTED se eu não estiver enganado e seu bilhete for conhecido. Se o pedido for executado, o servidor envia a OnTradeTransaction ao terminal e o status do pedido muda para ORDER_STATE_FILLED e o comércio e a posição são conhecidos. Somente neste momento o terminal registra a ordem na história.

O mercado não tem nada a ver com isso.

O servidor MetaTrader envia o pedido para ECN ou em outro lugar, recebe a resposta, a envia para o terminal. E no terminal o timing está desligado.

Razão: