La gran y terrible MT4 para siempre (o cómo hacer una estrategia de transición) - página 12

 
Andrey Khatimlianskii:

Sería estupendo poder sortear este punto a nivel de MT4Orders.

Las copias de seguridad de los pedidos están ocurriendo ahora, desafortunadamente. Lo más probable es que sea por esto.

https://www.mql5.com/ru/forum/93352/page40#comment_13943845

 
traveller00:

https://www.mql5.com/ru/forum/93352/page40#comment_13943845

Desgraciadamente, el retroceso también se produce con esta muleta.

Ya no sé qué camino tomar para depurar.

 
Andrey Khatimlianskii:

Desgraciadamente, con esta muleta también se retrocede.

Ya no sé qué camino tomar para depurar.

Esta es la razón (no es que no haya otras).

        // Открытие руками единственной позиции.

        1
        PositionsTotal() = 0 OrdersTotal() = 1 HistoryDealsTotal() = 57 HistoryOrdersTotal() = 57 
        #2249767032 2021.05.04 02:10:01.089 buy 0.01 USDCAD 1.22776 0.00000 0.00000 1.22776 0.00 0.00 0.00 0
        ----------------
        2
        PositionsTotal() = 0 OrdersTotal() = 1 HistoryDealsTotal() = 57 HistoryOrdersTotal() = 57 
        #2249767032 2021.05.04 02:10:01.089 buy 0.01 USDCAD 1.22776 0.00000 0.00000 1.22776 0.00 0.00 0.00 0
        ----------------
        3
        PositionsTotal() = 0 OrdersTotal() = 1 HistoryDealsTotal() = 57 HistoryOrdersTotal() = 57 
        #2249767032 2021.05.04 02:10:01.089 buy 0.01 USDCAD 1.22776 0.00000 0.00000 1.22776 0.00 0.00 0.00 0
        ----------------
        4
        PositionsTotal() = 0 OrdersTotal() = 1 HistoryDealsTotal() = 57 HistoryOrdersTotal() = 57 
        #2249767032 2021.05.04 02:10:01.089 buy 0.01 USDCAD 1.22776 0.00000 0.00000 1.22776 0.00 0.00 0.00 0
        ----------------
        5
        PositionsTotal() = 0 OrdersTotal() = 1 HistoryDealsTotal() = 57 HistoryOrdersTotal() = 57 
        #2249767032 2021.05.04 02:10:01.089 buy 0.01 USDCAD 1.22776 0.00000 0.00000 1.22776 0.00 0.00 0.00 0
        ----------------
        6 // Полностью исчез открывающий позицию ордер - его нет ни в одной таблице. Позиции так и нет.
        PositionsTotal() = 0 OrdersTotal() = 0 HistoryDealsTotal() = 57 HistoryOrdersTotal() = 57 
        ----------------
        7 // Ордер появился в исторической таблице. Позиции так и нет.
        PositionsTotal() = 0 OrdersTotal() = 0 HistoryDealsTotal() = 57 HistoryOrdersTotal() = 58 
        ----------------
        8 // Появилась позиция и сделка.
        PositionsTotal() = 1 OrdersTotal() = 0 HistoryDealsTotal() = 58 HistoryOrdersTotal() = 58 
        #2249767032 2021.05.04 02:10:01.124 buy 0.01 USDCAD 1.22776 0.00000 0.00000 1.22769 -0.02 0.00 -0.05 0
        ----------------

P.6 es el más desagradable. Cómo evitar este error de MT5 - no lo he descubierto.

 
fxsaber:

Esta es la razón (no es que no haya otras).

P.6. es el más desagradable. Cómo evitar este error de MT5 - no lo he descubierto.

La comprobación de las órdenes "perdidas" funcionaría aquí. Pero no funcionaría.

Debo haber metido la pata en algo.

 
Andrey Khatimlianskii:

Una comprobación de la falta de orden funcionaría aquí. No funciona.

Debo haber hecho algo mal.

En el punto 7. "La orden que falta aparece, pero todavía no hay posición.

 
fxsaber:

En el punto 7. se encuentra la "falta", pero la posición sigue sin aparecer.

¿Significa que el bucle de MT4Orders::OrdersTotal() no verá ni la orden ni la posición?

Pensaba que este punto estaba resuelto: o bien el orden/posición está en la lista, o bien el orden está "perdido". ¿Cómo puede ocurrir una tercera cosa?

 
Andrey Khatimlianskii:

¿Significa esto que el bucle MT4Orders::OrdersTotal() no verá ni la orden ni la posición?

En todos los puntos, excepto en el punto 6 y el punto 7, muestra que una posición es visible.

Pensaba que este punto se acababa de resolver: o bien el orden/posición está en la lista, o bien el orden está "perdido". ¿Cómo puede haber un tercero?

Imagina que tu EA llega a la posición 6 sin saber nada del hecho de que hubo una orden. En ese caso, no hay forma de que sepa que la situación corresponde a la orden que falta.

Великий и ужасный МТ4 навсегда (или как грамотно выработать стратегию перехода)
Великий и ужасный МТ4 навсегда (или как грамотно выработать стратегию перехода)
  • 2021.05.03
  • www.mql5.com
Хочу затронуть самую что ни на есть щекотливую тему терминалов МТ4 и МТ5. Их влияние и популярность среди пользователей и брокеров / ДЦ...
 
fxsaber:

Imagina que tu EA llega al punto 6 sin saber nada de que hay una orden. En ese caso, no hay forma de que sepa que la situación corresponde a la orden que falta.

No puedo imaginar tal situación si los límites se utilizan a cierta distancia del precio (no en el spread).

Siempre tendrá tiempo para ver el orden de los conjuntos en la lista. Y posteriormente la orden se convertirá en "desaparecida", o se convertirá en una posición.


Admito que tal situación es posible si otro EA ha lanzado una orden al precio actual y se ha empezado a llenar inmediatamente (punto 6).

Pero eso sigue sin explicar por qué el primer EA deja de ver su orden (con su mago) en la lista de MT4Orders::OrdersTotal().

 

Fue sorprendentemente fácil reproducir la situación en un EA en vivo: en el momento en que se ejecutó una de las órdenes, el EA perdió de vista la otra también.

Pero al intentar construir un ejemplo sencillo para su reproducción, todo funciona bien. Parece que realmente he hecho un error en algún lugar de mi código.

 

Esto es de la documentación:

"El orden de llegada de estas transacciones al terminal no está garantizado, por lo que no se puede basar el algoritmo de negociación en la espera de que lleguen unas transacciones comerciales después de que hayan llegado otras. " https://www.mql5.com/ru/docs/event_handlers/ontradetransaction

Y por experiencia, las transacciones TRADE_TRANSACTION_ORDER_DELETE, TRADE_TRANSACTION_DEAL_ADD, TRADE_TRANSACTION_HISTORY_ADD pueden llegar en cualquier orden.

De ahí que tengamos situaciones en las que todavía no hay acuerdo ni orden en la historia, pero el orden ya existe. O viceversa, la orden sigue ahí, pero la operación ya se ha ejecutado. Pero la situación en la que el orden está simultáneamente en el activo y en la historia es difícilmente posible.

En realidad, esta es la razón por la que nos negamos a utilizar la clase CTrade: tiene todos estos escollos.

La forma de combatir este problema es que cada EA mantenga una lista de sus órdenes y controle su estado. Incluyendo estados "no estándar" - "orden enviada pero aún no en funcionamiento" (aquí pueden duplicarse) o "orden eliminada pero aún no en el historial". También ayuda trabajar en el mismo símbolo al mismo tiempo cuando se hace la red.

Документация по MQL5: Обработка событий / OnTradeTransaction
Документация по MQL5: Обработка событий / OnTradeTransaction
  • www.mql5.com
OnTradeTransaction - Обработка событий - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Razón de la queja: