Hatalar, hatalar, sorular - sayfa 3131

 
x572intraday # :

Aynı anda yalnızca &= için yanıt verebilirim:

MQL5 Referansı / Dil Temelleri / İşlemler ve İfadeler / Atama İşlemleri:

birikimli değişken y ile benzer şekilde:


Ama bu benim &= ile ilk deneyimim, bu yüzden yanılıyor olabilirim.

Numara. İlk olarak (planlandığı gibi), tüm mantıksal koşullar, for içindeki birikimli h_plus içinde toplanır ve elde edilen bool-sum, dahili for ile hiçbir ilgisi olmayan if ile değiştirilir.
Ancak daha doğru olur
h_plus&=high[i]>high[i+increment];
a
h_plus = h_plus && high[i]>high[i+increment];
 
Alexey Viktorov # :

Sizin durumunuzda, her iki koşulun da karşılanması gerektiğinden durum böyle değil. Ama bunu koyarsan

o zaman evet. "a" koşulu karşılanırsa, ikinci koşul kontrol edilmeyecektir. Bunun için yıllarca savaştılar ve şimdi geçen yüzyıla dönmeyi teklif ediyorsunuz ...

Gerçi ... bu ifademde haklı değilim. Görünüşe göre burada yazılanları tam olarak anlamadım.

x572gün içi # :

Buna böcek demeye cesaret edemem. Bu nedenle, if ifadesinin bir özelliğini fark ettiğimi söyleyeceğim. Açıkça görüyorum, bu diğer YaPam için geçerli olabilir.

Eğer a doğruysa, kontrol Array[over_index]'e atlayacaktır ve o zaman terminal, tamamen adil olan ' array out of range ' kısmına çılgınca bombalamaya başlar. a'nın yanlış olduğu ortaya çıkarsa, Array[over_index] doğruluk koşulunu kontrol etmeye gelmez, bu da dizinin gereksiz olduğu anlamına gelir, if daha fazla atlanır ve kodlayıcı var olmayan bir dizine sahip bir dizinin olduğunu bilemez. programında yürüyor ... daha doğrusu var ama gereksiz.

Belki de bu, ' array out of range ' kontrolünün if'de en sona kadar gerçekleşmesi ve aynı mesajın verilmesi için düzeltilmesi gerekiyor mu? Yoksa operatörün hızını büyük ölçüde azaltacak mı?

&& koşulu ve ilk koşul sağlanmasa bile , ikinci koşul kontrol edilmeyecektir. Birini yanlış yönlendirdiğim için çok üzgünüm...

 
x572intraday # :

Zaten o anın sıcağında hem kırılmayı hem de geri dönmeyi denedim, ancak daha da kötüye gitti. Kodu daha da basitleştirmeye çalışacağım ve break ile yeniden düşüneceğim ...

 for ( int i=start; i<rates_total- n && ! IsStopped (); i++)
{
   for ( int increment= 1 , bool h_plus=true ; h_plus && increment<=n ; increment++)
     h_plus = high[i]>high[i+increment]; // можно не накапливать, вылетим из цикла на первом false

   if (h_plus) {...}
   ...
}

İşte böyle bir şey.

 

Bir grafiği zaman çizelgesi boyunca fare hareketiyle ölçeklerken, fare hareketinin yönüne bağlı olarak grafik sola veya sağa kaçar, bu nedenle kullanıcının bakışının odağında olması gereken her şey genellikle grafiğin dışında kaybolur. . Bu çok rahatsız edici, o zamandan beri doğru yeri aramanız gerekiyor ve bu, MT'yi tanıdığımdan beri gözlemlendi.

Büyüteç simgesine tıklamanın grafiği ortada ölçekleyeceğini varsaymak mantıklıydı, ancak hayır, davranış fare yakınlaştırma durumundakiyle aynıdır - grafik sola (sıkıştırma) veya sağa hareket eder (genişleme).

Sevgili geliştiriciler! Ölçeklendirme yaparken grafiğin davranışını değiştirmenizi rica ederiz, grafiğin ortasını ortada bırakmanız gerekir.

Grafikle çalışırken bu rahatsızlığı tartıştığım herkes benimle aynı fikirde, bu yüzden bu konuda objektif olma şansım yüksek.

14 yıl alışmaya çalıştım, yapamadım.

 
JRandomTrader # :
 for ( int i=start; i<rates_total-n && ! IsStopped (); i++)
{
   for ( int increment= 1 , bool h_plus= true ; h_plus && increment<=n ; increment++)
     h_plus = high[i]>high[i+increment]; // можно не накапливать, вылетим из цикла на первом false

   if (h_plus) {...}
   ...
}

İşte böyle bir şey.

Taze fikir, deneyeceğim.

Önceki sürüme gelince:

 for ( int i=start; i<rates_total- 3 && ! IsStopped (); i++)
{
   bool h_plus= true ; //false?
   for ( int increment= 1 ; increment<=n; increment++)
     {
      h_plus&=high[i]>high[i+increment];
       if (!h_plus) break ;
     }
   if (h_plus) {...}
   ...
}

denemeden bile belli ki

 if (!h_plus) break ;

toplamdan sonra gelir, bu da terminalin önce önceki satırı göreceği ve fazla indeksli bir dizi olduğunu zaten anlayacağı ve aynı mesajı ' array out of range ' döndüreceği anlamına gelir. Bu ikinci. Ve ilk şey, genellikle !h_plus için değil, ArraySize(high)<=i+increment için kontrol etmeniz ve indeks aşılırsa döngünün bitmesi gerektiğidir. Bunların hepsini dün denedim, ancak bazı nüanslarda ayrıldım. Evet, artık bir mesaj yoktu, ancak gösterge bahçeyi çitle çevirmeye başladı.

 
x572intraday # :

Önceki sürüme gelince:

denemeden bile belli ki

toplamdan sonra gelir, bu da terminalin önce önceki satırı göreceği ve fazla indeksli bir dizi olduğunu zaten anlayacağı ve aynı mesajı ' array out of range ' döndüreceği anlamına gelir. Bu ikinci. Ve ilk şey, genellikle !h_plus için değil, ArraySize(high)<=i+increment için kontrol etmeniz ve indeks aşılırsa döngünün bitmesi gerektiğidir. Bunların hepsini dün denedim, ancak bazı nüanslarda ayrıldım. Evet, artık bir mesaj yoktu, ancak gösterge bahçeyi çitle çevirmeye başladı.

Yani sorun burada

i<rates_total- 3
boşuna yazmadım
i<rates_total-n
Ve döngüden erken çıkmak, tam olarak if () hesaplamasını simüle etmektir.
 
x572intraday # :

Buna böcek demeye cesaret edemem. Bu nedenle, if ifadesinin bir özelliğini fark ettiğimi söyleyeceğim. Açıkça görüyorum, bu diğer YaPam için geçerli olabilir.

Eğer a doğruysa, kontrol Array[over_index]'e atlayacaktır ve o zaman terminal, tamamen adil olan ' array out of range ' kısmına çılgınca bombalamaya başlar. a'nın yanlış olduğu ortaya çıkarsa, Array[over_index] doğruluk koşulunu kontrol etmeye gelmez, bu da dizinin gereksiz olduğu anlamına gelir, if daha fazla atlanır ve kodlayıcı var olmayan bir dizine sahip bir dizinin olduğunu bilemez. programında yürüyor ... daha doğrusu var ama gereksiz.

Belki de bu, ' array out of range ' kontrolünün if'de en sona kadar gerçekleşmesi ve aynı mesajın verilmesi için düzeltilmesi gerekiyor mu? Yoksa operatörün hızını büyük ölçüde azaltacak mı?


a değişkeni false ise, kontrol daha fazla aktarılır ve if'den sonraki diziyi ve parantez içindeki kodu etkilemez, çünkü siz

 if (a && Array[over_index]>val) {...}

kontrol, yalnızca sol (a) doğruysa koşulun sağ tarafına aktarılacaktır.

örneğin yaparsan

 if (check(over_index) && Array[over_index]>val) {...}

kontrol işlevinin dizini Dizinin sınırları içinde oluşup oluşmadığını kontrol ettiği yerde, o zaman hiçbir zaman "aralık dışı dizi" olmaz   olmaz. böylece dizi indeksini kontrol edebilir ve eğer birine erişebilirsiniz. ancak kontrolün && operatörü ile if'nin ikinci kısmına aktarılması için, ilki yanlış ise, mevcut programlama dillerinin hiçbirinde bu pek mümkün değildir...

 

Bir sorun var, rastgele ve ara sıra ortaya çıkıyor.

Test cihazında birkaç para birimiyle çalışırken görünür.

Her döngüde, semboller için güncel fiyatları talep ediyorum. Ve sanki bir nedenden dolayı, herhangi bir nedenle test cihazı belirli bir sembol için alıntı almıyorsa, daha önce başka bir sembolden alınan alıntılar kullanılır.

Fiyat belli bir seviyenin üzerine çıkarsa pozisyon açmalıyım. Ancak başka bir karakterden yanlış veriler kullanılarak bir açılma meydana gelir.

EURCAD sembolü, eğer fiyat 1.45117'den yüksekse onu açıyoruz. 1.74425>1.45117? evet daha fazla, ama bu başka bir sembolün fiyatı.

500 siparişten 7'sinin hatalı olduğu tespit edildi.

 
Yury Lemeshev # :

Bir sorun var, rastgele ve ara sıra ortaya çıkıyor.

Test cihazında birkaç para birimiyle çalışırken görünür.

Her döngüde, semboller için güncel fiyatları talep ediyorum. Ve sanki bir nedenden dolayı, herhangi bir nedenle test cihazı belirli bir sembol için alıntı almıyorsa, daha önce başka bir sembolden alınan alıntılar kullanılır.

Fiyat belirli bir değerin üzerine çıkarsa bir pozisyon açmalıyım. Ama başka bir karakterden yanlış veri kullanıyorum, açılma oluyor.

EURCAD sembolü, eğer fiyat 1.45117'den yüksekse açıyoruz. 1.74425>1.45117? evet daha fazla, ama bu başka bir sembolün fiyatı.

500 siparişten 7'sinin hatalı olduğu tespit edildi.

Kodda sorunlar var, ancak telepatlar zaten kutlama yapıyor ve aşırılıktan çıktıklarında, hatanın 123652 satırında olduğunu söyleyecekler.

 
Alexey Viktorov # :

Kodda sorunlar var, ancak telepatlar zaten kutlama yapıyor ve aşırılıktan çıktıklarında, hatanın 123652 satırında olduğunu söyleyecekler.

Kodda hata yok, hatayı düzeltmek için kod yeniden yazıldı ve hata düzenli olarak görünmüyor, tamamen kaotik