Pourquoi Metaquotes pousse-t-il MT5 au lieu de MT4 ? - page 3

 
Stanislav Korotky:

Et quelles fonctions MT4Orders sont utilisées - asynchrones (OrderSendAsync, OrderCloseAsync) ou non ? C'est probablement le problème.

Je ne l'ai pas examiné, je l'ai juste connecté, vérifié la vitesse, comparé au code original sur mql5, supprimé l'original et laissé seulement la bibliothèque avec le code mql4.

 
Vitaly Muzichenko:

Je n'ai pas compris, je l'ai juste branché, vérifié la vitesse, comparé au code original sur mql5, supprimé l'original et laissé seulement la bibliothèque avec le code mql4

Je ne demande pas les détails de la bibliothèque, mais comment elle a été utilisée, pour comprendre le problème. En général, je donnais un pourboire.

 
Stanislav Korotky:

Je ne posais pas de questions sur l'intérieur de la bibliothèque, mais sur la façon dont elle était utilisée, pour voir ce qui causait le problème. Bref, je t'ai donné un conseil.


Le problème n'est pas de savoir comment utiliser la bibliothèque.

Le problème est que nous n'avons pas de position complexe dans MT4, nous avons des ordres. Il faut donc fermer une douzaine de commandes pour obtenir l'effet que nous venons de montrer.

D'ailleurs, cet effet n'existe pas dans le testeur. Et nous ne l'avons pas sur la démo. Mais nous l'avons sur le compte réel.

Dans ce cas, la migration du code de mql4 à mql5 et retour "1 à 1" est impossible.

Le travail avec les commandes sur mql4 doit être organisé de manière adéquate aux possibilités de mql4.

Il n'y a aucun moyen de le savoir ici :

Vitaly Muzichenko:

Le seul gros inconvénient de MT4 ...

C'est juste que mql4 a certaines fonctionnalités et mql5 en a d'autres. Dans ce cas particulier, mql5 a l'avantage. Mais le problème peut être résolu normalement avec mql4.

 
Andrey F. Zelinsky:

Le problème n'est pas de savoir comment utiliser la bibliothèque.

Le problème est que dans MT4, il n'y a pas de position agrégée, il y a des ordres. Et la fermeture d'une douzaine de commandes a l'effet montré.

D'ailleurs, cet effet n'existe pas dans le testeur. Et nous ne l'avons pas sur la démo. Mais nous l'avons sur le compte réel.

Dans ce cas, la migration du code de mql4 à mql5 et retour "1 à 1" est impossible.

Le travail avec les commandes sur mql4 doit être organisé de manière adéquate aux possibilités de mql4.

Il n'y a aucun moyen de le savoir ici :

C'est juste que mql4 a certaines fonctionnalités et mql5 en a d'autres. Dans ce cas particulier, mql5 a l'avantage. Mais ce problème peut être résolu normalement sur mql4.

Qu'est-ce qui peut être accéléré dans MT4 ?

 if(OT==OP_BUY) {
   error=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),slippage,Blue);
   if(!error) Print("Error ",GetLastError());
 }
 if(OT==OP_SELL) {
   error=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),slippage,Red);
   if(!error) Print("Error ",GetLastError());
 }
 
Andrey F. Zelinsky:

Le problème n'est pas de savoir comment utiliser la bibliothèque.

Le problème est que dans MT4, il n'y a pas de position agrégée, il y a des ordres. Et la fermeture d'une douzaine de commandes a l'effet montré.

Il n'est que raisonnable de comparer MT4 avec un compte de couverture de MT5 (dans ce cas, il s'agit justement d'un tel système de trading). Et qu'est-ce que cela a à voir avec la position de l'agrégat ? Dans MT5, il y aura exactement la même pile de positions = équivalents des ordres quadruples. Bref, tu détournes encore la conversation du problème.

 
Vitaly Muzichenko:

Qu'est-ce qui peut être accéléré dans MT4 ?

J'ai suggéré ci-dessus de remplacer par des fonctions XXXAsync. Je ne sais pas si ça va aider, mais pourquoi ne pas essayer ?

 
Stanislav Korotky:

J'ai suggéré ci-dessus de remplacer par des fonctions XXXAsync. Je ne sais pas si ça va aider, mais pourquoi ne pas essayer ?

C'est probablement un peu loin. Je n'ai aucun problème dans MT5 avec ce code, et en utilisant <MT4Orders>, tout se ferme instantanément.

Il y a un problème dans MT4, mais là pour des raisons évidentes et n'ont pas besoin de <MT4Orders>, il y a le code quadruple le plus simple. J'en ai plus d'une centaine, j'ai des captures d'écran. Parfois, il glisse en ma faveur, et assez souvent, si une clôture a commencé et que le prix a évolué. Je ne sais pas à quoi cela est lié, mais c'est probablement dû à la séquence d'envoi des commandes.

 

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading

Pourquoi Metaquotes fait-il glisser MT5 au lieu de MT4 ?

Vitaly Muzichenko, 2017.09.23 20:50

Qu'est-ce qui peut être accéléré dans MT4 ?

 if(OT==OP_BUY) {
   error=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),slippage,Blue);
   if(!error) Print("Error ",GetLastError());
 }
 if(OT==OP_SELL) {
   error=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),slippage,Red);
   if(!error) Print("Error ",GetLastError());
 }

Au minimum :

  • La suppression des étiquettes accélérera le code.
  • La normalisation des prix n'est pas toujours nécessaire. Même si l'obtention du prix Ask ou Bid imprime plus de décimales, cela ne signifie pas que la normalisation donnera un résultat positif.

La normalisation de la valeur du prix n'est nécessaire qu'en cas d'opérations mathématiques avec ce prix. Lorsqu'une valeur est ajoutée ou soustraite au prix.

 
Vitaly Muzichenko:

C'est probablement un petit malentendu. Je n'ai aucun problème dans MT5 avec ce code, et en utilisant <MT4Orders>, tout se ferme instantanément.

Il y a un problème dans MT4, mais là pour des raisons évidentes et n'a pas besoin de <MT4Orders>, il y a le code quadruple le plus simple. J'en ai plus d'une centaine, j'ai des captures d'écran. Parfois, il glisse en ma faveur, et assez souvent, si une clôture a commencé et que le prix a évolué. Je ne sais pas à quoi c'est lié, mais c'est probablement la séquence d'envoi des ordres.

Oui, c'est ma faute - je suis stupide.

La variante de solution est la suivante : au lieu de fermer plusieurs ordres, je place un compteur de volume total, puis j'appelle OrderCloseBy plusieurs fois jusqu'à destruction mutuelle.

 
Stanislav Korotky:

La solution est la suivante : au lieu de fermer plusieurs ordres, mettez un compteur de volume total, puis appelez OrderCloseBy plusieurs fois jusqu'à destruction mutuelle.

Cette variante ne fonctionne, malheureusement, que pour un seul symbole.


Il est étrange que personne n'ait ajouté de fonctions d'ordre asynchrones à la base de connaissances MT4 au fil des ans.