Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1720

 
MakarFX #:
Ошибка не коде поиска предпоследнего, а скорее всего в выводе информации в текст

Про ошибку в коде и разговора не было. Повторю ещё раз данный код работает когда будет открыт новый максимальный ордер а когда  этого не происходит то советник считает что предпоследний ордер = последнему. Вот и всё 

 
MakarFX #:
Ошибка не коде поиска предпоследнего, а скорее всего в выводе информации в текст

Макар подскажи лучше почему не работает выделенное условие

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

Макар подскажи лучше почему не работает выделенное условие

В этой строке ты находишь максимальный тикет

if(OrderTicket() > penultimate_ticket)

а в этой строке ты сравниваешь максимальный с максимальным

if(penultimate_ticket < GetTicketMaxOrder())
поэтому всегда false
 
EVGENII SHELIPOV #:

Про ошибку в коде и разговора не было. Повторю ещё раз данный код работает когда будет открыт новый максимальный ордер а когда  этого не происходит то советник считает что предпоследний ордер = последнему. Вот и всё 

Это только в том случае, если идет перезапуск советника

 
MakarFX #:

Это только в том случае, если идет перезапуск советника

Нет Макар вот посмотри я вывел переменную предпоследнего ордера и функцию последнего ордера на монитор

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

В этой строке ты находишь максимальный тикет

а в этой строке ты сравниваешь максимальный с максимальным

поэтому всегда false

Хорошо а как сделать так что бы из всех тикетов перебранного функцией 

(OrderTicket()

убрать тикет равный 

GetTicketMaxOrder()
 
EVGENII SHELIPOV #:

Макар подскажи лучше почему не работает выделенное условие

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

Евгений, а где меняется переменная ticket? Или весь цикл работает с одним ордером?

 
Alexey Viktorov #:

Евгений, а где меняется переменная ticket? Или весь цикл работает с одним ордером?

Я ему уже писал
 
EVGENII SHELIPOV #:

Нет Макар вот посмотри я вывел переменную предпоследнего ордера и функцию последнего ордера на монитор

prev_ticket обнуляется при перезапуске советника
 
MakarFX #:

Еще раз...Я тебе дал рабочий код!

Вот запусти в тестере и нажимай кнопки.

Чтобы посмотреть нужно сделать так чтобы ордера закрывались а в этом советнике этого не происходит. А вся проблема происходит после закрытия макс ордера