Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1720

 
MakarFX #:
O erro não está no código de busca do penúltimo, mas muito provavelmente, na saída de informações no texto.

Nós nunca dissemos nada sobre um erro no código. Vou repetir mais uma vez, este código funciona quando uma nova ordem máxima é aberta e quando isto não acontece, o Consultor Especialista considera que a penúltima ordem = a última. Isso é tudo.

 
MakarFX #:
O erro não está no penúltimo código de busca, mas muito provavelmente na saída das informações para o texto

Makar, por que a condição destacada não 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);
  }
 
EVGENII SHELIPOV #:

Makar, diga-me por que a condição destacada não funciona.

Nesta linha você encontra o bilhete máximo

if(OrderTicket() > penultimate_ticket)

e nesta linha você está comparando o máximo com o máximo.

if(penultimate_ticket < GetTicketMaxOrder())
portanto sempre falso
 
EVGENII SHELIPOV #:

Nós nunca dissemos nada sobre um erro no código. Vou repetir mais uma vez, este código funciona quando uma nova ordem máxima é aberta e quando isto não acontece, o Consultor Especialista considera que a penúltima ordem = a última. Isso é tudo.

Isso só acontece se a EA for reiniciada

 
MakarFX #:

Isto é somente se a EA for reiniciada

Não Makar, veja aqui, eu coloquei a variável da penúltima ordem e a função da última ordem no 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 #:

Nesta linha você encontra o bilhete máximo

e, nesta linha, você compara o máximo com o máximo.

portanto sempre falso

Bem, como você faz para que todos os bilhetes pesquisados por esta função

(OrderTicket()

para remover um bilhete igual a

GetTicketMaxOrder()
 
EVGENII SHELIPOV #:

Makar, diga-me por que a condição destacada não 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, onde a variável do bilhete muda? Ou o loop inteiro funciona com um pedido?

 
Alexey Viktorov #:

Eugene, onde a variável do bilhete muda? Ou o loop inteiro funciona com um pedido?

Eu já lhe escrevi
 
EVGENII SHELIPOV #:

Não Makar, veja aqui, eu coloquei a variável da penúltima ordem e a função da última ordem no monitor

prev_ticket é reiniciado quando a EA é reiniciada
 
MakarFX #:

Mais uma vez... Eu lhe dei um código de trabalho!

Execute-o no testador e pressione os botões.

Para ver isso, é preciso fazer com que os pedidos sejam fechados e esta EA não faz isso. E todo o problema acontece depois que a ordem máxima é fechada

Razão: