OnTradeTransaction - página 9

 
Aleksey Mavrin:

Sí, tienes razón, porque en este caso se trata de un identificador de posición, constante durante toda su vida. Lo confundí con el ticket de la posición, que cambia durante los rollovers y la compensación.

Pero no entiendo - cuando una posición se cierra parcialmente, el ticket no cambia al ticket de la última orden que afecta a la posición?

Revisaré mis códigos, gracias. No he visitado el foro para nada)

En cuanto a la "orden perdida" que no aparece en la lista de órdenes actuales o históricas: Me parece que no se trata de un error, sólo tengo que mirar cuidadosamente las características de

Creo que esto no es un error, sólo hay que mirar cuidadosamente las peculiaridades de la terminal-servidor MT-mercado (en el caso de la ejecución instantánea del mercado no funciona). Creo que sí, mira - el terminal envía una orden de mercado, en el caso de la función sincrónica - espera y obtiene una respuesta del servidor,

Si no hay ningún error, la respuesta sólo puede ser TRADE_RETCODE_DONE (en el caso de la ejecución instantánea es requotes, pero hasta ahora es el tipo de mercado), lo que significa esencialmente que el servidor ha enviado la orden al mercado y ésta

En realidad significa que el servidor ha enviado la orden y espera su respuesta. El estado de la orden en este momento esORDER_STATE_STARTED si no me equivoco y su ticket es conocido. Si la orden se ejecuta, el servidor envía OnTradeTransaction al terminal y el estado de la orden cambia a ORDER_STATE_FILLED y se conoce la operación

y se conoce la posición. Sólo en este momento el terminal registra la orden en el historial. No lo hace de antemano, ya que no estamos seguros de lo que le ha pasado y ya ha dado la respuesta inicial del servidor.

Es el tiempo que transcurre hasta que la orden se ejecuta en la red ECN o en otro lugar, no están en ninguna de las dos listas. Es decir, en el caso de la orden de mercado, sólo aparece en el historial (no estoy seguro del caso de las recotizaciones durante la ejecución instantánea),

nunca aparecerá en la lista de abiertos. Y cuando una orden pendiente se dispara, se elimina de la lista de las abiertas porque ya se ha convertido en una orden de mercado y se espera a que el servidor de mercado responda, y entonces se envía al historial.

¿Estoy en lo cierto?

La verdad es que no.
 
Aleksey Mavrin:

¿Estoy en lo cierto?

Andrey lo ha explicado muy bien.

Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias

OnTradeTransaction

Andrey Khatimlianskii, 2019.12.17 08:24

No, las cosas son peores.

La orden en el momento de la transformación de pendiente (o de mercado) a histórica (ejecutada o anulada) durante algún tiempo desaparece del terminal en absoluto. No aparece ni entre los pendientes (o "iniciados" del mercado), ni entre los históricos.

Así que no es una cuestión de ejecución, sino de sincronización de estas dos tablas. La respuesta del servidor llegó ("Orden ejecutada, transacción generada tal y cual"), se elimina de una tabla, pero no se introduce en la otra.


El problema no es OrderSend. Hubo BuyLimit durante mucho tiempo. Y de repente, él y Buy-positions no se encuentran en ninguna parte. Se trata de la misma situación que ocurre.

 
fxsaber:

Andrei lo ha escrito bien.


No se trata de OrderSend. Fue BuyLimit durante mucho tiempo. Y, de repente, ni ella ni la posición de compra aparecen por ningún lado. Es más o menos la misma situación que ocurre.


Artyom Trishkin:
La verdad es que no.

Lo he entendido. Incluso la orden de mercado está en la lista de órdenes actuales durante algún tiempo (pero parece que no se muestra en el terminal en la pestaña de comercio?

A continuación, cuando se ha ejecutado la orden y se ha recibido la correspondiente transacción del servidor, el terminal realiza las siguientes acciones

1. eliminar el pedido de la corriente

2. escribir el orden en histórico

3. escribir el oficio a la lista

4. escribir la posición en la lista

y teniendo en cuenta que el Asesor Experto y el propio terminal trabajan en flujos paralelos independientes, el terminal no podrá abrir una posición todavía si usted lo solicita dentro de este corto periodo de tiempo.

posición, aún no estará allí. Como escribí antes, si esto ocurriera de acuerdo a los estándares del SGBD, no habría tal cosa, porque las 4 operaciones que hay se combinarían en una sola transacción, y no se podría quedar atrapado en "estados intermedios".

¿Verdad? Pero en realidad estoy interesado - si nos basamos en OnTrade y OnTradeTransaction, entonces no debería haber ningún retraso en estos manejadores, ocurren creando cambios en las tablas correspondientes, ¿verdad?

¿O el Terminal simplemente los envía al Asesor Experto cuando recibe eventos y cambia las tablas al mismo tiempo? En este último caso, por supuesto, es erróneo y debe corregirse, sobre todo si no está garantizada la operación de compraventa, de la que podría obtenerse la información real.

 
Aleksey Mavrin:

Lo tengo. Incluso la orden de mercado está presente en la lista de órdenes actuales durante un tiempo (sólo que parece que no se muestra en la pestaña de operaciones del terminal...)

A veces incluso se puede ver con los ojos cuando está en estado de arranque. Y es fácil de seguir con un robot.


Aleksey Mavrin:

Y teniendo en cuenta que el Asesor Experto y el propio terminal operan en flujos paralelos independientes, la situación es la siguiente: si usted solicita una posición dentro de este corto período de tiempo, no aparecerá.

No nos referimos a posiciones, sino sólo a órdenes.

Necesitamos mucho menos tiempo para añadir una entrada a la tabla de lo que a veces conseguimos. Y no lo digo en serio, no hay garantía de que vayamos a conseguir un entorno comercial adecuado.


Aleksey Mavrin:

Y en realidad me preguntaba - si nos basamos en OnTrade y OnTradeTransaction, entonces estos manejadores no deberían tener retraso, porque ocurren cuando los cambios se escriben en las tablas apropiadas?

¿O el Terminal simplemente los envía al Asesor Experto mientras recibe los eventos y cambia las tablas al mismo tiempo? En este último caso, ciertamente no es correcto y debe ser corregido, especialmente cuando OnTradeTransaction, del que podríamos obtener información real, no está garantizado.

OnTrade en su forma pura no ayudará.

Puedes combinar la espera de la sincronización de la tabla de pedidos en ella también, es cuestión de gustos. Pero aún tienes que esperar.

 
Aleksey Mavrin:

En cuanto a la "orden perdida", que no está en la lista de órdenes actuales o históricas: creo que no es un error, sólo hay que mirar de cerca las características del Terminal-Servidor MT-Market (en caso de ejecución instantánea el mercado está fuera). Creo que el terminal envía una orden de mercado, en el caso de la función sincrónica espera y obtiene una respuesta del servidor. Si no hay error la respuesta puede ser sólo TRADE_RETCODE_DONE (en el caso de la ejecución instantánea hay recotizaciones, pero hasta ahora es la orden de mercado) que en realidad significa que el servidor ha enviado la orden al mercado y espera una respuesta. El estado de la orden en este momento es ORDER_STATE_STARTED si no me equivoco y su ticket es conocido. Si la orden se ejecuta, el servidor envía OnTradeTransaction al terminal y el estado de la orden cambia a ORDER_STATE_FILLED y se conocen la operación y la posición. Sólo en este momento el terminal registra la orden en el historial.

El mercado no tiene nada que ver.

El servidor de MetaTrader envía la orden a ECN o a algún otro lugar, obtiene la respuesta y la envía al terminal. Y en el terminal la sincronización está fuera de lugar.