Función OrderSendAsync()

 

La descripción dice quela función OrderSendAsync() está diseñada para realizar operaciones asíncronas sin esperar a que el servidor responda a la solicitud enviada. En caso de ejecución exitosa, el código de respuesta en la variable de resultado contiene el valor TRADE_RETCODE_PLACED ( código 10008) - "orden colocada". Ejecución satisfactoria de . no nos da ninguna garantía de que la solicitud haya llegado al servidor de comercio y haya sido aceptada para su procesamiento.

Por un lado, sabemos que el campo retcode contiene el código de retorno del servidor comercial , es decir, se supone que este código lo genera el servidor, no el terminal del usuario. Por otro lado, el Manual de Referencia indica que para lafunción OrderSendAsync() se puede devolver uno de los códigos que debe generar el servidor (código 10008), aunque la propia solicitud de operación no haya llegado al servidor de operaciones.

Pregunta 1: ¿Dónde se genera exactamente (en qué fase) el código 10008 para lafunción OrderSendAsync? [Asumiendo que este código puede ser devuelto sin que el servidor de comercio esté involucrado].

Pregunta 2: ¿El código 10008 es el código del servidor de operaciones o este código se genera en el lado del terminal del cliente antes de que el servidor reciba la solicitud de operaciones?

Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса
  • www.mql5.com
Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса - Документация по MQL5
 

1. terminal, en la operación de envío con éxito (la orden ha caído con éxito de la aeronave, pero no sabemos lo que sigue)

2. Disculpen la tautología, pero responderé de la misma manera: Sí, el código 10008 es el código de respuesta del servidor de comercio. Sí, este código lo pone el terminal en el momento de... siguiente punto 1.

¿Por qué intentas buscar entre líneas lo que ya está escrito explícitamente?

 

El modelo de órdenes comerciales asíncronas implica múltiples eventos y estados de órdenes:

Diagrama de los estados de las órdenes de mercado

Diagrama de estados de orden condicional

Actualmente en MT5:

  1. CREADO - el hecho mismo de que se llame a la función OrderSendAsync y OrderSend (este estado de la orden en MT5 no es de ninguna manera identificable desde el exterior).
  2. Si la orden es CANCELADA (el propio terminal la ha cortado a través de sus filtros. Por ejemplo, el precio límite es peor que el precio actual), la respuesta es negativa desde OrderSend y OrderSendAsync.
  3. OPENED es el resultado de TRADE_RETCODE_PLACED (su orden pasa con éxito por los filtros internos del terminal y se envía al servidor) para OrderSendAsync.
  4. SUBMIT_OK - el servidor ha aceptado su orden de comercio. Si es una orden pendiente, OrderSend completará su ejecución. Si el mercado - seguir esperando.
  5. FILLED - su orden está en estado de ejecución (por ejemplo, la ha enviado a través de STP y está esperando una respuesta). Continúe esperando.
  6. FILL_OK - su orden se ha ejecutado. Si el mercado - OrderSend completará su ejecución.

Consulte los diagramas anteriores para obtener más detalles.

 
Rosh:

1. terminal, en la operación de envío con éxito (la orden ha caído con éxito de la aeronave, pero no sabemos lo que sigue)

2. Disculpen la tautología, pero responderé de la misma manera: Sí, el código 10008 es el código de respuesta del servidor de comercio. Sí, este código lo pone el terminal en el momento de... siguiente punto 1.

¿Por qué intentas buscar entre las líneas lo que ya está escrito explícitamente?

No estoy buscando "entre líneas", pero de nuevo, estoy tratando de entender las etapas de dos (ahora) funciones comerciales.

En tu comentario sobre la función OrderSendAsync, dices que"la función es similar a OrderSend() en cuanto a su propósito y parámetros". Pero, a juzgar por su respuesta, la función OrderSendAsync no es exactamente la misma que la función OrderSend. Este último está destinado a comprobar la solicitud de comercio en el servidor, por lo que los códigos devueltos por OrderSend() son los códigos generados por el propio servidor, no otra sustancia. En el caso de OrderSendAsync() el código de retorno es generado por el terminal, por lo que este código (código 10008) no puede ser considerado como código de retorno del servidor. Se trata de un "código generado por el terminal" aunque lo incluya formalmente en la lista de códigos del servidor.

En otras palabras, las dos funciones son dos enfoques: "código generado por el servidor" frente a "código generado por el terminal". Conocer esta sutileza es necesario para comprender correctamente de quién procede exactamente el "código de retorno": del servidor o del terminal.

 
hrenfx:

OPENED es el resultado de TRADE_RETCODE_PLACED para OrderSendAsync.

    ¿Podemos concluir que TRADE_RETCODE_PLACED (10008) no sirve para nada en cuanto a su expectativa cuando se utiliza la función OrderSend original?

    ¡Gracias por el diagrama!

    ¿Cómo se traduce correctamente "Order condition gets met"?

     
    Yedelkin:

    ¿Podemos concluir que TRADE_RETCODE_PLACED (10008) no sirve para nada en cuanto a su expectativa cuando se utiliza la función OrderSend original?

    TRADE_RETCODE_PLACED no tiene nada que ver con el OrderSend secuencial.

    ¿Cómo se traduce correctamente "Order condition gets met"?

    El precio actual satisface la condición de la orden. En lugar de LLENO puede ser CANCELADO, por ejemplo si no hay suficiente margen para ejecutar la orden.

    De nuevo, para trabajar de forma asíncrona, necesitamos un sistema de eventos potente, donde al llegar haya una opción de recibir:

    • El mensaje de texto del evento.
    • El momento de su creación.
    • Con qué orden se relaciona.
    • El tipo de mensaje (noticia, pedido, estado de la comunicación, etc.)

    La arquitectura de la propia plataforma debe estar muy bien pensada. Si hay lagunas en la fase de diseño de la arquitectura, es muy difícil sortearlas para lograr la universalidad.

    IMessage (JForex API 2.9.6.1 API)
    • www.dukascopy.com
    FRAMES    NO FRAMES
     

    hrenfx:

    Yedelkin:

    ¿Podemos concluir que TRADE_RETCODE_PLACED (10008) no sirve para nada en cuanto a su expectativa cuando se utiliza la función OrderSend original?

    TRADE_RETCODE_PLACED no tiene nada que ver con el OrderSend secuencial.

    ¡Allí! Llegué a esto intuitivamente hace medio año, y tú lo confirmas un poco :) Ya está bien :)
     
    hrenfx:

    De nuevo, para trabajar de forma asíncrona, se necesita un sistema de eventos potente en el que sea posible recuperar a la llegada:

    • El mensaje de texto del evento.
    • El momento de su creación.
    • A qué orden se refiere.
    • Tipo de mensaje (noticia, pedido, estado de la comunicación, etc.)
    ¿Se trata, entre otras cosas, de la necesidad de detallar el evento OnTrade?
     
    Yedelkin:
    ¡Allí! Llegué a esto intuitivamente hace medio año, y tú lo confirmas un poco :) Ya está bien :)
    Un hombre siempre se alegra cuando alguien confirma la corrección de su razonamiento. No importa que se corresponda con la realidad.
     
    Rosh:
    Una persona siempre se alegra cuando alguien confirma lo correcto de su razonamiento. No importa lo cierto que sea.
    Pues bien, en los últimos ocho meses nadie ha refutado la conclusión pública del hombre. Ni teóricamente ni por los resultados de las pruebas. Pero gracias por sembrar la duda :)
     

    Hay que aclararlo:

    TRADE_RETCODE_PLACED para OrderSend es la respuesta del servidor.

    TRADE_RETCODE_PLACED para OrderSendAsync es una respuesta terminal.

    Aunque los códigos son idénticos, tienen un significado bastante diferente. Lo más probable es que los desarrolladores arreglen esta ambigüedad.

    Por eso debes entenderlo:

    TRADE_RETCODE_PLACED к последовательной OrderSend не имеет никакого отношения.

    debe entenderse en el contexto adecuado.