Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1720

 
MakarFX #:
L'erreur n'est pas dans le code de recherche de l'avant-dernier, mais plutôt dans la sortie des informations dans le texte.

Nous n'avons jamais parlé d'une erreur dans le code. Je le répète encore une fois, ce code fonctionne lorsqu'un nouvel ordre maximum est ouvert et lorsque cela ne se produit pas, le Conseiller Expert considère que l'avant-dernier ordre = le dernier. C'est tout

 
MakarFX #:
L'erreur n'est pas dans l'avant-dernier code de recherche, mais très probablement dans la sortie de l'information vers le texte

Makar, pourquoi la condition mise en évidence ne fonctionne pas ?

//+----------------------------------------------------------------------------+
//| Расчет тикета предпоследнего ордера в сетке                                 |
//+----------------------------------------------------------------------------+
int GetTicketPenultimateOrder()
  {
   penultimate_ticket = 0;
     {
      for(int cnt = OrdersTotal() - 1; cnt >= 0; cnt--)
        {
         if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))
           {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
              {
               if(OrderType() == OP_BUY || OrderType() == OP_SELL)
                 {
                  if(OrderTicket() > penultimate_ticket)
                     if(penultimate_ticket < GetTicketMaxOrder())
                        penultimate_ticket = OrderTicket();

                 }
              }
           }
        }
     }
   return(penultimate_ticket);
  }
 
EVGENII SHELIPOV #:

Makar, dites-moi pourquoi la condition mise en évidence ne fonctionne pas.

Dans cette ligne, vous trouvez le ticket maximum

if(OrderTicket() > penultimate_ticket)

et dans cette ligne, vous comparez le maximum au maximum.

if(penultimate_ticket < GetTicketMaxOrder())
donc toujours faux
 
EVGENII SHELIPOV #:

Nous n'avons jamais parlé d'une erreur dans le code. Je le répète encore une fois, ce code fonctionne lorsqu'un nouvel ordre maximum est ouvert et lorsque cela ne se produit pas, le Conseiller Expert considère que l'avant-dernier ordre = le dernier. C'est tout

Cela ne se produit que si l'EA est redémarré.

 
MakarFX #:

Cela ne se produit que si l'EA est redémarré.

Non Makar, regarde ici, j'ai mis la variable de l'avant-dernière commande et la fonction de la dernière commande sur le moniteur.

ObjectCreate("signal400",OBJ_LABEL,0,0,0,0,0);
   ObjectSet("signal400",OBJPROP_XDISTANCE,100);
   ObjectSet("signal400",OBJPROP_YDISTANCE,740);
   ObjectSetText("signal400",DoubleToString(FindPenultimateLots(),2),14,"Tahoma", clrRed);
   ObjectCreate("signal401",OBJ_LABEL,0,0,0,0,0);
   ObjectSet("signal401",OBJPROP_XDISTANCE,200);
   ObjectSet("signal401",OBJPROP_YDISTANCE,740);
   ObjectSetText("signal401",DoubleToString(prev_ticket,0),14,"Tahoma", clrRed);
 
MakarFX #:

Sur cette ligne, vous trouvez le ticket maximum

et dans cette ligne, vous comparez le maximum avec le maximum.

donc toujours faux

Comment faire en sorte que tous les billets scannés par cette fonction

(OrderTicket()

pour supprimer un ticket égal à

GetTicketMaxOrder()
 
EVGENII SHELIPOV #:

Makar, dis-moi pourquoi la condition mise en évidence ne fonctionne pas.

//+----------------------------------------------------------------------------+
//| Расчет тикета предпоследнего ордера в сетке                                 |
//+----------------------------------------------------------------------------+
int GetTicketPenultimateOrder()
  {
   penultimate_ticket = 0;
     {
      for(int cnt = OrdersTotal() - 1; cnt >= 0; cnt--)
        {
         if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))
           {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
              {
               if(OrderType() == OP_BUY || OrderType() == OP_SELL)
                 {
                  if(OrderTicket() > penultimate_ticket)
                     if(penultimate_ticket < GetTicketMaxOrder())
                        penultimate_ticket = OrderTicket();

                 }
              }
           }
        }
     }
   return(penultimate_ticket);
  }

Eugène, où la variable du billet change-t-elle ? Ou est-ce que toute la boucle fonctionne avec une seule commande ?

 
Alexey Viktorov #:

Eugène, où la variable du billet change-t-elle ? Ou est-ce que toute la boucle fonctionne avec une seule commande ?

Je lui ai déjà écrit
 
EVGENII SHELIPOV #:

Non Makar, regarde ici, j'ai mis la variable de l'avant-dernière commande et la fonction de la dernière commande sur le moniteur.

prev_ticket est remis à zéro lorsque l'EA est redémarré.
 
MakarFX #:

Encore une fois... je vous ai donné un code qui fonctionne !

Passez-le dans le testeur et appuyez sur les boutons.

Pour le voir, vous devez faire fermer les ordres et cet EA ne le fait pas. Et tout le problème survient après la fermeture de l'ordre max.