Función OrderSendAsync() - página 2

 
hrenfx:

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:

debe entenderse en el contexto adecuado.

Entonces, por favor, explique en qué condiciones el servidor debe devolver el código TRADE_RETCODE_PLACED cuando se envía una solicitud de operación mediante la función OrderSend. Porque según el comentario de la función OrderSendAsync y la respuesta de Roche, este mismo código TRADE_RETCODE_PLACED indica sólo el envío exitoso de una solicitud desde el terminal al servidor. Así, resulta que tan pronto como la solicitud llega al servidor y comienza su procesamiento/verificación, el servidor se verá obligado a generar otros códigos "reales" del servidor "basados en los resultados del procesamiento". Así que no entiendo muy bien por qué el servidor (es decir, el servidor) debe devolver el código TRADE_RETCODE_PLACED si este código se refiere a la etapa de vida de la solicitud, antes de que ésta aparezca en el servidor. ¿O el código TRADE_RETCODE_PLACED tiene algún otro significado en relación con la funcionalidad de OrderSend?
 

OrderSend puede recibir una respuesta tanto del servidor como del terminal (en caso de que los filtros del terminal fallen).

OrderSendAsync siempre recibe la respuesta del terminal solamente. Para recibir la respuesta del servidor es necesario capturar los eventos apropiados en onTrade.

 
hrenfx:

OrderSend puede recibir una respuesta tanto del servidor como del terminal (en caso de que los filtros del terminal fallen).

¿Entiendo bien la siguiente idea?

El terminal ha comprobado la solicitud de OrderSend y la ha enviado con éxito al servidor, recibiendo el retcode un valor intermedio de TRADE_RETCODE_PLACED. En este punto la conexión se interrumpe y todo lo que OrderSend puede devolver es el código TRADE_RETCODE_PLACED pegado en el campo retcode? ¿Será este el ejemplo en el que OrderSend devuelve TRADE_RETCODE_PLACED?

 
Yedelkin:

¿He entendido bien la siguiente idea?

El terminal ha comprobado la solicitud de OrderSend y la ha enviado con éxito al servidor, recibiendo el retcode el valor intermedio TRADE_RETCODE_PLACED. En este punto la conexión se interrumpe y todo lo que OrderSend puede devolver es el código TRADE_RETCODE_PLACED pegado en el campo retcode? ¿Será este ejemplo cuando OrderSend devuelva TRADE_RETCODE_PLACED?

Puede ser, pero lo dudo. Lo más probable es que sea TRADE_RETCODE_TIMEOUT a través de TimeOut-time para tal interrupción de la comunicación.

Sinceramente, no entiendo para qué sirve este nerfeo en el caso de OrderSend. Tal vez los desarrolladores expliquen más en la ayuda.

P.D. No he escrito ni una sola línea en MQL5. Por lo tanto, todas mis reflexiones sobre el tema pueden ser ignoradas.

 

...Aun así, eso es una tontería. La Guía del Usuario del Terminal de Cliente (enero de 2012) dice que una de las etapas del pedido es la etapa "set(placed) - dealer accepted order".

Es decir, según el manual, la orden está señalando la etapa de vida de una solicitud de comercio, cuando ya ha llegado con éxito al servidor. Y la descripción de la función OrderSendAsync( ) dice justo lo contrario: el código TRADE_RETCODE_PLACED no depende de la llegada al servidor.

 
hrenfx:

Sinceramente, no veo por qué es necesario este empacho en el caso de OrderSend.

Personalmente, me gustaba la idea de necesitar el "procesamiento del código de retorno" en mi época. Pero para escribir correctamente este tipo de tratamiento, hay que saber de qué se trata. Llevo mucho tiempo intentando entender con qué está relacionado exactamente el código TRADE_RETCODE_PLACED.
 

En general, cualquiera puede escribir un MyOrderSend en serie a través de OrderSendAsync:

  1. Llamada a OrderSendAsync.
  2. Espere la respuesta adecuada del servidor en onTrade.
  3. Ha salido de MyOrderSend con esta respuesta.

Con esta implementación MyOrderSend será totalmente idéntico al OrderSend regular (que puede ser simplemente eliminado de la API mediante la implementación a través de OrderSendAsync en la biblioteca regular).

 
hrenfx:

Con esta implementación MyOrderSend será completamente idéntico al OrderSend regular (que puede ser simplemente eliminado de la API mediante la implementación de OrderSendAsync en la biblioteca regular).

Una idea interesante para el autodesarrollo. Pero mientras no se parametrice onTrade, cualquier comprobación que utilice onTrade en la biblioteca de personal será probablemente mucho más lenta que la propia función OrderSend. Podría estar equivocado.
Документация по MQL5: Торговые функции / OrderSend
Документация по MQL5: Торговые функции / OrderSend
  • www.mql5.com
Торговые функции / OrderSend - Документация по MQL5
 

Generalmente, la entrada OrderSendAsync es un evento histórico para Metatrader. En todo el tiempo que ha existido la API de trading (a partir de Metatrader3 (no he visto las anteriores)) Metatrader, aunque implementado a través de su propio lenguaje, ha permanecido prácticamente sin cambios en su esencia. OrderSendAsync es el primer cambio sustancial en la API de comercio de Metaquotes.

Felicito sinceramente a los desarrolladores por este acontecimiento y deseo que el modelo asíncrono tenga una funcionalidad adecuada.

 

Mensaje técnico. Reuniendo declaraciones interesantes en un solo hilo.

Renat:

Tenga en cuenta que hay y habrá límites en el número de órdenes simultáneas en la cola de ejecución de una cuenta. Ahora mismo son 16 solicitudes, si no me equivoco.

Las operaciones asíncronas trabajarán cuidadosamente con la "ventana del número de órdenes admisibles", esperando a que se ejecute parte del lote anterior antes de enviar el siguiente. Además, habrá protecciones contra las inundaciones estúpidas/de prueba. Hasta ahora se recibe un error cuando se desborda el número de solicitudes permitidas.

El nuevo método de operaciones asíncronas a través de OrderSendAsync resuelve el problema principal - permite realizar una docena de operaciones al instante. Esta es una herramienta muy poderosa y debe usarse con cuidado y siempre con la vista puesta en la posibilidad de un baneo por parte del servidor y del broker.