Question sur la fonction OnTradeTransaction - page 6

 
Mikalas:

Non, les transactions ne sont pas perdues, elles peuvent simplement ne pas arriver dans un certain ordre.

Seul TRADE_TRANSACTION_REQUEST vient toujours en premier, sinon vous n'obtiendrez pas le ticket de commande.

Lisez attentivement la documentation.

Michael, désolé, mais il m'a semblé que vous n'avez répondu qu'au dernier message, et c'est la conséquence de tout ce qui a été décrit dans le premier message de cette page.

Et c'est étrange d'entendre que vous recommandez de lire la documentation. Je l'ai lu, relu et relu encore.

Que voulez-vous dire par "ticket de mandat" ? Je ne le vois pas dans la documentation.

 
AlexeyVik:

Michael, je suis désolé, mais il m'a semblé que vous n'avez répondu qu'au dernier message, et c'était en conséquence de tout ce qui est décrit dans le premier message de cette page.

Et il semble étrange d'entendre votre recommandation de lire la documentation. Je l'ai lu, relu et relu encore.

Qu'entendez-vous par "ticket de commande" ? Je ne l'ai pas vu dans la documentation.

Un ticket ulong est un numéro unique qui est attribué à une commande.

Ce numéro ne changera pas pendant la durée de la commande, ni dans l'historique.

Nous obtenons des informations sur l'ordre en utilisant le tikcet.

 
Mikalas:

Un ticket ulong est un numéro unique qui est attribué à une commande passée.

Ce nombre ne change pas tout au long de la durée de vie de la commande, ainsi que dans l'historique.

Nous obtenons des informations sur l'ordre en utilisant le tikcet.

Merci Mikhail. En fait, j'ai supposé que vous vouliez dire le billet de la commande. Mais il aurait dû être plus précis.


Mais quand même, le comportement des billets est assez étrange.

Exemple : Tickets et volumes de l'exécution dans le testeur.

Nous ouvrons une position dans Buy 0.1 lot, Ticket 2. SellStop 0.78 Ticket 3 est placé.

Lorsque le SellStop est activé, la position est laissée avec 0.68 ; l'ordre 3 avec le volume 0.78 et un profit négatif apparaît dans l'historique.

En même temps, il y a une position avec le ticket 4

Et l'on ne sait absolument pas où a disparu la perte de la position avec le ticket 2.


En général, nous ne pouvons pas toujours croire ce qui est écrit. Parce qu'il n'est pas complètement écrit.

Si une position s'ouvre avec un ordre en attente, le ticket reste, mais si l'ordre en ferme une autre, le nouveau ticket est créé.

 

La même chose se produit avec le ticket si la position et l'ordre en attente sont dans la même direction. Le billet change.


 
AlexeyVik:

Apparemment, c'est la perte des transactions... et, tout d'abord, (extrait de la documentation)

Vasily, est-ce un testeur ou une démo ? J'ai des échantillons du testeur. Je me demande s'il y a une différence entre le déclenchement de OnTradeTransaction dans le testeur et sur le compte ? Je le vérifierai à l'occasion.

Il s'agit d'une démo. Peut-être que le modèle d'événement est différent dans le testeur et en temps réel.

 

J'ai plusieurs bots dans MT5 sur Forts. Y compris plusieurs sur un même instrument. J'utilise pour déterminer le nombre de contrats que possède le "robot", en parcourant l'historique des transactions. En gros, tout fonctionne. J'ai décidé d'essayer d'utiliserOnTradeTransaction. L'idée de mise en œuvre est simple : lorsqu'une transaction est conclue, nous regardons combien de contrats ont été achetés ou vendus et quel bot a conclu la transaction (en utilisant un commentaire spécial sur la transaction ou le numéro magique) et nous enregistrons ces informations dans un fichier. La question est la suivante. Si nous avons OnTradeTransaction dans chaque EA, comment sera-t-il appelé séquentiellement ou en parallèle ? Supposons, par exemple, qu'une transaction ait été exécutée - de nombreux événements se sont produits et OnTradeTransaction sera systématiquement appelé dans chaque robot pour chaque événement ? En d'autres termes, est-il plus facile de créer un gestionnaire OnTradeTransaction qui sera responsable de tous les bots ? En fait, je ne suis pas un programmeur, bien que j'aie déjà programmé beaucoup de choses. Le code est peut-être ringard, mais j'arrive toujours à le faire fonctionner comme il le devrait.

 
votor:

J'ai plusieurs bots dans MT5 sur Forts. Y compris plusieurs sur un même instrument. J'utilise pour déterminer le nombre de contrats que possède le "robot", en parcourant l'historique des transactions. En gros, tout fonctionne. J'ai décidé d'essayer d'utiliserOnTradeTransaction. L'idée de mise en œuvre est simple : lorsqu'une transaction est conclue, nous regardons combien de contrats ont été achetés ou vendus et quel bot a conclu la transaction (en utilisant un commentaire spécial sur la transaction ou le numéro magique) et nous enregistrons ces informations dans un fichier. La question est la suivante. Si nous avons OnTradeTransaction dans chaque EA, comment sera-t-il appelé séquentiellement ou en parallèle ? Supposons, par exemple, qu'une transaction ait été exécutée - de nombreux événements se sont produits et OnTradeTransaction sera systématiquement appelé dans chaque robot pour chaque événement ? En d'autres termes, est-il plus facile de créer un gestionnaire OnTradeTransaction qui sera responsable de tous les bots ? En fait, je ne suis pas un programmeur, bien que j'aie déjà programmé beaucoup de choses. Le code est peut-être ringard, mais je le fais toujours fonctionner correctement.

Oui, OnTradeTransaction fonctionnera dans chaque EA. Ils doivent être filtrés par symbole et s'il y a plus d'un conseiller expert sur un symbole, alors par magik.

 

Je vous remercie de votre réponse. Je l'ai déjà vérifié et je vois qu'il fonctionne dans tous les EAs. La question est (peut-être est-ce une question stupide) si toutes cesOnTradeTransactions sont traitées dans tous les EAs en série, d'abord dans un EA, puis dans le suivant, etc. plutôt qu'en parallèle, n'est-ce pas ? Je veux dire, puisque leur traitement est séquentiel ( ?), il serait mieux de créer un seul gestionnaire pour tous les bots et de filtrer ce dont nous avons besoin dedans.

 
votor:

Merci de votre réponse. Je l'ai déjà vérifié et je vois qu'il fonctionne dans tous les EAs. La question est (peut-être est-ce une question stupide) si tous ces messagesOnTradeTransaction dans tous les EAs fonctionnent séquentiellement, d'abord dans un EA, puis dans le suivant, etc. plutôt que parallèlement, n'est-ce pas ? Je veux dire, puisque leur traitement est séquentiel ( ?), il serait mieux de créer un seul gestionnaire pour tous les bots et d'y filtrer ce dont nous avons besoin.

Je ne l'ai pas vérifié, mais il ne semble pas y avoir de régularité. C'est comme celui qui s'est levé le premier, il ne laisse rien au hasard. Et c'est possible que si vous vous levez en même temps, alors chacun la pantoufle.

Jusqu'à présent, il me semble que la meilleure option consiste à filtrer par symbole et par magicien. Dont il écrit des informations sur sa position.

 

Quelque chose que je ne suis pas doué pour expliquer, apparemment. Voici un exemple concret. Voici le code :

void OnTradeTransaction(const MqlTradeTransaction& trans,

const MqlTradeRequest& request,

const MqlTradeResult& result)

{

Compte++ ;

Print("Ontrade_test = ",Count) ;

}

Le gestionnaire est implémenté dans deux Expert Advisors, il est donc exécuté plusieurs fois dans deux Expert Advisors lorsqu'une transaction est effectuée. Le code sort :

18:31:06.495 ontrade_trans_functions (MXI-12.17,H1) Ontrade_test = 1

18:31:06.495 ontrade_trans_functions2 (MXI-12.17,H1) Ontrade_test = 1

18:31:06.497 ontrade_trans_functions (MXI-12.17,H1) Ontrade_test = 2

18:31:06.497 ontrade_trans_functions2 (MXI-12.17,M5) Ontrade_test = 2

18:31:06.498 ontrade_trans_functions (MXI-12.17,M5) Ontrade_test = 3

18:31:06.498 ontrade_trans_functions2 (MXI-12.17,H1) Ontrade_test = 3

18:31:06.500 ontrade_trans_functions (MXI-12.17,M5) Ontrade_test = 4

18:31:06.500 ontrade_trans_functions2 (MXI-12.17,H1) Ontrade_test = 4 ...

et ainsi de suite.

Vous pouvez voir que le temps de réponse de OnTradeTransaction dans les deux Expert Advisors est le même en millisecondes. J'ai donc une question : l'événement de transaction arrive-t-il d'abord à un OnTradeTransaction dans un EA et ensuite au suivant dans un autre EA ou arrive-t-il d'une manière ou d'une autre à tous les gestionnaires de tous les EA en même temps ? Eh bien, c'est comme une opération parallèle multithread ou quel que soit le nom qu'on lui donne en programmation. Je suis sûr que tout se passe de manière séquentielle, tout est simplement traité en une milliseconde, mais j'ai posé la question juste au cas où.