La grande et terrible MT4 pour toujours (ou comment organiser une transition) - page 12

 
Andrey Khatimlianskii:

Il serait formidable de contourner ce point au niveau de MT4Orders.

Les sauvegardes des commandes ont lieu maintenant, malheureusement. Très probablement à cause de ça.

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

 
traveller00:

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

Malheureusement, le retour en arrière est également possible avec cette béquille.

Je ne sais plus comment déboguer.

 
Andrey Khatimlianskii:

Malheureusement, le retour en arrière est également possible avec cette béquille.

Je ne sais plus comment déboguer.

Voici la raison (non pas qu'il n'y en ait pas d'autres).

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

        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 est le plus désagréable. Comment contourner ce bug MT5 - je ne l'ai pas encore trouvé.

 
fxsaber:

Voici la raison (non pas qu'il n'y en ait pas d'autres).

P.6. est le plus désagréable. Comment contourner ce bogue MT5 - je ne l'ai pas encore trouvé.

La vérification des commandes "manquantes" fonctionnerait ici. Mais ça n'a pas marché.

J'ai dû me tromper sur quelque chose.

 
Andrey Khatimlianskii:

Une vérification de l'ordre manquant fonctionnerait ici. Ça ne marche pas.

Je dois avoir fait quelque chose de mal moi-même.

Au point 7. "L'ordre manquant apparaît, mais il n'y a toujours pas de position.

 
fxsaber:

Au point 7. Le "manquant" est trouvé, mais la position est toujours manquante.

Cela signifie-t-il que la boucle sur MT4Orders::OrdersTotal() ne verra ni l'ordre ni la position ?

Je pensais que ce point était résolu : soit l'ordre/la position est dans la liste, soit l'ordre est "manquant". Comment une troisième chose peut-elle arriver ?

 
Andrey Khatimlianskii:

Cela signifie-t-il que la boucle MT4Orders::OrdersTotal() ne verra ni l'ordre ni la position ?

Dans tous les points, sauf le point 6 et le point 7, il montre qu'une position est visible.

Je pensais que ce point venait d'être résolu : soit l'ordre/la position est dans la liste, soit l'ordre est "manquant". Comment peut-il y en avoir un troisième ?

Imaginez que votre EA atteigne la position 6 sans rien savoir du fait qu'il y a eu un ordre. Dans ce cas, il n'a aucun moyen de savoir que la situation correspond à l'ordre manquant.

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

Imaginez que votre EA arrive au point 6 sans rien savoir de l'existence d'un ordre. Dans ce cas, il n'a aucun moyen de savoir que la situation correspond à l'ordre manquant.

Je ne peux pas imaginer une telle situation si les limites sont utilisées à une certaine distance du prix (pas dans le spread).

Il aura toujours le temps de voir l'ordre de passage dans la liste. Et par la suite, l'ordre sera soit "manquant", soit transformé en position.


J'admets qu'une telle situation est possible si un autre EA a lancé un ordre au prix actuel et qu'il a immédiatement commencé à l'exécuter (point 6).

Mais cela n'explique toujours pas pourquoi le premier EA ne voit plus son ordre (avec son magicien) dans la liste de MT4Orders::OrdersTotal().

 

Il a été étonnamment facile de reproduire la situation sur l'EA en direct - au moment où l'un des ordres a été exécuté, l'EA a également perdu de vue l'autre.

Mais lorsqu'on essaie de construire un exemple simple pour la reproduction, tout fonctionne bien. Il semble que j'ai vraiment fait un bug quelque part dans les profondeurs de mon code.

 

Voici un extrait de la documentation :

"L'ordre dans lequel ces transactions arrivent dans le terminal n'est pas garanti. Vous ne pouvez donc pas baser votre algorithme de négociation sur l'attente de l'arrivée de certaines transactions après l'arrivée d'autres. " https://www.mql5.com/ru/docs/event_handlers/ontradetransaction

Et par expérience, les transactions TRADE_TRANSACTION_ORDER_DELETE, TRADE_TRANSACTION_DEAL_ADD, TRADE_TRANSACTION_HISTORY_ADD peuvent arriver dans n'importe quel ordre.

Nous avons donc des situations où il n'y a pas encore d'accord ou d'ordre dans l'histoire, mais où l'ordre existe déjà. Ou vice versa, l'ordre est toujours là, mais la transaction a déjà été exécutée. Mais la situation où l'ordre est simultanément dans l'actif et dans l'histoire n'est guère possible.

En fait, c'est la raison pour laquelle nous avons refusé d'utiliser la classe CTrade- elle comporte tous ces pièges.

La façon de combattre ce problème est que chaque EA conserve une liste de ses ordres et surveille leur état. Y compris les états "non standard" - "commande envoyée mais pas encore en état de marche" (ici, ils peuvent doubler) ou "commande supprimée mais pas encore dans l'historique". Il est également utile de travailler sur le même symbole en même temps lors de la pose du filet.

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