Discusión sobre el artículo "Biblioteca para el desarrollo rápido y sencillo de programas para MetaTrader (Parte XXXII): Solicitudes comerciales pendientes - Colocación de órdenes según condiciones"

 

Artículo publicado Biblioteca para el desarrollo rápido y sencillo de programas para MetaTrader (Parte XXXII): Solicitudes comerciales pendientes - Colocación de órdenes según condiciones:

Continuamos creando la funcionalidad para comerciar con la ayuda de solicitudes comerciales. En el presente artículo, implementaremos la posibilidad de colocar órdenes pendientes según una condición.

En el objeto de solicitud pendiente, hemos creado una matriz en la que se guardan todas las condiciones para su activación. En el temporizador de la clase de control comercial se visualiza constantemente la lista de solicitudes comerciales pendientes, y al darse el momento de ejecución de la solicitud comercial pendiente (todas las condiciones de activación escritas ella se han cumplido), se envía al servidor la orden comercial cuyos parámetros han sido indicados en la solicitud pendiente activada.

Para abrir posisiciones, basta con controlar el momento en el que se cumplen las condiciones establecidas, y en cuanto se registre este hecho, la orden comercial de apertura de posición será enviada al servidor.
No obstante, existe una complicación a la hora de colocar órdenes pendientes con la ayuda de objetos de solicitudes pendientes: la orden se coloca a una distancia determinada del precio, mientras que la posición se establece al precio actual correspondiente.
Por eso, para trabajar con la colocación de órdenes pendientes según una condición, deberemos también tener en cuenta la distancia de colocación de la orden pendiente. Y aquí nos surge un dilema: al crear una solicitud pendiente, nosotros indicamos la distancia de colocación de la futura orden pendiente, pero... ¿respecto a qué precio? ¿Respecto al precio que hay en el momento en que se crea la solicitud pendiente? ¿O respecto al precio que habrá cuando se cumplan todas las condiciones para su activación indicadas en el objeto de solicitud? Y es que en el momento en que se cumplan todas las condiciones, el precio puede haberse ido muy lejos del lugar en el que se creó la solicitud pendiente. Y el precio futuro solo lo podemos saber en un caso: cuando la única condición de activación de la solicitud pendiente es precisamente el valor de precio indicado. En los demás casos, desconocemos el precio futuro respecto al que debemos colocar la orden.

Autor: Artyom Trishkin

[Eliminado]  

He eliminado el directorio DoEasy anterior en Incluir en mi equipo, a continuación, he descargado el archivo MQL5.zip de este artículo.

Al compilar TestDoEasyPart32.mq5, tengo 61 errores de compilación 😱.


Es que falta un caracter / al principio de la linea 114 del archivo Message.mqh en la funcion CMessage::ToMail (ver flecha rosa en la captura de arriba)

Una vez añadido el carácter barra para definir la línea de comentario, se acabaron los problemas de compilación.

También tuve que cambiar la bandera de sólo lectura de los archivos en el directorio DoEasy para que el cambio pudiera ser guardado.

 
Laurent Soudron :

Borré el directorio anterior de DoEasy en Include en mi ordenador, luego descargué el archivo MQL5.zip de este artículo.

Al compilar TestDoEasyPart32.mq5, tengo 61 errores de compilación 😱.


Es que falta un caracter / al principio de la linea 114 del archivo Message.mqh en la funcion CMessage::ToMail (ver flecha rosa en la captura de arriba)

Una vez añadido el carácter barra para definir la línea de comentario, se acabaron los problemas de compilación.

También tuve que cambiar la bandera de sólo lectura de los archivos en el directorio DoEasy para que el cambio pudiera ser guardado.

Este molesto error se cometió al traducir el texto del artículo y los comentarios en el código del ruso al inglés.

En el código fuente adjunto al artículo en la parte rusa del recurso mql5.com, no hay tal error:


Gracias por su atención y preocupación.

---------------------------------

Эта досадная ошибка была внесена при переводе текста статьи и комментариев в коде с русского языка на английский.
В исходниках, приложенных к статье в русской части ресурса mql5.com, такой ошибки нету.

Спасибо за вашу внимательность и неравнодушие.
 

Hola,

hay un error sobre el tipo de orden incorrecta Tipo de llenado en mi cuenta demo IC Markets (MT5).

He depurado su código y encontró que la inicialización parece estar bien con ORDER_FILLING_IOC en mi cuenta. Sin embargo, cuando la línea engine.OpenBuy(lot,Symbol(),magic,stoploss,takeprofit); en el EA es llamada y se intenta abrir (o cerrar) una posición, entonces el tipo de llenado no se establece correctamente (ver abajo).

Hice una solución rápida (y sucia) para que funcione. Usted puede ver los cambios haciendo un diff con sus archivos en los 2 archivos que adjunto. Por favor, reemplace mi código con el código correcto.


Trading.mqh alrededor de la línea 2646:
He cambiado:
res=trade_obj.OpenPosition(type,this.m_request.volume,this.m_request.sl,this.m_request.tp,magic,comment,deviation, this.m_request.type_filling ); //en lugar de type_filling


TradeObj.mqh

CTradeObj::ClosePosition:
He añadido:
this.m_request.type_filling=ORDER_FILLING_IOC;

CTradeObj::SetOrder:
He añadido:
ENUM_ORDER_TYPE_FILLING order_type_filling=(ENUM_ORDER_TYPE_FILLING)::OrderGetInteger(ORDER_TYPE_FILLING);
this.m_request.type_filling= (type_filling==WRONG_VALUE ? order_type_filling : ORDER_FILLING_IOC);

Archivos adjuntos:
TradeObj.mqh  253 kb
Trading.mqh  445 kb
 
marco :

Hola,

hay un error sobre el tipo de orden incorrecta Tipo de llenado en mi cuenta IC Markets Demo (MT5).

He depurado su código y encontró que la inicialización parece estar bien con ORDER_FILLING_IOC en mi cuenta. Sin embargo, cuando se llama a la línea engine.OpenBuy(lot,Symbol(),magic,stoploss,takeprofit); en el EA y se intenta abrir (o cerrar) una posición, entonces el tipo de llenado no se establece correctamente (ver más abajo).

Hice una solución rápida (y sucia) para que funcione. Usted puede ver los cambios haciendo un diff con sus archivos en los 2 archivos que adjunto. Por favor, reemplace mi código con el código correcto.


Trading.mqh alrededor de la línea 2646:
He cambiado:
res=trade_obj.OpenPosition(type,this.m_request.volume,this.m_request.sl,this.m_request.tp,magic,comment,deviation, this.m_request.type_filling ); //en lugar de type_filling


TradeObj.mqh

CTradeObj::ClosePosition:
He añadido:
this.m_request.type_filling=ORDER_FILLING_IOC;

CTradeObj::SetOrder:
He añadido:
ENUM_ORDER_TYPE_FILLING order_type_filling=(ENUM_ORDER_TYPE_FILLING)::OrderGetInteger(ORDER_TYPE_FILLING);
this.m_request.type_filling= (type_filling==WRONG_VALUE ? order_type_filling : ORDER_FILLING_IOC);

Gracias. En artículos posteriores ya se ha solucionado.

Спасибо. В последующих статьях это уже исправлено.

 
Artyom Trishkin:

Gracias. En artículos posteriores, esto ya se ha solucionado.

Спасибо. В последующих статьях это уже исправлено.

Probé el código de la parte 34 pero el error persiste:


También traté de usar la EA de la parte 34 con la biblioteca DoEasy de su último artículo parte 43 pero esto la biblioteca parte 43 es incompatible con la EA de la parte 34 (motor cambiado.OnTimer método etc.).

¿Qué hago mal? : ) ¡Spasibo!

 
marco :

He probado el código de la parte 34 pero el error persiste:


También intenté usar el EA de la parte 34 con la librería DoEasy de tu último artículo parte 43 pero esta la librería parte 43 es incompatible con el EA de la parte 34 (cambiado el método engine.OnTimer etc.).

¿Qué hago mal? : ) ¡Spasibo!

¿Qué estás haciendo exactamente para obtener este error? ¿Qué EA utilizas? Es este asesor de prueba del artículo sin cambios?

Что именно вы делаете чтобы получить эту ошибку? Какой используете советник? Это тестовый советник из статьи без изменений?

 
Artyom Trishkin:

¿Qué estás haciendo exactamente para obtener este error? ¿Qué EA utilizas? ¿Es este asesor de prueba del artículo sin cambios?

Что именно вы делаете чтобы получить эту ошибку? Какой используете советник? Это тестовый советник из статьи без изменений?

Pulso "Comprar" o "Vender" sin "P" o "T" activado.

Utilicé el EA sin cambios de la parte 34.

 
marco :

Pulso "Comprar" o "Vender" sin "P" o "T" activadas.

Utilicé el EA sin cambios de la parte 34.

Hay errores de este tipo en MetaQuotes-Demo?

 
Artyom Trishkin:

¿Existen errores de este tipo en MetaQuotes-Demo?

No hay errores en MetaQuotes Demo. Interesante...
¿Y ahora?

 
marco :

No hay errores en MetaQuotes Demo. Interesante...
¿Y ahora?

Por lo tanto - Tengo que conectarme al servidor de comercio en el que encontró errores, y encontrar una razón para corregir el comportamiento.

Dime los detalles para registrar una cuenta demo.