Discusión sobre el artículo "Transacciones comerciales. Estructuras de solicitud y respuesta, descripción y registro."

 

Artículo publicado Transacciones comerciales. Estructuras de solicitud y respuesta, descripción y registro.:

En el presente artículo veremos cómo trabajar con las estructuras de las solicitudes comerciales: la creación de una solicitud, su verificación preliminar antes de enviarla al servidor, la respuesta del servidor a una solicitud comercial y la estructura de las transacciones comerciales. Asimismo, crearemos funciones simples y cómodas para enviar órdenes comerciales al servidor y, basándonos en todo lo discutido, y también crearemos un asesor-informante sobre las transacciones comerciales.

En MQL5, para colocar órdenes pendientes, abrir posiciones, cambiar órdenes y posiciones, existe la función OrderSend(). El primer parámetro de entrada de la función es la estructura de la solicitud comercial MqlTradeRequest. El campo de acción de la estructura indica el tipo de acción a realizar, mientras que los campos restantes se completan dependiendo de la acción seleccionada en el campo de acción. Por consiguiente, transmitiendo a la función los parámetros necesarios para una solicitud comercial, enviaremos varias solicitudes al servidor.

Autor: Artyom Trishkin

 

Gracias, Artyom, por concentrar toda la información necesaria en un solo artículo. Lo he añadido a mis favoritos.

Saludos, Vladimir.

 

Gracias por el interesante artículo. Pero es una lástima que se preste muy poca atención a la función OrderCheck()

Espero un artículo aparte dedicado a esta útil función...

 
Alexey Viktorov #:

Gracias por el interesante artículo. Pero es una lástima que se preste muy poca atención a la función OrderCheck()

Espero un artículo aparte dedicado a esta útil función...

En algunas versiones antiguas de MT5 me encontré con que OrderCheck() a veces rechazaba peticiones que en realidad se ejecutaban con bastante éxito. Me di por vencido y no quiero volver a probar estos errores en robots de combate, a pesar de que pueden haber sido corregidos.

 
Alexey Viktorov #:

Gracias por el interesante artículo. Pero es una lástima que se preste muy poca atención a la función OrderCheck()

Espero un artículo aparte dedicado a esta útil función...

Estaba escribiendo una "ayuda extendida" - mucha información de referencia. Y todo sobre OrderCheck es lacónico y despejado. Y no hay excesos en sí mismo. He descrito qué, qué y cómo se rellenan los campos. No se rellenan en todos los casos. La respuesta de la función con el código es casi siempre "OK", porque estoy acostumbrado a rellenar correctamente la solicitud de operación. Si se toma la situación acerca de "casi", es a propósito introducido datos incorrectos para comprobar el trabajo. Es decir, no tengo ni idea de qué describir allí, e incluso para un artículo.

 
Artyom Trishkin #:

Estaba escribiendo algo de "ayuda ampliada": mucha información de fondo. Pero todo sobre OrderCheck parece conciso y despejado. Y no hay excesos en sí mismo. He descrito qué, qué y cómo se rellenan los campos. No se rellenan en todos los casos. La respuesta de la función con el código es casi siempre "OK", porque estoy acostumbrado a rellenar la solicitud de comercio correctamente. Si se toma la situación acerca de "casi", es a propósito introducido datos incorrectos para comprobar el trabajo. Es decir, no tengo ni idea de qué describir allí, e incluso para un artículo.

Por lo menos pocas personas han leído cuidadosamente la estructura de MqlTradeCheckResult

struct MqlTradeCheckResult
  {
   uint         retcode;             // Código de respuesta
   double       balance;             // Saldo después de la transacción
   double       equity;              // Patrimonio neto después de la transacción
   double       profit;              // Beneficio Flotante
   double       margin;              // Requisitos de margen
   double       margin_free;         // Margen libre
   double       margin_level;        // Nivel de margen
   string       comment;             // Comentario al código de respuesta (descripción del error)
  };

Y más a menudo dicen que esta función está destinada exclusivamente, como está escrito en la documentación

La función OrderCheck() comprueba la suficiencia de fondos para la operación comercial requerida.

Pero vale la pena prestar atención a los campos de la estructura "Saldo después de ..." y "Capital después de ...". No me refiero en absoluto a los "Requisitos de margen". Estos parámetros son muy útiles. Por ejemplo, si después de realizar una operación quedan "cuarenta kopeks" de capital en la cuenta... ¿Es necesario realizar dicha operación, aunque haya fondos suficientes y los demás parámetros de la orden estén en orden? Por supuesto, es posible obtener este valor por otro método, pero en mi opinión es mucho más favorable obtener varios parámetros útiles por una sola función.

Y de acuerdo con mi experiencia de uso, el código de respuesta corrige los precios SL y/o TP incorrectos en caso de una comprobación exitosa. Y no sólo ellos. Sobre esto me gustaría conseguir un artículo. Sobre que otros códigos funcionan...

Desafortunadamente OrderCheck() no reporta un error.

10018

TRADE_RETCODE_MARKET_CLOSED

El mercado está cerrado.


Así que tal vez los desarrolladores finalmente presten atención a este problema...

 
Alexey Viktorov #:

Al menos pocas personas leen atentamente la estructura de MqlTradeCheckResult

Y lo más frecuente es que digan que esta función está pensada exclusivamente, como está escrito en la documentación

Pero vale la pena prestar atención a los campos de la estructura "Saldo después de ..." y "Capital después de ...". No me refiero en absoluto a "Requisitos de margen". Estos parámetros son muy útiles. Por ejemplo, si quedan "cuarenta kopeks" de capital en la cuenta después de realizar una operación... ¿Es necesario realizar dicha operación, aunque haya fondos suficientes y los demás parámetros de la orden estén en orden? Por supuesto es posible obtener este valor por otro método, pero en mi opinión es mucho más favorable obtener varios parámetros útiles por una sola función.

Y de acuerdo a mi experiencia de uso, el código de respuesta corrige los precios SL y/o TP incorrectos en caso de una comprobación exitosa. Y no solo ellos. Sobre esto me gustaría conseguir un artículo. Sobre que otros códigos funcionan...

Desafortunadamente OrderCheck() no reporta un error

10018

TRADE_RETCODE_MARKET_CLOSED

Mercado cerrado


Así que tal vez los desarrolladores finalmente prestar atención a este problema....

No entiendo de qué SL y TP estás hablando? No están en los campos de la estructura ...

Y sobre la equidad, el saldo después de la transacción ... Bueno ..., ya sabes, yo estaba pensando en decir que es útil saber que, y que estos datos deben ser analizados antes de enviar una orden al servidor. ¿Pero no he dicho eso? O debería haber dejado claro que no hay que abrir una posición si luego no tienes para un bollo ) ... . Pero ya ves, lo he pensado y creo que está claro. Por eso acabo de escribir que se pueden analizar los campos rellenos de esta estructura. Y sobre que no se devuelve "Mercado cerrado" no escribí (aunque quería) simplemente porque se me olvidó ). Y pensé que estos son los códigos de retorno del servidor de comercio. Son para todos los casos de la vida. Al parecer, este código no es para este caso. Devuelve normalmente en OrderSend. Aunque sí, para comprobar si el mercado está cerrado, es necesario enviar una orden - una solución débil. Pero lo que hay.

 
Artyom Trishkin #:

No entiendo de qué SL y TP estás hablando? No están en los campos de estructura...

Me refiero a los códigos

10014

TRADE_RETCODE_INVALID_VOLUME

Volumen incorrecto en la consulta

10015

TRADE_RETCODE_INVALID_PRICE

Precio incorrecto en la consulta

10016

TRADE_RETCODE_INVALID_STOPS

Paradas incorrectas en la solicitud


Estos códigos son devueltos a la estructura MqlTradeCheckResult y son perfectamente analizados.

En otras palabras, si usted no quiere escribir, o Rashid no da la bienvenida, no insisto.

 
Alexey Viktorov #:

Me refiero a los códigos

10014

TRADE_RETCODE_INVALID_VOLUME

Volumen incorrecto en la solicitud

10015

TRADE_RETCODE_INVALID_PRICE

Precio incorrecto en la solicitud

10016

TRADE_RETCODE_INVALID_STOPS

Paradas incorrectas en la solicitud


Estos códigos son devueltos a la estructura MqlTradeCheckResult y son perfectamente analizados.

En otras palabras, si no quieres escribir, o Rashid no lo ve con buenos ojos, no insisto.

Bueno, ¿qué se puede escribir aquí, excepto "Usted puede analizar los códigos de respuesta"? Bueno, una persona recibió un código de este tipo - está claro que las paradas están mal. Así que hay que procesarlo programáticamente para que no haya paradas incorrectas. El análisis de los códigos de respuesta es también el análisis. Así como los campos de estructura. Es decir, todo lo dicho, analizar y sacar conclusiones. ¿O usted piensa que usted necesita para describir cada respuesta del servidor y qué acciones se deben hacer en este caso? Bueno, esto se implementa en la biblioteca, que aún no he terminado de escribir, pero el comercio se ha hecho allí durante mucho tiempo. Con un análisis completo y haciendo ajustes. ¿Por qué repetirse?

 
Artyom Trishkin #:

Bueno, ¿qué se puede escribir aquí, excepto "Usted puede analizar los códigos de respuesta".... Bueno, una persona recibió un código de este tipo - está claro que las paradas no son correctas. Así que debe ser procesado mediante programación para que no haya paradas incorrectas. El análisis de los códigos de respuesta es también el análisis. Así como los campos de estructura. Es decir, todo lo dicho, analizar y sacar conclusiones. ¿O usted piensa que usted necesita para describir cada respuesta del servidor y qué acciones se deben hacer en este caso? Bueno, esto se implementa en la biblioteca, que aún no he terminado de escribir, pero el comercio se ha hecho allí durante mucho tiempo. Con un análisis completo y haciendo ajustes. ¿Por qué repetirse?

Con el fin de obtener y analizar el código de retorno, usted debe por lo menos entender lo que esta función es y entender su utilidad. Esto es exactamente lo que estoy hablando. El artículo dará una comprensión ampliada de la función, no sólo una descripción de la documentación.

Foro sobre trading, sistemas de trading automatizados y prueba de estrategias de trading

Debate sobre el artículo "Operaciones comerciales. Estructuras de solicitudes y respuestas, descripción y salida de registro".

Alexey Viktorov, 2023.08.03 13:40

Al menos pocas personas leen cuidadosamente la estructura de MqlTradeCheckResult

struct MqlTradeCheckResult
  {
   uint         retcode;             // Código de respuesta
   double       balance;             // Saldo después de la transacción
   double       equity;              // Patrimonio neto después de la transacción
   double       profit;              // Beneficio Flotante
   double       margin;              // Requisitos de margen
   double       margin_free;         // Margen libre
   double       margin_level;        // Nivel de margen
   string       comment;             // Comentario al código de respuesta (descripción del error)
  };

Y la mayoría de las veces dicen que esta función está destinada exclusivamente, como está escrito en la documentación

La función OrderCheck() comprueba la suficiencia de fondos para laoperación comercialrequerida.

Ahí lo dejo.
 
Artyom Trishkin #:
Aunque sí, para comprobar si el mercado está cerrado, es necesario enviar una orden - una solución débil. Pero es así.

¿Sigue siendo una tarea tan imposible para los creadores del lenguaje de programación MQL5 - la función MarketClosed sin bailar la pandereta?

Saludos, Vladimir.