Aide : Pourquoi l'EA ne ferme pas une transaction - page 4

 

Vous allez avoir le problème que personne ne vous répond si vous n'utilisez pas le bouton SRC pour poster votre code :D

 
crossy:

Bonjour mes amis,


OrderT est le numéro du ticket de commande,
.




Mon PROBLÈME est le suivant : L'EA ferme parfois très bien la transaction, mais parfois l'EA ferme la tarde MAIS il continue à chercher le ticket pour la fermer, bien qu'elle ait déjà été fermée.

(J'obtiens l'erreur : "Numéro de ticket inconnu..." .

Je pense que j'ai une erreur de logique.

Merci pour votre aide.

Y

C'est très, très simple . . .

Il suffit de répondre à cette simple question et vous aurez votre réponse....

Vous transmettez le numéro de TICKET à la fonction pour que le ticket puisse être fermé... pourquoi passer ensuite en boucle par TOUS les autres ordres ? vous SAVEZ déjà le numéro du ticket que vous devez fermer... pourquoi cette boucle ?

 
...
   for(int cnt = OrdersTotal()-1; cnt >= 0 ; cnt--) 
   {
      CodeY = false;
      if ( OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) )
      {
         CodeY    = true;
         OrderS   = OrderSymbol();
         OrderT   = OrderTicket();
         OrderM   = OrderMagicNumber();
         OrderTyp = OrderType();
         OrderL   = OrderLots();
      }   
      if ( CodeY && OrderS == Pair1 && OrderTyp == OP_BUY && OrderM == MAG &&.... )
    
         CLOSE_Single_P(Pair1,"LONG",OrderT,OrderL);

//-----------------------------------------------+
void CLOSE_Single_P(string SYMB, string TREN, int TICKET, double LOTT)
{
   double PRC;
   bool Check = false;

   for ( int cntt=0; cntt<20000; cntt++ )
   {
      if ( Check )
      {
         Check_Ini();
         return;
      }
      for ( int vvv = OrdersTotal()-1; vvv >= 0; vvv-- )
      {  
         if ( OrderSelect(vvv, SELECT_BY_POS, MODE_TRADES) )
         {   
            Check = false;
            if ( TREN == "LONG" )
              PRC = MarketInfo(SYMB,MODE_BID);
            else
            if ( TREN == "SHORT" )
               PRC = MarketInfo(SYMB,MODE_ASK);
         
            Check = OrderClose(TICKET,LOTT,PRC,Slippage,Yellow);
            if ( Check )
               break;
         }      
      } 
   }
   return;
}
//-----------------------------------------------+

J'espère que c'est plus clair, maintenant.

Merci

 
RaptorUK:

C'est très, très simple...

Répondez à cette simple question et vous aurez votre réponse...

Vous transmettez le numéro de TICKET à la fonction pour que le ticket puisse être fermé... ... pourquoi passer ensuite en boucle par TOUS les autres ordres ? vous SAVEZ déjà le numéro du ticket que vous devez fermer... pourquoi cette boucle ?


Merci Raptor, je l'ai fait une fois sans le ORDERSELECT, mais j'ai eu la même erreur.

Y.

 
J'ai déjà donné un indice sur la toute première page. https://www.mql5.com/en/forum/139543
 

Merci onewithzachy, et j'ai fait comme vous l'avez suggéré et j'ai obtenu l'erreur

qu'il n'a pas trouvé le TICKET...

 
crossy:

Bonjour mes amis,


OrderT est le numéro du ticket de commande,
.




Mon PROBLÈME est le suivant : L'EA ferme parfois très bien la transaction, mais parfois l'EA ferme la tarde MAIS il continue à chercher le ticket pour la fermer, bien qu'elle ait déjà été fermée.

(J'obtiens l'erreur : "Numéro de ticket inconnu..." .

Je pense que j'ai une erreur de logique.

Merci pour votre aide.

Y

C'est très, très simple . . .

Il suffit de répondre à cette simple question et vous aurez votre réponse....

Vous transmettez le numéro de TICKET à la fonction pour que le ticket puisse être fermé... pourquoi passer ensuite en boucle par TOUS les autres ordres ? vous SAVEZ déjà le numéro du ticket que vous devez fermer... pourquoi cette boucle ?

 
onewithzachy:
J'ai déjà donné un indice sur la toute première page. https://www.mql5.com/en/forum/139543
Et j'ai donné la réponse aussi... https://www. mql5.com/en/forum/139543
 
crossy:


Merci Raptor, je l'ai fait une fois sans le ORDERSELECT, mais j'ai eu la même erreur.

Vous ne lisez pas ce que j'ai écrit et demandé... pourquoi la boucle ? quelle est la fonction de la boucle dans cette situation ?
 
...
   for(int cnt = OrdersTotal()-1; cnt >= 0 ; cnt--) 
   {
      CodeY = false;
      if ( OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) )
      {
         CodeY    = true;
         OrderS   = OrderSymbol();
         OrderT   = OrderTicket();
         OrderM   = OrderMagicNumber();
         OrderTyp = OrderType();
         OrderL   = OrderLots();
      }   
      if ( CodeY && OrderS == Pair1 && OrderTyp == OP_BUY && OrderM == MAG &&.... )
    
         CLOSE_Single_P(Pair1,"LONG",OrderT,OrderL);

//-----------------------------------------------+
void CLOSE_Single_P(string SYMB, string TREN, int TICKET, double LOTT)
{
   double PRC;
   bool Check = false;

   for ( int cntt=0; cntt<20000; cntt++ )
   {
      if ( Check )
      {
         Check_Ini();
         return;
      }
      Check = false;
      if ( TREN == "LONG" )
         PRC = MarketInfo(SYMB,MODE_BID);
      else
      if ( TREN == "SHORT" )
         PRC = MarketInfo(SYMB,MODE_ASK);
         
      Check = OrderClose(TICKET,LOTT,PRC,Slippage,Yellow);
   }
   return;
}
//-----------------------------------------------+

O.K. Voici la version modifiée, qui m'a valu la même erreur.

Y.

Raison: