Bibliotecas: MT4Orders - página 55

 
Valeriy Yastremskiy:

Sí, esta parte funciona, y el ticket de la orden pendiente pasa al ticket de la posición y todo se modifica, pero no funciona de inmediato. Al cerrar una posición, aparece un trato en las órdenes SL o TP y no funciona la comprobación en el ticket para el momento de cerrar una orden de mercado.

Me rompe la cabeza. Cierre por SL. En el tester, si el ticket de la orden es 3, coincide con el ticket de la operación y el último selector es normal. Si es 2, el error de selección es 4754. En real/demo siempre no coincide.

Por favor, dame el fichero mq5 que crees que no funciona. Estás desperdiciando mucha información. No ayuda a entender lo que quieres decir. Mejor la fuente.

 
fxsaber:

Dame el archivo mq5 que crees que no funciona. Estás desperdiciando mucha información. No ayuda a entender lo que quieres decir. Mejor la fuente.

El código es un desastre, pido disculpas.

Archivos adjuntos:
 
Valeriy Yastremskiy:

El código es un desastre, pido disculpas.

La próxima vez mejor con los méritos.

#include <MT4Orders.mqh> // https://www.mql5.com/es/code/16006

#define  Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

void OnTick()
{
  static TICKET_TYPE Ticket = -1;
  
  if (Ticket == -1)
    Ticket = OrderSend(_Symbol, OP_BUY, 1, Ask, 0, Ask - 100 * _Point, 0);
  else if (!OrdersTotal())
  {
    Print(OrderSelect(Ticket, SELECT_BY_TICKET)); // verdadero
    OrderPrint();
    
    Print(__MT4ORDERS__);
    
    ExpertRemove();
  }
}


Resultado.

2020.10.22 22:16:20.196 2020.10.21 00:03:10   market buy 1 EURAUD sl: 1.67661 (1.67664 / 1.67761)
2020.10.22 22:16:20.196 2020.10.21 00:03:10   deal #2  buy 1 EURAUD at 1.67761 done (based on order #2)
2020.10.22 22:16:20.196 2020.10.21 00:03:10   deal performed [#2  buy 1 EURAUD at 1.67761]
2020.10.22 22:16:20.196 2020.10.21 00:03:10   order performed buy 1 at 1.67761 [#2  buy 1 EURAUD at 1.67761]
2020.10.22 22:16:20.198 2020.10.21 00:12:59   stop loss triggered #2  buy 1 EURAUD 1.67761 sl: 1.67661 [#3  sell 1 EURAUD at 1.67661]
2020.10.22 22:16:20.198 2020.10.21 00:12:59   deal #3  sell 1 EURAUD at 1.67638 done (based on order #3)
2020.10.22 22:16:20.198 2020.10.21 00:12:59   deal performed [#3  sell 1 EURAUD at 1.67638]
2020.10.22 22:16:20.198 2020.10.21 00:12:59   order performed sell 1 at 1.67638 [#3  sell 1 EURAUD at 1.67661]
2020.10.22 22:16:20.198 2020.10.21 00:12:59   true
2020.10.22 22:16:20.198 2020.10.21 00:12:59   #3 2020.10.21 00:03:10.025 buy 1.00 EURAUD 1.67761 1.67661 0.00000 2020.10.21 00:12:59.874 1.67638 0.00 0.00 -123.00 sl 1.67661 0
2020.10.22 22:16:20.198 2020.10.21 00:12:59   2020.10.21
2020.10.22 22:16:20.198 2020.10.21 00:12:59   ExpertRemove() function called
 
fxsaber:

Mejor con los méritos la próxima vez.


Resultado.

Gracias.

 
fxsaber:

Mejor con los méritos la próxima vez.

Resultado.

Encontrada la razón, versión antigua de MT4Orders 2018. Con ella y tu ejemplo daba falso cambiado a la última todo funcionaba, y mi código también)

Gracias.

 
Valeriy Yastremskiy:

Encontrada la razón, versión antigua de MT4Orders 2018.

Por desgracia, no han descubierto la manera de hacer que los usuarios tropiezan menos en el uso de versiones no actualizadas de la biblioteca.

 

Si alguien incursiona, al usar esta lib en MT5 en RannForex con la configuración "Enviar órdenes limitadas al mercado a un precio peor que el actual en N puntos" al modificar una orden limitada, la alt saldrá volando en este lugar

          WHILE((EqualSL && EqualTP && EqualPrice));

          if (!Res)
            ::Print("Line = " + (string)__LINE__ + "\n" + TOSTR(::OrderGetDouble(ORDER_SL)) + TOSTR(Request.sl)+
                    TOSTR(::OrderGetDouble(ORDER_TP)) + TOSTR(Request.tp) +
                    TOSTR(::OrderGetDouble(ORDER_PRICE_OPEN)) + TOSTR(Request.price) +
                    TOSTR(EqualSL) + TOSTR(EqualTP) + TOSTR(EqualPrice) +
                    TOSTR(::OrderSelect(Result.order)) +
                    TOSTR2((ENUM_ORDER_STATE)::OrderGetInteger(ORDER_STATE)));

Esto se debe al hecho de que MT4Orders ve la orden desaparecida pro-marcada, pero el broker inmediatamente corrige el precio de vuelta, y al solicitar los parámetros de la orden, el precio ya es diferente. Así que parece ser una característica.

 
traveller00:

Si alguien incursiona, al utilizar esta lib en MT5 en RannForex con la configuración "Enviar órdenes limitadas al mercado a un precio peor que el actual por N pips", al modificar el limitador el alt saldrá volando en este lugar

Esto es debido a que MT4Orders ve la orden ida pro-marcada, pero el broker inmediatamente corrige el precio de vuelta, y al solicitar los parámetros de la orden, el precio ya es diferente. Así que parece ser una característica.

Foro sobre trading, sistemas automatizados de trading y testeo de estrategias de trading.

Bibliotecas: MT4Orders

fxsaber, 2020.09.29 08:45 AM

Con esa línea

MT4ORDERS::OrderSend_MaxPause = 0; // Desactivación de la validación MT5-OrderSend.

puedes desactivar todo esto. Puede ser útil si el historial de trading de MT5 se está ralentizando, porque MT4Orders comprueba la corrección (e incluso corrige) de MT5-OrderSend a veces accediendo a este historial.

Yo no recomiendo esto.

Yo uso esta característica.
 

Tengo un EA MT4 que estoy tratando de puerto a MT5 usando MT4Orders para que pueda mantener una sola fuente, pero me he encontrado con algunos problemas ...

1) cuando una orden alcanza SL o TP, los textos habituales [sl] o [tp] no se añaden al comentario de la orden si el EA añadió un comentario durante OrderSend().

¿Es este el comportamiento normal de MT5? Si es así, ¿hay alguna forma fiable de determinar si una orden realmente alcanzó SL/TP o se cerró manualmente?

(intentar decidirlo comprobando el precio de apertura / precio de cierre / SL / TP no es fiable debido al deslizamiento - especialmente si el SL se movió muy cerca del TP).

** Curiosamente, OrdersToString() muestra "[sl x.xxxxxx]" en los comentarios, pero la pestaña Historial de órdenes no muestra esa información (y no se incluye en OrderComment() en el probador de estrategias).


2) cuando se produce un cierre parcial, los comentarios de la orden de las partes abierta y cerrada no muestran "a #xxxxxxxxxxx" y "desde #xxxxxxxxx"

de nuevo, ¿hay alguna forma fiable (y espero que sencilla) de determinar qué ha pasado con una orden concreta?

3) el número de ticket de una operación abierta cambia cuando se cierra, por lo que no puedo utilizar OrderTicket() para seguir una orden, pero OrderTicketID() parece funcionar como lo hace OrderTicket() en MT4 y conserva el mismo ID para una operación cerrada.

¿Es ese valor constante, o podría cambiar entre reinicios de la plataforma?Si es constante, ¿cuál es la mejor manera de utilizar OrderTicketID() pero manteniendo la compatibilidad con MT4 (ya que OrderTicketID() no es una función de MT4)?

** OrderTicketID() parece ignorar la directiva MT4_TICKET_TYPE y siempre es "long".
Документация по MQL5: Константы, перечисления и структуры / Именованные константы / Предопределенные макроподстановки
Документация по MQL5: Константы, перечисления и структуры / Именованные константы / Предопределенные макроподстановки
  • www.mql5.com
//| Expert initialization function                                   | //| Expert deinitialization function                                 | //| Expert tick function                                             | //| test1                                                            |...
 
SysFX:

Tengo un EA MT4 que estoy tratando de portar a MT5 usando MT4Orders para que pueda mantener una sola fuente, pero me he encontrado con algunos problemas ...

1) cuando una orden alcanza SL o TP, los textos habituales [sl] o [tp] no se añaden al comentario de la orden si el EA añadió un comentario durante OrderSend().

¿Es este el comportamiento normal de MT5? Si es así, ¿hay alguna forma fiable de determinar si una orden realmente alcanzó SL/TP o se cerró manualmente?

(intentar decidirlo comprobando el precio de apertura / precio de cierre / SL / TP no es fiable debido al deslizamiento - especialmente si el SL se movió muy cerca del TP).

https://www.mql5.com/ru/forum/93352/page20#comment_7112531

https://www.mql5.com/ru/forum/93352/page18#comment_6246123

2) cuando se produce un cierre parcial, los comentarios sobre la orden de las partes abierta y cerrada no muestran "a #xxxxxxxxx" y "de #xxxxxxxxx"

de nuevo, ¿hay alguna forma fiable (y espero que sencilla) de determinar qué ha ocurrido con una orden concreta?

No entiendo a partir de esta descripción qué problema necesita resolver.

3) el número de ticket de una operación abierta cambia cuando se cierra, por lo que no puedo utilizar OrderTicket() para seguir una orden, pero OrderTicketID() parece funcionar como lo hace OrderTicket() en MT4 y conserva el mismo ID para una operación cerrada.

¿Es ese valor constante, o podría cambiar entre reinicios de la plataforma?Si es constante, ¿cuál es la mejor manera de utilizar OrderTicketID() pero manteniendo la compatibilidad con MT4 (ya que OrderTicketID() no es una función de MT4)?

** OrderTicketID() parece ignorar la directiva MT4_TICKET_TYPE y siempre es "long".

SELECT_BY_TICKET funciona correctamente con OrderTicket/OrderTicketID/OrderTicketOpen. Todas las funciones de MT4Orders no cambian sus valores después de recargar el Terminal.

El mismo OrderTicketID en MT5 puede tener varias posiciones cerradas (en caso de cierres parciales). Por la misma razón, una posición abierta y una posición cerrada pueden tener el mismo OrderTicketID. Debido a esta ambigüedad MT5 utiliza OrderTicket - un ticket único para cada posición cerrada/abierta.


Esta actualización de la librería se hizo para la compatibilidad entre plataformas (compatibilidad con MT4).


** OrderTicketID() parece ignorar la directiva MT4_TICKET_TYPE y siempre es "long".
Gracias, arreglado.
// Lista de cambios:
// 11.11.2020
// Corrección: OrderTicketID() y OrderTicketOpen() devuelven el tipo de valor especificado en TICKET_TYPE.