Comment travailler correctement dans MT5 avec OrderSend ? - page 6

 
Alexey Viktorov:

Le premier EA se rend compte qu'après son OrderSend l'historique n'est pas encore synchronisé. Il attend juste l'événement de la synchronisation.

Mais comment le deuxième conseiller expert comprend-il que l'historique est synchronisé ou pas encore ?

 
fxsaber:

Le premier EA se rend compte qu'après son OrderSend l'historique n'est pas encore synchronisé. Il attend juste l'événement de la synchronisation.

Mais comment le deuxième conseiller expert comprend-il que l'historique est synchronisé ou pas encore ?

Oubliez l'histoire. Essayez d'étudier le comportement de la fonction OnTradeTransaction().

Le premier Expert Advisor a pris une position et cet événement est traité dans OnTradeTransaction où le mauvais ordre est activé... Cet événement est également traité dans OnTradeTransaction.

Le deuxième conseiller expert élimine également les ordres, les positions et les transactions qui ne sont pas les siens.

J'ai 2 EAs qui fonctionnent sur des comptes réels. Dans l'un d'entre eux, le magicien des positions attribue un ticket à la position à laquelle il doit être attaché. Et vous comprenez vous-même que ce ne sont pas deux magiciens différents...

Je crois que vous vous appelez Victor ? Commencez à définir deux positions avec des mages différents dans le débogage et suivez leurs structures dans OnTradeTransaction.

 
Alexey Viktorov:

Oubliez l'histoire. Essayez d'étudier le comportement de la fonction OnTradeTransaction().

Le premier Expert Advisor a placé une position, OnTradeTransaction gère cet événement, les "pas à eux" sont triés, l'ordre est activé... OnTradeTransaction gère également cet événement.

Le deuxième conseiller expert élimine également les ordres, les positions et les transactions qui ne sont pas les siens.

J'ai 2 EAs qui fonctionnent sur des comptes réels. Dans l'un d'entre eux, le magicien des positions attribue un ticket à la position à laquelle il doit être attaché. Et vous comprenez vous-même que ce ne sont pas deux magiciens différents...

Je crois que vous vous appelez Victor ? Commencez à définir deux positions avec des mages différents dans le débogage et suivez leurs structures dans OnTradeTransaction.

Si vous regardez attentivement mes logs, vous pouvez voir

que le ticket est reçu plus rapidement que le déclenchement de OnTradeTransaction, donc

le ticket de commande sera suffisant.

Bien que, bien sûr, (dans ce cas) il est préférable d'utiliser Magik.

Et (mieux encore) utilisez OrderSendAsync - il n'y a aucune erreur, ni sur le FOREX, ni sur le FORTS.

 
prostotrader:

Si vous regardez attentivement mes journaux, vous pouvez voir,

que le ticket est reçu plus rapidement que la transaction OnTradeTransaction, donc

le ticket de commande sera suffisant.

Bien que, bien sûr (dans ce cas), il serait préférable d'utiliser Magicien.

Et (pour l'instant) il est préférable d'utiliser OrderSendAsync - il n'y a pas d'erreurs, ni sur le FOREX, ni sur le FORTS.

C'est peut-être le cas. Mais que se passe-t-il si l'ordre en attente est activé ? Devons-nous analyser l'histoire ? Un autre problème avec la vitesse de synchronisation de l'environnement ?

En somme, c'est un jeu d'amateurs. L'essentiel est de le faire fonctionner, de ne pas trop ralentir et d'éviter...

 
Alexey Viktorov:

Oubliez l'histoire. Essayez d'étudier le comportement de OnTradeTransaction()

Comment fonctionne le second lors d'un historique non synchronisé ?

Ce problème ne touche pas seulement MT5, mais aussi le quadruple.

 
fxsaber:

Comment fonctionne le second lors d'un historique non synchronisé ?

Ce problème n'affecte pas seulement MT5 mais aussi le quadruple.

Je suis de plus en plus certain que votre nom est Victor. Je ne dirai à personne ton ancien surnom.

Vous avez maîtrisé la programmation à un niveau supérieur à la moyenne en peu de temps, à mon avis, même supérieur à la moyenne. Mais il est très difficile de vous faire quitter votre position erronée. Et maintenant que votre niveau de connaissances en programmation est supérieur au mien, je ne vais même pas essayer.

Oubliez l'histoire, voyez les structures de la fonction OnTradeTransaction.

Essayez d'expliquer en mots, comment déterminez-vous dans mql5 qu'un ordre en attente est activé ?

 
Alexey Viktorov:

Je suis de plus en plus certain que votre nom est Victor. Je ne dirai à personne ton ancien surnom.

Vous avez maîtrisé la programmation en peu de temps...

En fait, c'est une autre réincarnation de hrenfx. J'ai décidé de venir d'une nouvelle manière.
 
prostotrader:

Si vous regardez attentivement mes journaux, vous pouvez voir,

que le ticket est reçu plus rapidement que la OnTradeTransaction, donc

le ticket de commande sera suffisant.

Bien que, bien sûr (dans ce cas), il serait préférable d'utiliser Magicien.

Et (pour le moment) il est préférable d'utiliser OrderSendAsync - il n'y a pas d'erreurs, ni sur le FOREX, ni sur le FORTS.

Et quel est l'avantage de OrderSendAsync()? Il n'attend pas de réponse dans les résultats. Cela signifie qu'il faut l'attraper plus tard. L'avantage n'est pas clair.
 
prostotrader:

OrderSend() est une fonction absolument synchrone - si un ticket est reçu, tout est exécuté.

Voici un exemple

Ajouté, et voici les logs

https://www.mql5.com/ru/forum/38456/page85#comment_2888263

Merci !
 

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

Comment puis-je connaître ma commission sans ouvrir une position sur un symbole ?

fxsaber, 2016.11.08 20:30

#include <MT4Orders.mqh>

void OnStart()
{
  const int Ticket = OrderSend(_Symbol, OP_BUY, 1, SymbolInfoDouble(_Symbol, SYMBOL_ASK), 0, 0, 0);
  
  OrderClose(Ticket, 0.3, SymbolInfoDouble(_Symbol, SYMBOL_BID), 0, clrNONE);

  Sleep(1000); // ждем обновления истории
  
  if (OrderSelect(Ticket, SELECT_BY_TICKET))
    Alert(OrderCommission());
}

Je suppose que cet exemple est illustratif.

Si vous ne faites pas Sleep, vous obtenez souvent une situation où l'historique n'a pas eu le temps de se mettre à jour après OrderClose et OrderCommission renvoie une valeur comme si OrderClose n'avait pas été fait.

Notez qu'il s'agit d'un script et qu'il ne peut y avoir d'Event-over. La seule façon de s'en sortir est un sommeil stupide.

Si vous réécrivez ce script avec SB, rien ne changera.