Mon EA fait une double entrée - page 8

 
angevoyageur:

1) Je ne pense pas que cela soit lié au problème de ce sujet. Le problème que nous rencontrons est dans le cas où une requête a été remplie avec succès et qu'une position est ouverte. Mais cette position est ouverte sur le serveur de commerce, le problème que nous avons rencontré est lorsqu'il y a un délai plus important que d'habitude et que le terminal MT5 est notifié de cette nouvelle position APRÈS qu'un nouveau tick soit déjà traité.

2) ... à mon avis c'est une mauvaise conception pour une plateforme qui permet explicitement des demandes de trading synchrones et asynchrones ...

3) ... le ResultRetCode est synchrone, c'est la mise à jour de la base de données MT5 sur la position (deal et ordre) qui est asynchrone ...

1) Je ne suis pas d'accord, et désolé pour l'ignorance, mais comment êtes-vous si sûr que la position est ouverte après PositionOpen() dans le serveur de commerce sans double vérification du ResultRetcode() ?

2) 100% d'accord.

3) Il est certain que ResultRetCode() est synchrone, je veux dire que pour vérifier le code de résultat vous (maître) devez interroger le serveur (esclave) avec plusieurs messages "asynchrones".

 
figurelli:

1) Pas d'accord, et désolé pour l'ignorance, mais comment êtes-vous si sûr que la position est ouverte après PositionOpen() dans le serveur de commerce sans vérifier deux fois le ResultRetcode() ?

2) 100% d'accord.

3) Il est certain que ResultRetCode() est synchrone, je veux dire que pour vérifier le code de résultat vous (maître) devez interroger le serveur (esclave) avec plusieurs messages "asynchrones".

1) Ce sujet concerne une double entrée, donc nous parlons d'une demande de commande qui a réussi. Je n'ai jamais écrit qu'il n'est pas nécessaire de vérifier le ResultRetCode(), j'ai écrit exactement le contraire. Mais ceci n'est PAS lié à la double entrée, par définition. N'est-ce pas évident ?

3) C'est probablement un détail(incompréhension ?) mais ce que vous avez écrit n'a pas de sens. Dans la première partie de votre phrase vous dites que ResultRetCode() est synchrone, dans la seconde vous dites que le "code résultat" qui est le même que ResultRetCode() est obtenu de manière asynchrone. Il n'y a AUCUNE communication entre le serveur et le terminal pour obtenir cette valeur (Retcode).

CTrade.PositionOpen() par défaut est synchrone, ce qui signifie que la classe sous-jacente utilise OrderSend(). Elle envoie la demande d'ordre et attend la réponse du serveur. Le serveur retourne le résultat au terminal, et le code EA continue (avec la valeur retournée true ou false). La communication maître/esclave est terminée. Après cela, vous pouvez vérifier le ResultRetcode, qui est déjà disponible localement.

Documentation on MQL5: Trade Functions / OrderSend
Documentation on MQL5: Trade Functions / OrderSend
  • www.mql5.com
Trade Functions / OrderSend - Documentation on MQL5
 
@figurelli : Félicitations pour être devenu Modérateur ... .
 
Y a-t-il un délai d'attente pour la position ouverte ?
 
doshur:
Existe-t-il un délai d'attente pour les positions ouvertes ?
Bonjour doshur, que voulez-vous dire exactement par timeout ?
 
Malacarne:
Bonjour doshur, que voulez-vous dire exactement par "timeout" ?
Comme aucune réponse du serveur
 
angevoyageur:

1) Ce sujet concerne une double entrée, donc nous parlons d'une demande de commande qui a réussi. Je n'ai jamais écrit qu'il n'était pas nécessaire de vérifier le ResultRetCode(), j'ai écrit exactement le contraire. Mais ceci n'est PAS lié à la double entrée, par définition. N'est-ce pas évident ?

3) C'est probablement un détail(incompréhension ?) mais ce que vous avez écrit n'a pas de sens. Dans la première partie de votre phrase vous dites que ResultRetCode() est synchrone, dans la seconde vous dites que le "code résultat" qui est le même que ResultRetCode() est obtenu de manière asynchrone. Il n'y a AUCUNE communication entre le serveur et le terminal pour obtenir cette valeur (Retcode).

CTrade.PositionOpen() par défaut est synchrone, ce qui signifie que la classe sous-jacente utilise OrderSend(). Elle envoie la demande d'ordre et attend la réponse du serveur. Le serveur retourne le résultat au terminal, et le code EA continue (avec la valeur retournée true ou false). La communication maître/esclave est terminée. Après cela, vous pouvez vérifier le ResultRetcode, qui est déjà disponible localement.

Alain,

A propos de 1) je ne suis toujours pas d'accord, car pour moi le code original de
doshur ne vérifie pas ResultRetCode() et il cherche une solution à la "double entrée", et pour moi nous devons aborder cela dans son code (comme Malacarne l'a proposé). Donc pour moi, ce n'est pas si évident.

A propos de 3) Vous avez écrit "Cependant, le ResultRetCode est synchrone, c'est la mise à jour de la base de données MT5 sur la position (deal et ordre) qui est asynchrone", ma réponse portait donc sur cette phrase.

Quoi qu'il en soit,notre débat ressemble à l'histoire de la demi-tasse d'eau : certains la verront à moitié pleine et d'autres à moitié vide, mais il s'agit de savoir si l'on considère le verre comme étant à moitié plein ou à moitié vide ;-))))

Donc, pour être honnête, je ne crois pas que ce débat soit productif et/ou doive continuer (au moins ici dans ce sujet), puisque nous pouvons revenir à des solutions de contournement, donc s'il vous plaît désolé d'avoir créé une telle controverse et s'il vous plaît continuez avec votre ligne de pensée, qui je pense sera plus adapté pour aiderdoshur et d'autres gars avec le même problème.

 
Ubzen:
@figurelli : Félicitations pour être devenu Modérateur ... .
Ubzen, merci beaucoup, mais je crois toujours qu'il s'agit d'un bug sérieux de mql5.com ;-))
 

Eh bien, toutes les solutions de contournement postées sont très bonnes. Je les apprécie et j'ai appris quelques idées en cours de route.

Vous êtes utiles.

Mon EA semble être plus résilient maintenant.

 
figurelli:
...

Donc, pour être honnête, je ne pense pas que ce débat soit productif et/ou doive continuer (au moins ici dans ce sujet), puisque nous pouvons revenir à des solutions de contournement, donc s'il vous plaît désolé d'avoir créé une telle controverse et s'il vous plaît allez de l'avant avec votre ligne de pensée, qui je pense sera plus adapté pour aiderdoshur et d'autres gars avec le même problème.

Je suis tout à fait d'accord avec cela. Ne vous inquiétez pas et allez de l'avant.