Questions des débutants MQL5 MT5 MetaTrader 5 - page 320

 

Chers programmeurs, s'il vous plaît, conseillez qui sait !

J'ai un conseiller expert pour MT4 qui ferme un groupe d'ordres (500-2500) lorsqu'il atteint un profit total. Comme je l'ai remarqué, il ferme les commandes une par une en les triant selon la magie - de la plus petite à la plus grande.

Donc, voici la question : est-il possible d'ajouter à votre Expert Advisor la fonction de lancer un script à la fermeture des ordres qui fermerait les ordres mais en les triant par magicien depuis la fin - du plus grand au plus petit ?

Cette idée permettra-t-elle d'accélérer la vitesse de clôture des commandes ?

On m'a dit quelque part que jusqu'à 4 demandes peuvent être envoyées au serveur simultanément.
 
Tapochun:
Alors vous devez regarder le code... peut-être que c'est le code... Y a-t-il une ligne comme ça dans les empreintes ?
Non. Tout a été testé auparavant, sans aucune question... Qu'est-ce que ça pourrait être d'autre ?


 
Novikov:

Chers programmeurs, s'il vous plaît, conseillez qui sait !

J'ai un conseiller expert pour MT4 qui ferme un groupe d'ordres (500-2500) lorsqu'il atteint un profit total. Comme je l'ai remarqué, il ferme les commandes une par une en les triant selon la magie - de la plus petite à la plus grande.

Donc, la question est de savoir s'il est possible d'ajouter à Expert Advisor une fonction pour lancer un script à la fermeture des ordres qui ferme les ordres mais les trie par magicien depuis la fin - du plus grand au plus petit ?

Et cette idée va-t-elle accélérer la vitesse de clôture des commandes ?

On m'a dit quelque part que jusqu'à 4 demandes peuvent être envoyées au serveur simultanément.

Vous ne pouvez pas exécuter le script à partir du conseiller expert. Vous pouvez réellement envoyer au serveur plusieurs requêtes provenant de différents EA en même temps. Si vous synchronisez plusieurs EA, il est vraiment possible d'obtenir un certain gain de performance.

Mais si j'étais vous, je ne me frapperais pas la tête contre la porte ouverte. Je préfère passer à MetaTrader5. La fonction OrderSendAsync vous permet de clôturer des positions par lots à la vitesse incroyable de 100 à 200 ordres en quelques secondes :

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

Développeurs ! Erreur 10024 (Trop de demandes)

C-4, 2014.11.07 15:55

Bref, je résume ma petite recherche.

J'ai réussi à pousser 50 demandes en 50 millisecondes ; 100 demandes en 180msec ; 200 en 2100msec ; 500 demandes en 9000msec ; 1000 demandes en 23000msec. (le temps est une moyenne). C'est-à-dire que plus on a besoin de pousser, plus cela prend du temps. Il s'agit peut-être d'une question d'analphabétisme dans le codage.

Le temps d'exécution réel d'un ensemble de demandes est bien sûr plus long. Ce temps semble être égal au pire des scénarios - temps d'envoi de la demande + temps d'exécution de la demande. Dans tous les cas, à la limite, il tend vers le temps moyen d'exécution des ordres par la bourse + le temps passé à communiquer avec le serveur de négociation. Si le nombre de demandes est inférieur à 60, il n'est pas nécessaire de communiquer avec le serveur de négociation, d'envoyer toutes les demandes et d'attendre qu'elles soient satisfaites. L'envoi lui-même prend 40 à 60 millisecondes. S'il y a plus de demandes, c'est plus difficile. Vous devez attendre la réponse du serveur, recommencer à envoyer des ordres, attendre le rejet, etc. Il y a donc cet échange de messages sur le réseau. Lorsqu'il y a beaucoup de demandes, la réserve est libérée progressivement au fur et à mesure que les demandes sont satisfaites. Les envois ultérieurs se font par petites portions, une ou deux demandes à la fois, et c'est le réseau. Par conséquent, le temps s'allonge. Quoi qu'il en soit, le code semble fonctionner correctement, il faut juste comprendre le mécanisme d'envoi/réception des requêtes.

J'ai joint le code qui teste cet envoi.

p.s. Pour résumer, 60 demandes sont plus que suffisantes, même pour le trading HFT. Il faut en fait une analyse consciente des actions commerciales - vous envoyez un ordre, obtenez le résultat, analysez l'environnement commercial, envoyez un nouvel ordre si nécessaire. L'ensemble du cycle dépassera nettement l'échelle de 40-60 millisecondes + le temps d'exécution moyen d'un ordre.


 
R0MAN:
Non. Tout a été testé sans aucune question... Des conseils sur ce que ça pourrait être d'autre ?


Essayez de tester avec des données fraîches. Avez-vous essayé de l'exécuter dans un autre terminal ?
 
Tapochun:
Essayez de tester avec des données fraîches. Avez-vous essayé de l'exécuter dans un autre terminal ?
Non. J'en ai installé un nouveau aujourd'hui de chez Bx. J'ai essayé de le tester. Je vais en essayer un autre... Je vais poster les résultats ici.
 
C-4:

Il n'est pas possible d'exécuter un script à partir d'un EA. Il est en effet possible d'envoyer plusieurs requêtes de différents EAs au serveur en même temps. Si vous synchronisez plusieurs EA, il est en effet possible d'obtenir un certain gain de performance.

Mais si j'étais vous, je ne me cognerais pas la tête contre la porte ouverte. Je préfère passer à MetaTrader5. La fonction OrderSendAsync vous permet de clôturer des positions par lots à la vitesse incroyable de 100 à 200 ordres en quelques secondes :



Qu'est-ce que MT5 et de plus 100-200 ordres ont à voir avec cela ? Et que dire de 100-200 ordres dans MT5 ? Ce sont 100-200 instruments de trading dans MT5 ! Après tout, on ne peut ouvrir qu'un seul ordre sur un symbole - si je ne me trompe pas !

Et j'ai une accumulation d'un grand nombre d'ordres sur 28 instruments et en même temps partiellement avec des lots !

Si vous avez quelque chose à suggérer à ce sujet, je vous en serais reconnaissant. Donner des conseils qui ne sont pas liés à la question est inutile et peu constructif !

 
C-4:

Il n'est pas possible d'exécuter un script à partir d'un EA. Il est en effet possible d'envoyer plusieurs requêtes de différents EAs au serveur en même temps. Si vous synchronisez plusieurs EA, il est en effet possible d'obtenir un certain gain de performance.

Mais si j'étais vous, je ne me cognerais pas la tête contre la porte ouverte. Je préfère passer à MetaTrader5. La fonction OrderSendAsync vous permet de fermer des positions par lots à la vitesse incroyable de 100 à 200 ordres en quelques secondes :


О ! Vasiliy, si tu es là, regarde ma question, merci.

 
R0MAN:
Oh ! Vasily, si tu es là, regarde ma question, merci.

Salut ! J'ai vérifié. Malheureusement, je n'ai jamais rencontré une telle erreur auparavant. La seule chose qui me vient à l'esprit est de vérifier le dossier historique dans le testeur, par exemple ici : \MetaTrader 5\tester\bases\AdmiralMarkets-MT5\history\. S'il n'y a pas de fichiers pour le symbole requis, essayez de copier les données manuellement depuis le dossier principal y:\MetaTrader 5\bases\AdmiralMarkets-MT5\ et redémarrez le testeur. Aucune autre idée jusqu'à présent.

s.e. Bien que ce soit étrange. Le testeur doit automatiquement copier l'historique. Mais on ne peut pas dire quoi.

 
C-4:
Salut ! J'ai vérifié. Malheureusement, je n'ai jamais rencontré une telle erreur auparavant. La seule chose qui me vient à l'esprit est de vérifier le dossier historique dans le testeur, par exemple ici : \MetaTrader 5\tester\bases\AdmiralMarkets-MT5\history\. S'il n'y a pas de fichiers pour le symbole requis, essayez de copier les données manuellement depuis le dossier principal y:\MetaTrader 5\bases\AdmiralMarkets-MT5\ et redémarrez le testeur. Je n'ai pas d'autres idées pour l'instant.
Merci. Je vais retourner sur le campus... Je suis sur mon téléphone portable en ce moment.
 
Novikov:

Quel est le rapport avec MT5, et surtout avec 100-200 ordres ? Et que sont ces 100-200 ordres dans MT5 ? Ce sont 100-200 instruments de trading dans MT5 ! Après tout, on ne peut ouvrir qu'un seul ordre pour un symbole - si je ne me trompe pas !

Et j'ai une accumulation d'un grand nombre d'ordres sur 28 instruments et en même temps partiellement avec des lots !

Si vous avez quelque chose à suggérer à ce sujet, je vous en serais reconnaissant. Donner des conseils qui ne sont pas liés à la question est inutile et peu constructif !

Encore une fois (lisez attentivement) :

Dans MetaTrader4, vous ne pouvez clôturer les ordres que de manière séquentielle : envoyez un ordre pour clôturer un ordre, attendez son exécution, passez à l'ordre suivant, etc. Pour cette raison, le temps de clôture d'un lot d'ordres dans MetaTrader4 est important et ne peut être réduit par des moyens triviaux. Cependant, vous pouvez télécharger plusieurs Expert Advisors sur vos propres graphiques et leur faire échanger des informations entre eux et fermer des ordres par une commande commune. Chaque expert ne clôture les ordres que sur son symbole. Comme il existe plusieurs fils de transaction dans MetaTrader4, ils ne se bloquent pas mutuellement et ne s'envoient pas d'ordres. Cependant, l'organisation d'un tel groupe d'experts est compliquée, et à en juger par votre niveau de connaissances, je ne vous conseillerais pas une telle chose.

Si vous pensez encore que j'ai écrit trop de mots, voici un bref résumé :

1) La réponse à votre question est non, vous ne pouvez pas exécuter un script depuis un Expert Advisor.

2. Vous ne pouvez pas augmenter la vitesse d'exécution des ordres de transaction dans MetaTrader4 sans utiliser des méthodes complexes.

La seule façon de résoudre votre question normalement est d'utiliser la fonction OrderSendAsync, qui n'existe pas dans MetaTrader4.

Raison: