MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 1720

 
MakarFX # :
Hata, sondan bir önceki arama kodunda değil, büyük olasılıkla bilginin metne çıktısındadır.

Kodda bir hata hakkında konuşma yoktu. Bir kez daha tekrar ediyorum bu kod yeni bir maksimum emir açıldığında çalışır ve bu olmadığında danışman sondan bir önceki emrin = sonuncusu olduğunu düşünür. Bu kadar

 
MakarFX # :
Hata, sondan bir önceki arama kodunda değil, büyük olasılıkla bilginin metne çıktısındadır.

Makar, vurgulanan koşulun neden çalışmadığını bana daha iyi anlat

 //+----------------------------------------------------------------------------+
//| Расчет тикета предпоследнего ордера в сетке                                 |
//+----------------------------------------------------------------------------+
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, vurgulanan koşulun neden çalışmadığını bana daha iyi anlat

Bu satırda maksimum bileti bulacaksınız

 if (OrderTicket() > penultimate_ticket)

ve bu satırda maksimumu maksimum ile karşılaştırırsınız

 if (penultimate_ticket < GetTicketMaxOrder())
yani her zaman yanlış
 
EVGENII SHELIPOV # :

Kodda bir hata hakkında konuşma yoktu. Bir kez daha tekrar ediyorum bu kod yeni bir maksimum emir açıldığında çalışır ve bu olmadığında danışman sondan bir önceki emrin = sonuncusu olduğunu düşünür. Bu kadar

Bu, yalnızca danışman yeniden başlatılıyorsa geçerlidir.

 
MakarFX # :

Bu, yalnızca danışman yeniden başlatılıyorsa geçerlidir.

Makar yok bak sondan bir önceki mertebe değişkenini ve son mertebe fonksiyonunu monitörde gösterdim

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

Bu satırda maksimum bileti bulacaksınız

ve bu satırda maksimumu maksimum ile karşılaştırırsınız

yani her zaman yanlış

Peki, nasıl yapılır, böylece işleve göre sıralanan tüm biletlerden

(OrderTicket()

eşit bileti kaldır

 GetTicketMaxOrder()
 
EVGENII SHELIPOV # :

Makar, vurgulanan koşulun neden çalışmadığını bana daha iyi anlat

 //+----------------------------------------------------------------------------+
//| Расчет тикета предпоследнего ордера в сетке                                 |
//+----------------------------------------------------------------------------+
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, bilet değişkeni nerede değişiyor? Yoksa tüm döngü tek bir siparişle mi çalışır?

 
Alexey Viktorov # :

Eugene, bilet değişkeni nerede değişiyor? Yoksa tüm döngü tek bir siparişle mi çalışır?

ona yazdım zaten
 
EVGENII SHELIPOV # :

Makar yok bak sondan bir önceki mertebe değişkenini ve son mertebe fonksiyonunu monitörde gösterdim

EA yeniden başlatıldığında prev_ticket sıfırlanır
 
MakarFX # :

Bir kez daha... Size çalışan bir kod verdim!

Test cihazında çalıştırın ve düğmelere basın.

Bunu görmek için siparişlerin kapalı olduğundan emin olmanız gerekiyor ancak bu Expert Advisor'da bu durum olmuyor. Ve tüm sorun, maksimum siparişin kapanmasından sonra ortaya çıkıyor.