De la théorie à la pratique - page 227

 
Maxim Dmitrievsky:

parce que vous devez d'abord vérifier le résultat de l'exécution de la transaction, puis le total de l'ordre.

L'auteur a plusieurs EA identiques qui fonctionnent de manière asynchrone, chacun sur le graphique de sa propre paire et, apparemment, sans communiquer entre eux. Par conséquent, il peut arriver qu'un EA ait envoyé un ordre pour ouvrir une position et que la réponse ne soit pas encore arrivée, c'est-à-dire que la position n'a pas encore été ouverte (OrdersTotal()==0). Ensuite, un autre EA (peut-être plus d'un) envoie également une demande de transaction, et en conséquence, 2 ou plusieurs positions s'ouvrent en même temps. L'idée est qu'afin d'éviter de tels chevauchements, nous devrions définir un drapeau (une variable globale du terminal) et le lire lors de l'envoi du premier ordre de transaction par d'autres Expert Advisors.

Mais de telles situations peuvent se produire assez fréquemment, notamment lors de l'actualité, lorsque de nombreuses paires font de brusques bonds presque synchronisés.

 
Alexander Sevastyanov:

L'auteur a plusieurs EAs du même type, chacun est sur le graphique de sa propre paire, et apparemment, ils ne communiquent pas entre eux. Par conséquent, il peut arriver qu'un EA ait envoyé un ordre de transaction pour ouvrir une position et que l'ordre soit en cours de traitement ou que la réponse ne soit pas encore arrivée, c'est-à-dire que la position n'a pas encore été ouverte (OrdersTotal()==0). Ensuite, un autre EA (et peut-être plus d'un) envoie également une demande de transaction, et en conséquence, 2 ou plusieurs positions s'ouvrent en même temps. L'idée est qu'afin d'éviter de tels chevauchements, nous devrions définir un drapeau (une variable globale du terminal) et le lire lors de l'envoi du premier ordre de transaction par d'autres Expert Advisors.

Ces situations peuvent se reproduire, notamment lors de l'actualité, lorsque de nombreuses paires font de fortes hausses.

Je n'ai pas vu qu'il était spécifié qu'il ne devait y avoir qu'une seule transaction à la fois, je pensais qu'il devait y avoir plusieurs ouvertures pour un seul symbole.

 
Alexander Sevastyanov:

L'auteur a plusieurs EAs du même type, chacun est sur le graphique de sa propre paire, et apparemment, ils ne communiquent pas entre eux. Par conséquent, il peut arriver qu'un EA ait envoyé un ordre de transaction pour ouvrir une position et que l'ordre soit en cours de traitement ou que la réponse ne soit pas encore arrivée, c'est-à-dire que la position n'a pas encore été ouverte (OrdersTotal()==0). Ensuite, un autre EA (et peut-être plus d'un) envoie également une demande de transaction, et en conséquence, 2 ou plusieurs positions s'ouvrent en même temps. L'idée est qu'afin d'éviter de tels problèmes, nous devrions définir un drapeau (une variable globale du terminal) et le lire lors de l'envoi du premier ordre de transaction par d'autres Expert Advisors.

C'est exactement ce que c'est, Alexander.

Je suis en train de lire attentivement la branche et toutes les recommandations pour résoudre ce problème. Parce que je suis terrifié par ce qui se passera si les transactions s'ouvrent en même temps sur les 32 paires... Bien sûr, ça ne devrait pas être comme ça.

 
Alexander_K2:

...je lis maintenant le fil de discussion et toutes les recommandations pour résoudre ce problème. Car j'ose à peine imaginer ce qui se passera si les transactions s'ouvrent sur les 32 paires en même temps... Bien sûr, ça ne devrait pas être comme ça.

Si vous avez besoin d'aide, n'hésitez pas à me contacter.

À propos, le délai d'ouverture d'une position est principalement constitué du double ping (aller-retour) et du temps de traitement d'un ordre de transaction par le serveur. Les bons courtiers qui ne surchargent pas les serveurs réels et disposent d'un bon canal de communication avec les fournisseurs de liquidités ont un temps de traitement des ordres de transaction de l'ordre de quelques millisecondes. Le ping peut être considérablement réduit, passant de centaines de millisecondes à des unités, en hébergeant le conseiller expert sur un serveur VPS. Vous pouvez voir le temps total nécessaire pour envoyer un ordre de transaction, le traiter et obtenir une réponse du serveur dans le journal MT4.

 
Alexander Sevastyanov:

Si vous avez besoin d'aide, n'hésitez pas à nous contacter.

Oh, au fait, le délai d'ouverture d'une position est principalement constitué du double ping (aller-retour) et du temps de traitement de l'ordre de transaction par le serveur. Les bons courtiers qui ne surchargent pas les serveurs réels et disposent d'un bon canal de connexion avec les fournisseurs de liquidités ont un temps de traitement des ordres de transaction de l'ordre de quelques millisecondes. Le ping peut être considérablement réduit, passant de centaines de millisecondes à des unités, en hébergeant le conseiller expert sur un serveur VPS. Vous pouvez voir le temps total nécessaire pour envoyer un ordre de transaction, le traiter et obtenir une réponse du serveur dans le journal MT4.

il n'y a pas de courtiers comme celui-ci dans le domaine du forex, quelques dizaines de millisecondes au minimum, 200 en moyenne, avec zéro pings.

 
Maxim Dmitrievsky:

Je n'ai pas vu qu'il était spécifié qu'il ne devait y avoir qu'une seule transaction à la fois, j'ai pensé qu'il devait y avoir plusieurs ouvertures pour un seul instrument.

Ce bug peut se produire même dans un symbole si le thread précédent n'a pas terminé son exécution et qu'un nouveau tick est arrivé - il y a alors une situation non définie de lecture et d'écriture de données réelles...
 
Andrei:
Ce bug peut très bien se produire même pour un seul outil si le thread précédent n'a pas terminé son exécution et qu'un nouveau tick arrive - il y a alors une situation indéfinie d'écriture et de lecture de données réelles....

Non, il n'y a pas une telle situation, il saute des ticks jusqu'à ce que toute la logique soit traitée.

 
Maxim Dmitrievsky:

Non, il n'y a pas de telles situations, l'ontic saute des ticks jusqu'à ce que toute la logique soit traitée.

C'est ce que je pensais aussi...

 
Andrei:

Je pensais la même chose...

Je ne sais pas, ce n'est jamais arrivé, j'ai négocié avec un tas de courtiers scalpeurs sur mt4 et mt5.

 
Maxim Dmitrievsky:

Je ne sais pas, je ne l'ai jamais fait, j'ai négocié avec un tas de courtiers scalpeurs sur mt4 et mt5.

Comment avez-vous vérifié ? Je n'ai vérifié que sur mt4...
Raison: