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

 
MakarFX # :

"-1" i sevmiyorsan, yapabilirsin

Hayır, bunu yapamazsınız - dizinize bu şekilde erişirseniz program çökecektir.

En iyi durumda, dahili dizilere erişirseniz, ihtiyacınız olan verileri kaçırırsınız veya onlara döngü içinde ulaşamazsınız.

 
Nikolay Ivanov # :

Genel olarak, burada her şey basit, benzersiz, farklı sihirbazlar arasındaki eşleşmeyen tüm emirleri özetliyor..

Örneğin, 3 sipariş var

İlk yineleme büyüsü=1 benzersiz =0, yinelemenin sonunda benzersiz olacak=2

İkinci yineleme büyüsü=2   benzersiz =2, yinelemenin sonunda   benzersiz olacak = 3

3>=tüm emirlerin sayısı olduğundan, while döngüsü bozulur.. Ve sihir =3 hiç kontrol edilmedi... Toplam sihir tekrar =2 ve hepsi ile böyle devam eder..

İlk sıraya varsayılan olarak sihirli = 1 verilir ve ardından döngü devreye alınır:

Yineleme büyüsünün başlangıcı = 1 benzersiz = 0, sonunda (sihir = 1 ile zaten bir sipariş olduğunda) büyü hala 1 ve benzersiz = 0
İkinci yineleme büyüsü = 2 benzersiz = 0, sonunda, büyü = 2 ve benzersiz = 1 (eşleşme yok) ve rethorn ile 2. sıra büyü = 2'ye atanır.
Üçüncüsü de aynı olmalıydı...

Tüm süreci yazdırmak istedim ama bir şeyler ters gitti:

 int GetMagic()
{
   int magic = 0 ;
   int unique = 0 ;
   if ( OrdersTotal ()){
     do {
        magic++;
         for ( int i = OrdersTotal () - 1 ; i >= 0 ; i --){
           if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)){
             if (magic != OrderMagicNumber())
              unique ++;
          }
        }
         Print (" MAGIC ", magic, " | UNIQUE ", unique)
      } while (unique < OrdersTotal ());
  } else return (magic + 1 );

   return (magic);
}

-----------------------------------

'endless cycle.mq4'     endless cycle.mq4       1        1
'}' - semicolon expected        endless cycle.mq4       49        7
' else ' - ' while ' expected       endless cycle.mq4       50        5
' else ' - illegal ' else ' without matching ' if '   endless cycle.mq4       50        5
' OnTick ' - function declarations are allowed on global, namespace or class scope only   endless cycle.mq4       60        6
' OnTick ' - function already defined and has body        endless cycle.mq4       60        6
   see previous declaration of function ' OnTick '        endless cycle.mq4       60        6
'}' - unexpected end of program endless cycle.mq4       63        1
6 errors, 0 warnings             7        1
 
Nerd Trader # :

İlk sıraya varsayılan olarak sihirli = 1 verilir ve ardından döngü devreye alınır:

Yineleme büyüsünün başlangıcı = 1 benzersiz = 0, sonunda (sihir = 1 ile zaten bir sipariş olduğunda) büyü hala 1 ve benzersiz = 0
İkinci yineleme büyüsü = 2 benzersiz = 0, sonunda, büyü = 2 ve benzersiz = 1 (eşleşme yok) ve rethorn ile 2. sıra büyü = 2'ye atanır.
Üçüncüsü de aynı olmalıydı...

Tüm süreci yazdırmak istedim ama bir şeyler ters gitti:

 int GetMagic()
{
   int magic = 0 ;
   int unique = 0 ;
   if ( OrdersTotal ()){
     do {
        magic++;
         for ( int i = OrdersTotal () - 1 ; i >= 0 ; i --){
           if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)){
             if (magic != OrderMagicNumber())
              unique ++;
          }
        }
         Print ( " MAGIC " , magic, " | UNIQUE " , unique) ; // <---
      } while (unique < OrdersTotal ());
  } else return (magic + 1 );

   return (magic);
}


 
Artyom Trishkin # :

Daha fazlasını hedefleyin - TÜM programlama dilleri .

Çok basit - programlama dillerinde geri sayım sıfırdan başlar. Dizinin ilk hücresinin indeksi 0 olacaktır. Bu nedenle, onu DAHİL olarak sıfıra geri döndürmeniz gerekir. Onlar. >=0

OrdersTotal() örneğin 10'u verir. Ve döngüye 10'dan başlarsınız. Ve dizinin son indeksi 9'a sahiptir (sıfırdan başladığımızı hatırlıyor musunuz?). Ve var olmayan bir dizi hücresine eriştiğinizde ne olur? Bu doğru - program kritik bir hata nedeniyle çöktü, çünkü dizi için ayrılmamış bellek alanına tırmandınız - sınırlarının ötesinde .

Bu tam olarak sağlam koltuk değneği . Okuyun, çalışın ve her şey size gelecektir.

Teşekkürler. Onu kastetmedim. Açık bir lisansta olsaydı, mql için her şey affedilebilirdi. Ve böylece, nitpicking yapıyorum. Bana öyle geliyordu ki, örneğin, NormalizeDouble işlevinde bir bayrak koymak, bit kesme veya aritmetik yuvarlama kullanmak mümkündü. Veya örneğin, pozisyonlarla çalışma işlevlerini genişletmek, örneğin açık pozisyonların sayısını yalnızca uzlaşma veya satın almalar için iade etmek mümkün olacaktır. Ayrıca, daha ayrıntılı bir yardım yazabilirsiniz. Ama bu sadece bir amatörün görüşü. Ayrıca, son ifadem sert göründüyse özür dilerim.
 

Tonlarca ücretsiz ve iyi C/C++ kursu var.

Mql onlara yakındır ve özgürce öğrenebilirsiniz. Neyse ki, derin bilgi gerekli değildir. Ama en azından dilin sözdizimi ve algoritmaların temel temelleri.

Aksi takdirde, platform ve algoritmalar üzerine istişareler yerine, ilkokul düzeyinde diyaloglar yerine konuyla ilgili bazı saçmalıklar ortaya çıkıyor - nereye koymak; döngü nedir ve neden 0 ile indekslenir

örneğin, bir site intuit.ru var - C ve algoritmalar üzerine kurslar var, zamanınızı en fazla birkaç hafta geçirin. Aynı zamanda, bir parça kağıt alabilirsiniz :-)

 
Maxim Kuznetsov dilin sözdizimi ve algoritmaların temel temelleri.

Aksi takdirde, platform ve algoritmalar üzerine istişareler yerine, ilkokul düzeyinde diyaloglar yerine konuyla ilgili bazı saçmalıklar ortaya çıkıyor - nereye koymak; döngü nedir ve neden 0 ile indekslenir

örneğin, bir intuit.ru sitesi var - C ve algoritmalar üzerine kurslar var, zamanınızı en fazla birkaç hafta geçirin. Aynı zamanda, bir parça kağıt alabilirsiniz :-)

Bunun gibi?


 
Artyom Trishkin # :

OrdersTotal() örneğin 10'u verir. Ve döngüye 10'dan başlarsınız. Ve dizinin son indeksi 9'a sahiptir (sıfırdan başladığımızı hatırlıyor musunuz?). Ve var olmayan bir dizi hücresine eriştiğinizde ne olur? Bu doğru - program kritik bir hata nedeniyle çöktü, çünkü dizi için ayrılmamış bellek alanına tırmandınız - sınırlarının ötesinde .

Biraz düzelteceğim.. Kritik bir hata olmayacak, sadece bir boolean OrderSelect false döndürecek .. ve hepsi bu.. Ama elbette kaçınmak daha iyi.. Çünkü kodun yeteneklerini yanlış kullanırsanız, zor olası söveleri tahmin etmek için ..


inek tüccarı   # :

İlk sıraya varsayılan olarak sihirli = 1 verilir ve ardından döngü devreye alınır:

Yineleme büyüsünün başlangıcı = 1 benzersiz = 0, sonunda (sihir = 1 ile zaten bir sipariş olduğunda) büyü hala 1 ve benzersiz = 0
İkinci yineleme sihirli = 2 benzersiz = 0, sonunda, büyü = 2 ve benzersiz = 1 (eşleşme yok) ve imbik tarafından 2. sıraya magic = 2 atanır.
Üçüncüsü de aynı olmalıydı...

Sadece benzersizin doldurulmasının çok hızlı olduğunu ve sınıra ulaştığını ve sihrin zar zor büyüdüğünü görüyorum.

Bu bağlamda bir çözüm bulmak için yazdırın, ancak sorunu yeniden formüle etmenizi tavsiye ederim.. Örneğin, bir döngüdeki emirlerin maksimum büyüsünü bulun ve +1 ile geri gönderin, bu doğru basit çözüm olacaktır.

Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
  • 2021.10.19
  • www.mql5.com
В этой ветке я хочу начать свою помощь тем, кто действительно хочет разобраться и научиться программированию на новом MQL4 и желает легко перейти н...
 

Bunu yapabilirsiniz, kod gerektiği gibi çağrılır, böylece ağırlığı sorun yaratmaz

Test için Al/Sat kullandım

 //+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
{
   Print (GetMagic());
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int GetMagic()
{
//Если должен быть открыт стопордер и если есть уже открытые или отложенные
//ордера, то возможно некоторые с маджиком, это надо проверить и сгенерировать
//для нашего ордера уникальный маджик
   int arr[];
   int n=- 1 ;
   int OT= OrdersTotal ();
   for ( int i= 0 ; i<OT; i++) {
     if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)) {
       if (OrderType() == OP_SELL || OrderType() == OP_BUY) {
         if (ArraySearchInt(arr, OrderMagicNumber())==- 1 ) {
          n++;
           ArrayResize (arr,n+ 1 );
          arr[n]=OrderMagicNumber();
        }
      }
    }
  }
   ArraySort (arr);
  OT= ArraySize (arr);
   for ( int i= 0 ; i<OT; i++)
     if (arr[i]!=i) return i;
   return OT;
}
//-- удаляет копии с массива
int ArraySearchInt( int & m[], int e)
{
   for ( int i= 0 ; i< ArraySize (m); i++) {
     if (m[i]==e) return (i);
  }
   return (- 1 );
}
 

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

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

Vitaly Muzichenko , 2021.10.19 23:08

 int GetMagic()
{
   int magic = 0 ;
   int unique = 0 ;
   if ( OrdersTotal ()){
     do {
        magic++;
         for ( int i = OrdersTotal () - 1 ; i >= 0 ; i --){
           if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)){
             if (magic != OrderMagicNumber())
              unique ++;
          }
        }
         Print ( " MAGIC " , magic, " | UNIQUE " , unique) ; // <---
      } while (unique < OrdersTotal ());
  } else return (magic + 1 );

   return (magic);
}


Semyon Semyonoviç.
Nikolay Ivanov # :

Biraz düzelteceğim.. Kritik bir hata olmayacak, sadece bir boolean OrderSelect false döndürecek .. ve hepsi bu.. Ama elbette kaçınmak daha iyi.. Çünkü kodun yeteneklerini yanlış kullanırsanız, zor olası söveleri tahmin etmek için ..


Sadece benzersizin doldurulmasının çok hızlı olduğunu ve sınıra ulaştığını ve sihrin zar zor büyüdüğünü görüyorum.

Bu bağlamda bir çözüm bulmak için yazdırın, ancak sorunu basitçe yeniden formüle etmenizi tavsiye ederim.. Örneğin, bir döngüdeki siparişlerin maksimum büyüsünü bulun ve +1 ile geri gönderin , bu doğru basit çözüm olacaktır.

Bu seçenek başarısız olursa bu son çaredir. Bu arada, baskının ortaya çıktığı şey burada.

 int GetMagic()
{
   int magic = 0 ;
   int unique = 0 ;
   if ( OrdersTotal ()){
     do {
        magic++;
         for ( int i = OrdersTotal () - 1 ; i >= 0 ; i --){
           if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)){
             if (magic != OrderMagicNumber()){
              unique ++;
               Print ( " MAGIC " , magic, " | UNIQUE " , unique);
            }
          }
        }
      } while (unique < OrdersTotal ());
  } else return (magic + 1 );

   return (magic);
}
------------------------------------------------

2021.10 . 20 02 : 02 : 10.841 2021.01 . 04 00 : 01 : 00   endless cycle EURUSD,M5: open # 10 buy 0.01 EURUSD at 1.22405 ok
2021.10 . 20 02 : 02 : 10.841 2021.01 . 04 00 : 01 : 00   endless cycle EURUSD,M5:  MAGIC 2 | UNIQUE 9
2021.10 . 20 02 : 02 : 10.841 2021.01 . 04 00 : 01 : 00   endless cycle EURUSD,M5:  MAGIC 1 | UNIQUE 8
2021.10 . 20 02 : 02 : 10.841 2021.01 . 04 00 : 01 : 00   endless cycle EURUSD,M5:  MAGIC 1 | UNIQUE 7
2021.10 . 20 02 : 02 : 10.841 2021.01 . 04 00 : 01 : 00   endless cycle EURUSD,M5:  MAGIC 1 | UNIQUE 6
2021.10 . 20 02 : 02 : 10.841 2021.01 . 04 00 : 01 : 00   endless cycle EURUSD,M5:  MAGIC 1 | UNIQUE 5
2021.10 . 20 02 : 02 : 10.841 2021.01 . 04 00 : 01 : 00   endless cycle EURUSD,M5:  MAGIC 1 | UNIQUE 4
2021.10 . 20 02 : 02 : 10.841 2021.01 . 04 00 : 01 : 00   endless cycle EURUSD,M5:  MAGIC 1 | UNIQUE 3
2021.10 . 20 02 : 02 : 10.841 2021.01 . 04 00 : 01 : 00   endless cycle EURUSD,M5:  MAGIC 1 | UNIQUE 2
2021.10 . 20 02 : 02 : 10.841 2021.01 . 04 00 : 01 : 00   endless cycle EURUSD,M5:  MAGIC 1 | UNIQUE 1
2021.10 . 20 02 : 02 : 10.841 2021.01 . 04 00 : 01 : 00   endless cycle EURUSD,M5: open # 9 buy 0.01 EURUSD at 1.22405 ok
2021.10 . 20 02 : 02 : 10.841 2021.01 . 04 00 : 01 : 00   endless cycle EURUSD,M5:  MAGIC 2 | UNIQUE 8
2021.10 . 20 02 : 02 : 10.841 2021.01 . 04 00 : 01 : 00   endless cycle EURUSD,M5:  MAGIC 1 | UNIQUE 7
2021.10 . 20 02 : 02 : 10.841 2021.01 . 04 00 : 01 : 00   endless cycle EURUSD,M5:  MAGIC 1 | UNIQUE 6
2021.10 . 20 02 : 02 : 10.841 2021.01 . 04 00 : 01 : 00   endless cycle EURUSD,M5:  MAGIC 1 | UNIQUE 5
2021.10 . 20 02 : 02 : 10.841 2021.01 . 04 00 : 01 : 00   endless cycle EURUSD,M5:  MAGIC 1 | UNIQUE 4
2021.10 . 20 02 : 02 : 10.841 2021.01 . 04 00 : 01 : 00   endless cycle EURUSD,M5:  MAGIC 1 | UNIQUE 3
2021.10 . 20 02 : 02 : 10.841 2021.01 . 04 00 : 01 : 00   endless cycle EURUSD,M5:  MAGIC 1 | UNIQUE 2
2021.10 . 20 02 : 02 : 10.841 2021.01 . 04 00 : 01 : 00   endless cycle EURUSD,M5:  MAGIC 1 | UNIQUE 1
2021.10 . 20 02 : 02 : 10.841 2021.01 . 04 00 : 01 : 00   endless cycle EURUSD,M5: open # 8 buy 0.01 EURUSD at 1.22405 ok
2021.10 . 20 02 : 02 : 10.841 2021.01 . 04 00 : 01 : 00   endless cycle EURUSD,M5:  MAGIC 2 | UNIQUE 7
2021.10 . 20 02 : 02 : 10.841 2021.01 . 04 00 : 01 : 00   endless cycle EURUSD,M5:  MAGIC 1 | UNIQUE 6
2021.10 . 20 02 : 02 : 10.841 2021.01 . 04 00 : 01 : 00   endless cycle EURUSD,M5:  MAGIC 1 | UNIQUE 5
2021.10 . 20 02 : 02 : 10.841 2021.01 . 04 00 : 01 : 00   endless cycle EURUSD,M5:  MAGIC 1 | UNIQUE 4
2021.10 . 20 02 : 02 : 10.841 2021.01 . 04 00 : 01 : 00   endless cycle EURUSD,M5:  MAGIC 1 | UNIQUE 3
2021.10 . 20 02 : 02 : 10.841 2021.01 . 04 00 : 01 : 00   endless cycle EURUSD,M5:  MAGIC 1 | UNIQUE 2
2021.10 . 20 02 : 02 : 10.841 2021.01 . 04 00 : 01 : 00   endless cycle EURUSD,M5:  MAGIC 1 | UNIQUE 1
2021.10 . 20 02 : 02 : 10.841 2021.01 . 04 00 : 01 : 00   endless cycle EURUSD,M5: open # 7 buy 0.01 EURUSD at 1.22405 ok
2021.10 . 20 02 : 02 : 10.841 2021.01 . 04 00 : 01 : 00   endless cycle EURUSD,M5:  MAGIC 2 | UNIQUE 6
2021.10 . 20 02 : 02 : 10.841 2021.01 . 04 00 : 01 : 00   endless cycle EURUSD,M5:  MAGIC 1 | UNIQUE 5
2021.10 . 20 02 : 02 : 10.841 2021.01 . 04 00 : 01 : 00   endless cycle EURUSD,M5:  MAGIC 1 | UNIQUE 4
2021.10 . 20 02 : 02 : 10.841 2021.01 . 04 00 : 01 : 00   endless cycle EURUSD,M5:  MAGIC 1 | UNIQUE 3
2021.10 . 20 02 : 02 : 10.841 2021.01 . 04 00 : 01 : 00   endless cycle EURUSD,M5:  MAGIC 1 | UNIQUE 2
2021.10 . 20 02 : 02 : 10.841 2021.01 . 04 00 : 01 : 00   endless cycle EURUSD,M5:  MAGIC 1 | UNIQUE 1
2021.10 . 20 02 : 02 : 10.841 2021.01 . 04 00 : 01 : 00   endless cycle EURUSD,M5: open # 6 buy 0.01 EURUSD at 1.22405 ok
2021.10 . 20 02 : 02 : 10.841 2021.01 . 04 00 : 01 : 00   endless cycle EURUSD,M5:  MAGIC 2 | UNIQUE 5
2021.10 . 20 02 : 02 : 10.841 2021.01 . 04 00 : 01 : 00   endless cycle EURUSD,M5:  MAGIC 1 | UNIQUE 4
2021.10 . 20 02 : 02 : 10.841 2021.01 . 04 00 : 01 : 00   endless cycle EURUSD,M5:  MAGIC 1 | UNIQUE 3
2021.10 . 20 02 : 02 : 10.841 2021.01 . 04 00 : 01 : 00   endless cycle EURUSD,M5:  MAGIC 1 | UNIQUE 2
2021.10 . 20 02 : 02 : 10.841 2021.01 . 04 00 : 01 : 00   endless cycle EURUSD,M5:  MAGIC 1 | UNIQUE 1
2021.10 . 20 02 : 02 : 10.841 2021.01 . 04 00 : 01 : 00   endless cycle EURUSD,M5: open # 5 buy 0.01 EURUSD at 1.22405 ok
2021.10 . 20 02 : 02 : 10.841 2021.01 . 04 00 : 01 : 00   endless cycle EURUSD,M5:  MAGIC 2 | UNIQUE 4
2021.10 . 20 02 : 02 : 10.841 2021.01 . 04 00 : 01 : 00   endless cycle EURUSD,M5:  MAGIC 1 | UNIQUE 3
2021.10 . 20 02 : 02 : 10.841 2021.01 . 04 00 : 01 : 00   endless cycle EURUSD,M5:  MAGIC 1 | UNIQUE 2
2021.10 . 20 02 : 02 : 10.841 2021.01 . 04 00 : 01 : 00   endless cycle EURUSD,M5:  MAGIC 1 | UNIQUE 1
2021.10 . 20 02 : 02 : 10.841 2021.01 . 04 00 : 01 : 00   endless cycle EURUSD,M5: open # 4 buy 0.01 EURUSD at 1.22405 ok
2021.10 . 20 02 : 02 : 10.841 2021.01 . 04 00 : 01 : 00   endless cycle EURUSD,M5:  MAGIC 2 | UNIQUE 3
2021.10 . 20 02 : 02 : 10.841 2021.01 . 04 00 : 01 : 00   endless cycle EURUSD,M5:  MAGIC 1 | UNIQUE 2
2021.10 . 20 02 : 02 : 10.841 2021.01 . 04 00 : 01 : 00   endless cycle EURUSD,M5:  MAGIC 1 | UNIQUE 1
2021.10 . 20 02 : 02 : 10.841 2021.01 . 04 00 : 01 : 00   endless cycle EURUSD,M5: open # 3 buy 0.01 EURUSD at 1.22405 ok
2021.10 . 20 02 : 02 : 10.841 2021.01 . 04 00 : 01 : 00   endless cycle EURUSD,M5:  MAGIC 2 | UNIQUE 2
2021.10 . 20 02 : 02 : 10.841 2021.01 . 04 00 : 01 : 00   endless cycle EURUSD,M5:  MAGIC 1 | UNIQUE 1
2021.10 . 20 02 : 02 : 10.841 2021.01 . 04 00 : 01 : 00   endless cycle EURUSD,M5: open # 2 buy 0.01 EURUSD at 1.22405 ok
2021.10 . 20 02 : 02 : 10.841 2021.01 . 04 00 : 01 : 00   endless cycle EURUSD,M5:  MAGIC 2 | UNIQUE 1
2021.10 . 20 02 : 02 : 10.841 2021.01 . 04 00 : 01 : 00   endless cycle EURUSD,M5: open # 1 buy 0.01 EURUSD at 1.22405 ok
2021.10 . 20 02 : 02 : 10.827 2021.01 . 04 00 : 00 : 00   endless cycle test started

 
Vitaly Muzichenko # :

Bunu yapabilirsiniz, kod gerektiği gibi çağrılır, böylece ağırlığı sorun yaratmaz

Test için Al/Sat kullandım

Yarın bakacağım, şimdi araştırmaya gücüm yok.