Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1720

 
MakarFX #:
El error no está en el código de búsqueda de la penúltima, sino en la salida de la información en el texto.

Nunca hemos dicho nada sobre un error en el código. Vuelvo a repetir, este código funciona cuando se abre una nueva orden máxima y cuando esto no ocurre, el Asesor Experto considera que la penúltima orden = la última. Eso es todo

 
MakarFX #:
El error no está en el código de la penúltima búsqueda, sino muy probablemente en la salida de la información a texto

Makar, ¿por qué no funciona la condición resaltada?

//+----------------------------------------------------------------------------+
//| Расчет тикета предпоследнего ордера в сетке                                 |
//+----------------------------------------------------------------------------+
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, dime por qué la condición resaltada no funciona.

En esta línea se encuentra el billete máximo

if(OrderTicket() > penultimate_ticket)

y en esta línea estás comparando el máximo con el máximo.

if(penultimate_ticket < GetTicketMaxOrder())
por lo tanto, siempre es falso
 
EVGENII SHELIPOV #:

Nunca hemos dicho nada sobre un error en el código. Vuelvo a repetir, este código funciona cuando se abre una nueva orden máxima y cuando esto no ocurre, el Asesor Experto considera que la penúltima orden = la última. Eso es todo

Esto sólo ocurre si se reinicia el EA

 
MakarFX #:

Esto es sólo si el EA se reinicia

No Makar, mira aquí, puse la variable de la penúltima orden y la función de la última orden en el monitor

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 #:

En esta línea se encuentra el billete máximo

y en esta línea se compara el máximo con el máximo.

por lo tanto, siempre es falso

Bien, ¿cómo hacer para que todos los billetes buscados por esta función

(OrderTicket()

para eliminar un billete igual a

GetTicketMaxOrder()
 
EVGENII SHELIPOV #:

Makar, dime por qué la condición resaltada no funciona

//+----------------------------------------------------------------------------+
//| Расчет тикета предпоследнего ордера в сетке                                 |
//+----------------------------------------------------------------------------+
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);
  }

Eugene, ¿dónde cambia la variable del billete? ¿O todo el bucle funciona con una orden?

 
Alexey Viktorov #:

Eugene, ¿dónde cambia la variable del billete? ¿O todo el bucle funciona con una orden?

Ya le he escrito
 
EVGENII SHELIPOV #:

No Makar, mira aquí, puse la variable de la penúltima orden y la función de la última orden en el monitor

prev_ticket se restablece cuando se reinicia el EA
 
MakarFX #:

Una vez más... ¡Te he dado un código que funciona!

Póngalo en el probador y pulse los botones.

Para verlo, hay que hacer que las órdenes se cierren y este EA no lo hace. Y todo el problema ocurre después de que la orden máxima se cierra