Enrico ¿es posible comprobar si la orden (o posición) se cerró parcialmente.
En MT4 tengo una nueva entrada en caso de cierre parcial. De hecho, no es una nueva entrada, pero todavía entrada anterior. Así que necesito separar tales órdenes. Las que indican una verdadera entrada en el mercado y las que aparecen después de un cierre parcial (no una nueva entrada). ¿Es posible utilizando sus clases?
Enrico ¿es posible comprobar si la orden (o posición) se cerró parcialmente.
En MT4 tengo una nueva entrada en caso de cierre parcial. De hecho, no es una nueva entrada, pero todavía entrada anterior. Así que necesito separar tales órdenes. Las que indican una verdadera entrada en el mercado y las que aparecen después de un cierre parcial (no una nueva entrada). ¿Es posible utilizando sus clases?
¿O sería un objeto COrder hasta que la orden se cerrara completamente? Es decir, ¿después del cierre parcial no hay un nuevo objeto COrder?
Si es así, ¿cómo obtengo el beneficio total de la orden?
Además, ¿cómo obtengo la entrada inicial de la orden o el tipo de orden inicial?
Supongamos que tengo vender 5.00 #1 orden en 1.09246. Siguiente cierre parcial comprar 2.00 #2 a 1.08896. Y cierre final restante comprar 3.00 #3 a 1.09161 (debido a trailing stop en realidad).
Este es mi código:
COrders *orders=order_manager.OrdersHistory(); for(int i=order_manager.OrdersHistoryTotal()-1;i>=0;i--) { COrder *order=orders.At(i); if(!CheckPointer(order)) continue; order.OnTick(); if(!order.IsClosed()) continue; if(order.OrderType()!=0 && order.OrderType()!=1) continue;
Para simplificar vamos a llamar a todas estas 3 órdenes como posición.
El método IsClosed() devuelve true cuando la posición se cierra (en la última orden #3). Pero como obtengo el tipo de posición, la entrada de la primera orden de la posición, el precio de apertura de la posición. El volumen inicial de la posición parece que puede ser calculado usando el método InitVolume(). ¿Qué pasa con el resto?
Supongamos que tengo vender 5.00 #1 orden en 1.09246. Siguiente cierre parcial comprar 2.00 #2 a 1.08896. Y cierre final restante comprar 3.00 #3 a 1.09161 (debido a trailing stop en realidad).
Este es mi código:
Para simplificar vamos a llamar a todas estas 3 órdenes como posición.
El método IsClosed() devuelve true cuando la posición se cierra (en la última orden #3). Pero como obtengo el tipo de posición, la entrada de la primera orden de la posición, el precio de apertura de la posición. El volumen inicial de la posición parece que puede ser calculado usando el método InitVolume(). ¿Y el resto?
No estoy completamente seguro de lo que estas tratando de hacer, pero para obtener la ganancia/pérdida no realizada en MQL5 en una instancia COrder, una forma es obtener el volumen restante, y luego multiplicarlo por la diferencia entre el precio actual de mercado (bid o ask) y el precio de entrada COrder, y luego multiplicarlo por el valor del tick. La parte más complicada es cuando el punto del símbolo no es igual al tamaño del tick (tendrá que dividir la diferencia por el tamaño del tick). El oro solía ser así, pero ya no, que yo sepa. Simplemente es mejor encontrar un broker que ofrezca mayor liquidez. La misma instancia COrder se utiliza hasta el final. En MQL4, basta con seleccionar el ticket de la orden y llamar a la función OrderProfit().
When one sends a trade request, there are only two outcomes: processed or not processed. If the trade was not processed, it means that there was no deal, as the trade server was not able to process it for some reason (usually due to errors). Now, if the trade is processed, in MQL5, the client and the server have a deal. In this case, the order can be fully executed or partially executed.
Eso no es totalmente exacto, también puede tener un tiempo de espera. Lo que significa que usted no sabe si la orden fue procesada o no. Por supuesto, al final, una orden se procesa o no, pero es importante conocer y procesar el timeout en una cuenta real.
MetaTrader 4 no tiene esta opción, ya que la orden sólo se ejecuta por completo o no (fill o kill).
...
En MQL4, el cálculo del volumen es sencillo. Cada vez que un asesor experto envía una solicitud de comercio, el volumen de la solicitud también se incluye, y sería denegada o aceptada.
Eso no es exacto. MT4 también puede tener órdenes parcialmente ejecutadas. Por supuesto que debería ser raro en Forex que se negocia principalmente por MT4, pero puede suceder técnicamente.
En general no veo la utilidad de las clases que proporcionaste en este artículo, ya que todavía necesitas MT4/MT5 específico en el código principal, y directivas del compilador. (Tal vez se aborda en otros artículos, no los he leído todavía).

- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
Artículo publicado Asesor experto multiplataforma: Órdenes:
MetaTrader 4 y MetaTrader 5 usan reglas diferentes en el procesamiento de solicitudes comerciales. En este artículo se discutirá la posibilidad de usar un objeto de clase para representar las operaciones procesadas por el servidor, para que en lo sucesivo el asesor pueda trabajar con ellas independientemente de la versión de la plataforma comercial y del modo ejecutado.
A diferencia de MetaTrader 4, las entradas del registro se encuentran en la pestaña "Diario" de la ventana "Terminal" (y no en la pestaña "Expertos").
Autor: Enrico Lambino