Discusión sobre el artículo "Biblioteca para el desarrollo rápido y sencillo de programas para MetaTrader (Parte XXVII): Trabajando con las solicitudes comerciales - Colocación de órdenes pendientes"

 

Artículo publicado Biblioteca para el desarrollo rápido y sencillo de programas para MetaTrader (Parte XXVII): Trabajando con las solicitudes comerciales - Colocación de órdenes pendientes:

En el presente artículo, continuaremos trabajando con las solicitudes comerciales e implementaremos la colocación de órdenes pendientes. Asimismo, corregiremos algunos errores localizados en el funcionamiento de la clase comercial.

En el artículo anterior, comenzamos a implementar solicitudes comerciales pendientes y creamos la primera solicitud pendiente para abrir una posición en el caso de que obtuviésemos un error en la clase comercial después de enviar una solicitud al servidor. Hoy, continuaremos el desarrollo de la clase comercial, centrándonos en el trabajo con las solicitudes pendientes, y también implementaremos la creación de una solicitud pendiente cuando se dé un error al colocar órdenes pendientes.

Durante la simulación de la clase comercial, hemos detectado algunos errores cometidos en su diseño. En particular, a los objetos comerciales de los símbolos, al inicializarlos en el constructor de la clase, se les asignaban valores por defecto rigurosamente establecidos, que podían no tener soporte en las especificaciones del símbolo. Esto provocaba errores obtenidos desde el servidor al intentar colocar órdenes pendientes: el servidor generaba el error de tipo soportado de expiración de la orden, y este error no se corregía en ninguna parte, lo que finalmente provocaba que no fuese posible colocar la orden. Al enviar una solicitud comercial con los valores por defecto, a la solicitud comercial también se le enviaban ciertos datos que carecían de soporte, y que posteriormente no eran corregidos en ninguna parte. Para encontrar una salida a esta situación, debíamos indicar directamente en la solicitud comercial los datos correctos, que se correspondiesen con las especificaciones del símbolo en el que se tendría que realizar la operación comercial.

Y esto resulta muy incómodo, dado que requiere conocimientos obligatorios sobre las especificaciones del símbolo y la introducción de los valores exactos manualmente, en lugar de permitir al usuario confiar la corrección automática de los valores a la propia biblioteca. Por eso, vamos a introducir ciertas correcciones en la lógica del trabajo con la clase comercial, de forma que todos los objetos comerciales de los símbolos se inicialicen seleccionando automáticamente los valores correctos en el asesor, en el manejador OnInit(). A los métodos comerciales de la clase comercial se les transmitirán por defecto valores -1 para los tipos de rellenado y expiración de órdenes, lo que será una señal para utilizar los valores por defecto establecidos correctamente con anterioridad. Si se transmite otro valor desde el programa al método comercial, se utilizará este; si el valor resulta erróneo, será corregido al procesar los errores en la clase comercial.

Autor: Artyom Trishkin