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

 
Bunu biraz yeniden yaptım, main for döngüsü yerine şimdi do while, ama yine de ikinci iç içe döngüde ilk koşula giriş yok!
 int GetMagic(Order &order)
{
   int magic = 0 ;
   int unique = 0 ;
  
   if (order.cmd == OP_SELLSTOP || order.cmd == OP_BUYSTOP){
     if ( OrdersTotal ()){
       do {
        magic++;
         for ( int i = OrdersTotal (); i > 0 ; i --){
           if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)){
             Print ( "!!!!!!!!!!!!!!!!!!!" );//<----------НЕ ПРИНТУЕТСЯ
             if (magic != OrderMagicNumber())
              unique ++;
          }
        }
      } while (unique < OrdersTotal ());
    } else return (magic + 1 );
  }
   return magic;
}
 
MakarFX # :

Sen nesin?!)))

Sınanmış?

Uzun zamandır renk değişimi için uğraşıyorum ama hat üzerinde değil, fark olmaması gerekirken

                     if (SymOpen < SymClose) {
                       CColor=Mirroring?BearBarColor:BullBarColor;
                        SetIndexStyle( 32 +(num* 8 ), DRAW_HISTOGRAM , STYLE_SOLID ,Mirroring? 1 :WidthOC,CColor); SetIndexLabel( 32 +(num* 8 ), SubSymbol);
                        SetIndexStyle( 33 +(num* 8 ), DRAW_HISTOGRAM , STYLE_SOLID ,Mirroring?WidthOC: 1 ,CColor); SetIndexLabel( 33 +(num* 8 ), SubSymbol);
                        SetIndexStyle( 34 +(num* 8 ), DRAW_HISTOGRAM , STYLE_SOLID ,Mirroring?WidthOC: 1 ,CColor); SetIndexLabel( 34 +(num* 8 ), SubSymbol);
                        SetIndexStyle( 35 +(num* 8 ), DRAW_HISTOGRAM , STYLE_SOLID ,Mirroring? 1 :WidthOC,CColor); SetIndexLabel( 35 +(num* 8 ), SubSymbol);

not. Diğer koduma baktım, oradaki satırın rengini değiştiriyor

SetIndexStyle(num, DRAW_LINE , STYLE_SOLID , 1 ,BullColor);
 
Vitaly Muzichenko # :

Uzun zamandır renk değişimi için uğraşıyorum ama hat üzerinde değil, fark olmaması gerekirken

not. Diğer koduma baktım, oradaki satırın rengini değiştiriyor

SetIndexStyle(num, DRAW_LINE , STYLE_SOLID , 1 ,BullColor);

İstenen bölümü değil tüm satırı değiştirir

 
MakarFX # :

İstenen bölümü değil tüm satırı değiştirir

Peki, tüm satırı değiştirmeniz gerektiğini yazdı.

 
Bu yüzden, kodu test için uyarladım, çalıştırmayı deneyin ve ikinci dereceden sonsuz bir döngü elde edeceksiniz :(
Dosyalar:
 
Nerd Trader # :
Bu yüzden, kodu test için uyarladım, çalıştırmayı deneyin ve ikinci dereceden sonsuz bir döngü elde edeceksiniz :(

Şaşırdım! Niye ya?

Neden bu, içindeki kutsal anlam nedir?

 int GetMagic(Order &order)
{
   int magic = 0 ;
   int unique = 0 ;
  
   if (order.cmd == OP_SELLSTOP || order.cmd == OP_BUYSTOP){
     if ( OrdersTotal ()){
       do {
        magic++;
         for ( int i = OrdersTotal (); i > 0 ; i --){
           if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)){
             Print ( "!!!!!!!!!!!!!!!!!!!" ); //<----------НЕ ПРИНТУЕТСЯ
             if (magic != OrderMagicNumber())
              unique ++;
          }
        }
      } while (unique < OrdersTotal ());
    } else return (magic + 1 );
  }
   return magic;
}

---

Miktara göre arıyorsunuz, öyle yapın.

2 emriniz varsa, o zaman onları geçecek, 3. veya 23.'ü bulamayacak.

---

Görünüşe göre, sorunu tam olarak belirtmiyorsunuz, bu yüzden bu çözüm

 
Nerd Trader # :

yanlış döngü:

 for ( int i = OrdersTotal (); i > 0 ; i --){

böyle gerekir:

 for ( int i = OrdersTotal ()- 1 ; i >= 0 ; i --){
 
Aleksei Stepanenko # :

yanlış döngü:

böyle gerekir:

Evet! İşler! Ama neden ikinci for döngüsüne giriş daha önce gerçekleşti ve bir sonraki Print () satırını eklerseniz - yürütülecek (sonsuz olarak) ancak daha ileri gitmeyecek? Yine de teşekkürler, artık uyuyabiliriz.
 
Vitaly Muzichenko # :

Şaşırdım! Niye ya?

Neden bu, içindeki kutsal anlam nedir?

---

Miktara göre arıyorsunuz, öyle yapın.

2 emriniz varsa, o zaman onları geçecek, 3. veya 23.'ü bulamayacak.

---

Görünüşe göre, sorunu tam olarak belirtmiyorsunuz, bu yüzden bu çözüm

sadece sihrin benzersiz olması, yani diğerleriyle eşleşmemesi gerekir.
 
Aleksei Stepanenko # :

yanlış döngü:

böyle gerekir:

Fark ne? Ve siparişlerin numaralandırılması birden değil, sıfırdan mı?