Comment travailler correctement dans MT5 avec OrderSend ? - page 3

 
prostotrader:

Profitez-en.

Pourquoi envoyez-vous une requête vide au serveur ? Ça n'a pas l'air d'avoir de sens.
Et que ferez-vous dans "//see cause result.retcode" si vous obtenez, par exemple, TRADE_RETCODE_TIMEOUT ou TRADE_RETCODE_FROZEN ?
 
RickD:
Pourquoi envoyez-vous une requête vide au serveur ? Ça n'a pas l'air d'avoir de sens.
Et que ferez-vous dans "//see result.retcode" si vous obtenez, par exemple, TRADE_RETCODE_TIMEOUT ou TRADE_RETCODE_FROZEN ?
Je vais me pendre :)
 
Andrey Khatimlianskii:

Je le soutiens des deux mains. C'est comme si MQ ne voulait pas assumer la responsabilité d'une fonction toute faite consistant à envoyer un ordre et à recevoir une réponse.

Mon option est aussi avec des béquilles :

Pourquoi ne pas faire quelque chose de similaire (pas pour toutes les occasions, au moins la plus simple !) et le mettre en vente au SB ?

En fait, à quoi sert l'"exécution rapide" de OrderSend(...) si nous devons attendre, dans l'EA, l'exécution de l'ordre.

pour les mises à jour de l'environnement, dans ce cas les mises à jour de l'histoire... et trouver différents algorithmes pour attendre...

tant que l'histoire ne sera pas mise à jour, nous n'avancerons pas... c'est-à-dire que cette vitesse ne sert à rien...

 
Denis Sartakov:

En fait, à quoi sert une exécution "rapide" de OrderSend(...) si, dans EA, nous devons attendre

pour une mise à jour de l'environnement, dans ce cas une mise à jour de l'historique... et trouver différents algorithmes pour attendre...

tant que l'histoire ne sera pas mise à jour, nous n'avancerons pas... c'est-à-dire que cette vitesse ne sert à rien...

Probablement, il est implémenté de cette façon parce que le terminal peut exécuter OrderSend et OrderSendAsync en parallèle, et la synchronisation forcée de l'historique après OrderSend affecterait d'une manière ou d'une autre OrderSendAsync, OnTrade, OnTradeTransaction, les ralentissant.
 
Andrey Khatimlianskii:
Je ne parle pas des fonctions intégrées au langage, mais de la bibliothèque standard.
Je parle spécifiquement des fonctions linguistiques intégrées, que OrderSend pourrait attendre une mise à jour de l'historique des transactions en interne, mais il ne le fait pas. :)
Vous dites que vous avez une béquille, mais elle n'est pas si fiable. Donnez-moi un exemple d'une bonne béquille fiable.
Je dis que tu peux peut-être te passer de béquilles. Si les développeurs daignaient changer le comportement de OrderSend. Faites-le comme dans MT4.
Ou - ou une option alternative. Ajoutez la fonction OrderSendMT4Style. :)
 

Une surcharge OrderSend très simple est écrite indépendamment : jusqu'à ce que OnTrade renvoie une réponse, tous les OrderSend suivants renvoient false. Dès que la réponse est reçue - le faux forcé est annulé.

C'est exactement la solution que nous devons ajouter au SB. Et nous devons l'utiliser nous-mêmes.

Dans SB, ajouter lebool CTrade::IsHistoryLoad( const string Symb = NULL ) par le même principe.

Et pas de béquilles ! Ces deux fonctions peuvent être facilement écrites par vous-même.

Si vous voulez obtenir la fonctionnalité complète (pas pour SB), appelez OnTick et OnTimer indépendamment dans OnTrade à l'arrivée de la synchronisation correspondante.

 

Quel tas de béquilles ils ont écrit... Étude du comportement de la fonction void OnTradeTransaction()

/*********************TradeTransaction function*********************/
void OnTradeTransaction(const MqlTradeTransaction& trans,
                        const MqlTradeRequest& request,
                        const MqlTradeResult& result)
{
      if(trans.type == TRADE_TRANSACTION_DEAL_ADD)
       {
        if(!PositionSelectByTicket(trans.position))
         {
          //Print("********* закрылась позиция ", trans.position);
           closedPosition(trans);
         }
        if(PositionSelectByTicket(trans.position))
         {
          //Print("********* отккрылась позиция ", ", ", EnumToString(trans.deal_type), ", ", trans.position);
           openedPosition(trans);
         }
       }
       
}/*******************************************************************/

Traitez également les erreurs d'ouverture de positions et d'ordres.

 
Alexey Viktorov:

Quel tas de béquilles ils ont écrit... Étude du comportement de la fonction void OnTradeTransaction()

Traitez également les erreurs d'ouverture de positions et d'ordres.

Vous avez lu le sujet en diagonale.
 
fxsaber:
Vous avez lu le sujet en diagonale.

Non, seulement verticalement. Seulement la première lettre de chaque ligne.

 
Andrey Khatimlianskii:

Comment cette simple surcharge fonctionnera-t-elle avec 2 EA sur le même instrument ?

Malheureusement, seulement à travers une béquille - une variable globale du terminal.
Raison: