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

 
Tamam, uzmanlar, o zaman neden burada sihir artışının neden 2'de durduğunu ve benzersizin durmadığını açıklayın. Kaynak kodda 10 sipariş açılır ve her birine benzersiz artışla benzersiz bir büyü atanmalıdır, benzersizlikleri iç içe döngülerde (!=) karşılaştırılarak kontrol edilir: bir sihirli artışta, sihirleri karşılaştırarak bir geçiş yapılır. tüm siparişler, eşleşme yoksa, bu DEĞİL eşleşmelerinin sayısına eşit olacaktır ve sipariş sayısına eşit veya daha fazlaysa, sihir benzersizdir ve siparişe atanır.

Bilmiyorum belki karışık anlatıyorum ama koda bakınca bunu anlamak daha kolay geliyor bana.
Dosyalar:
 
pribludilsa # :
Mesele şu ki, handikap uygun çünkü pozisyon sayısını vererek herhangi bir diziyi doldurabilir. 0 beslenirse benim için her şey bozulur, çünkü ArrayResize konum sayısına bağlıdır. Bu nedenle, pozisyon sayısı 0'dan büyükse ek bir şartım var, o zaman bu döngü. Ben de bununla sürekli kafam karışıyor, şimdi her şeyi tekrar kontrol ettim. Doğru tavsiyede bulunurlar, çünkü aksi takdirde ön kısım, ön kısmın gerekli olduğu dizinin sıfır elemanını doldurmaz.

Evet, bu yüzden sürekli sorunlarım var. Umarım sunulan netlik, zaman zaman hataları düzeltmek için harcanan saat sayısını azaltacaktır.

 
Nerd Trader # :
Tamam, uzmanlar, o zaman neden burada sihir artışının neden 2'de durduğunu ve benzersizin durmadığını açıklayın. Kaynak kodda 10 sipariş açılır ve her birine benzersiz artışla benzersiz bir büyü atanmalıdır, benzersizlikleri iç içe döngülerde (!=) karşılaştırılarak kontrol edilir: bir sihirli artışta, sihirleri karşılaştırarak bir geçiş yapılır. tüm siparişler, eşleşme yoksa, bu DEĞİL eşleşmelerinin sayısına eşit olacaktır ve siparişlerin sayısına eşitse, sihir benzersizdir ve siparişe atanır.

Bilmiyorum belki karışık anlatıyorum ama koda bakınca bunu anlamak daha kolay geliyor bana.

Farklı büyülerle 10 emir oluşturmak için döngüye ihtiyacınız varsa, bunu yapmalısınız..

     for ( int i = 0 ; i < 10 ; i ++)
    { 
     int order_send = OrderSend ( Symbol (), OP_BUY, 0.01 , Bid, 10 ,
     0 , 0 , "" , i, 0 , CLR_NONE);
     if (order_send == - 1 ) ResetLastError ();
    }

Bu durumda, sadece döngü yöneticisi değil, aynı zamanda sipariş için sihirbaz rolünü de oynuyorum.


Örneğinizde, bir tür bilmece yarattığınız birçok hata var .. Çok az insan, sebebin ne olduğunu tam olarak öğrenecek ..

En azından sipariş yineleme döngüsü doğru değil.. Ve sihirli değişken yereldir ve sürekli sıfırlanır.. (birikmez)

 
Nikolay Ivanov # :

Farklı büyülerle 10 emir oluşturmak için döngüye ihtiyacınız varsa, bunu yapmalısınız..

Bu durumda, sadece döngü yöneticisi rolünü değil, aynı zamanda siparişin sihrini de oynuyorum.


Örneğinizde, bir tür bilmece yarattığınız birçok hata var .. Çok az insan, sebebin ne olduğunu tam olarak öğrenecek ..

En azından sipariş yineleme döngüsü doğru değil.. Ve sihirli değişken yereldir ve sürekli sıfırlanır.. (birikmez)

Bu bir test kodudur, böyle bir döngüde EA'da herhangi bir sipariş oluşturulmaz, bunun için teste sürüklemeye gerek yok mantığı vardır. Sipariş döngüsü neden doğru değil? büyü sıfırlanmalı, birikmesi için bir neden yok. Ve anlaşılması gereken şey, içinde birkaç satır kod bulunan sadece iki iç içe döngü.

 
Nerd Trader # :

Evet, bu yüzden sürekli sorunlarım var. Umarım sunulan netlik, hataları düzeltmek için harcanan saat sayısını önemli ölçüde azaltacaktır.

Ben de çözemedim. Buradaki ironi, burada diğer kullanıcıların mesajlarıyla aynı anda anlamaya başladım. Sadece doğru kopyala-yapıştır yaptım, sonra anladım ve yanlış yazdım çünkü sadece döngü girişini kontrol ettim ama çıktıyı unuttum. Kontrol değerlerini zorla girerek kodu bir baskı ile kontrol edin.
 
Nerd Trader # :

Bu bir test kodudur, böyle bir döngüde EA'da herhangi bir sipariş oluşturulmaz, bunun teste sürüklenmemesi gereken bir mantığı vardır. Sipariş döngüsü neden doğru değil? büyü sıfırlanmalı, birikmesi için bir neden yok.

hayır -1

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

Sihirle amaçlanan buysa, mantıkta (genel tasarımda) bir hata olduğu ortaya çıkıyor, onu bulmak için bulmacayı çözmeniz gerekiyor ..

 
Nikolay Ivanov # :

hayır -1

Sihirle amaçlanan buysa, mantıkta (genel tasarımda) bir hata olduğu ortaya çıkıyor, onu bulmak için bulmacayı çözmeniz gerekiyor ..

Bu mu? Ama -1 orada hiçbir şeyi çözmez. Neden hata? Büyü, benzersiz (büyü ve düzen büyüleri arasındaki uyumsuzluk sayısı) sipariş sayısına eşit veya daha fazla olduğunda atanır. büyü sıfırlanmalıdır, aksi takdirde 5 ve 6 sihri ile birkaç emri kapatırsanız, yenileri son sıranın büyüsünden daha büyük bir sihirle, yani 11-12 vb. Ve böylece bir sipariş oluştururken sıfırlama ile, sıfırdan bir karşılaştırma ve yineleme meydana gelir, bu da kapalı büyülerle yeni siparişler verir, yani 5 ve 6...

 
pribludilsa # :
Ben de çözemedim. Buradaki ironi, burada diğer kullanıcıların mesajlarıyla aynı anda anlamaya başladım. Sadece doğru kopyala-yapıştır yaptım, sonra anladım ve yanlış yazdım çünkü sadece döngü girişini kontrol ettim ama çıktıyı unuttum. Kontrol değerlerini zorla girerek kodu bir baskı ile kontrol edin.
mql4'te normal bir hata ayıklayıcı olmaması çok can sıkıcı. Yukarıdaki kaynaktaki gerçek verilerde bile hata ayıklayıcı döngüye girmez. Bir parmak iziyle idare etmem gerekiyor, ama bu ciddi değil.
 

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=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..

 
pribludilsa # :
Doğru, teşekkürler. Ama görünüşe göre, bir çeşit koltuk değneği elbette . Ancak, tüm mql'ler gibi

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.