Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1720

 
MakarFX #:
L'errore non è nel codice di ricerca del penultimo, ma piuttosto nell'output delle informazioni nel testo.

Non abbiamo mai parlato di un errore nel codice. Ripeto ancora una volta, questo codice funziona quando viene aperto un nuovo ordine massimo e quando questo non accade, l'Expert Advisor considera che il penultimo ordine = l'ultimo. Questo è tutto

 
MakarFX #:
L'errore non è nel penultimo codice di ricerca, ma molto probabilmente nell'output delle informazioni al testo

Makar, perché la condizione evidenziata non funziona?

//+----------------------------------------------------------------------------+
//| Расчет тикета предпоследнего ордера в сетке                                 |
//+----------------------------------------------------------------------------+
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, dimmi perché la condizione evidenziata non funziona.

In questa linea si trova il biglietto massimo

if(OrderTicket() > penultimate_ticket)

e in questa linea state confrontando il massimo con il massimo.

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

Non abbiamo mai parlato di un errore nel codice. Ripeto ancora una volta, questo codice funziona quando viene aperto un nuovo ordine massimo e quando questo non accade, l'Expert Advisor considera che il penultimo ordine = l'ultimo. Questo è tutto

Questo succede solo se l'EA viene riavviato

 
MakarFX #:

Questo è solo se l'EA viene riavviato

No Makar, guarda qui, ho messo la variabile del penultimo ordine e la funzione dell'ultimo ordine sul 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 #:

Su questa linea si trova il biglietto massimo

e in questa linea si confronta il massimo con il massimo.

quindi sempre falso

Bene, come si fa a fare in modo che tutti i biglietti scansionati da questa funzione

(OrderTicket()

per rimuovere un biglietto uguale a

GetTicketMaxOrder()
 
EVGENII SHELIPOV #:

Makar, dimmi perché la condizione evidenziata non funziona

//+----------------------------------------------------------------------------+
//| Расчет тикета предпоследнего ордера в сетке                                 |
//+----------------------------------------------------------------------------+
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, dove cambia la variabile del biglietto? O l'intero ciclo funziona con un solo ordine?

 
Alexey Viktorov #:

Eugene, dove cambia la variabile del biglietto? O l'intero ciclo funziona con un solo ordine?

Gli ho già scritto
 
EVGENII SHELIPOV #:

No Makar, guarda qui, ho messo la variabile del penultimo ordine e la funzione dell'ultimo ordine sul monitor

prev_ticket viene resettato quando l'EA viene riavviato
 
MakarFX #:

Ancora una volta... ti ho dato un codice funzionante!

Fallo funzionare nel tester e premi i pulsanti.

Per vederlo, devi far chiudere gli ordini e questo EA non lo fa. E l'intero problema si verifica dopo che l'ordine max è chiuso

Motivazione: