Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 495

 

İlk durumda, anladım - parantez içinde iki karşılaştırma yaptım ve yemin etmiyorum - gerçekten mantıklı bir hata var mıydı - yani. karşılaştırmanın sonuçları "veya" ile değiştirilebilir mi?

Geriye ikinci ifadeyle açık bir soru kalıyor - orada yanlış olan ne - herhangi bir fikir var mı?

 
-Aleks- :

İlk durumda, anladım - parantez içinde iki karşılaştırma yaptım ve yemin etmiyorum - gerçekten mantıklı bir hata var mıydı - yani. karşılaştırmanın sonuçları "veya" ile değiştirilebilir mi?

Geriye ikinci ifadeyle açık bir soru kalıyor - orada yanlış olan ne - herhangi bir fikir var mı?

Unutulmamalıdır ki yeni mql4'teki durum denetimi tam olarak yapılmamıştır. Yani, durumda

if(Low[X]>PriceBuy && High[X]>PriceBuy ||
               Low[X]<PriceBuy && High[X]<PriceBuy)

Düşük[x], PriceBuy'dan büyük değilse, kontrol daha fazla yapılmayacaktır. Bu, hatanın açıklamasında rapor edilir. Buna göre, ilk çift parantez içine alınmışsa, bu çift karşılanmıyorsa, ikinci koşul çifti kontrol edilecektir.

İkinci soru.

for( calc_day;calc_day>0; calc_day--)

calc_day nedir??? Belki sıfırdan daha az? Derleyici mantıkta ne olduğunu bilmiyor... Yani olası bir verimsiz döngü hakkında uyarıda bulunuyor.

 
Alexey Viktorov :

Unutulmamalıdır ki yeni mql4'teki durum denetimi tam olarak yapılmamıştır. Yani, durumda

if(Low[X]>PriceBuy && High[X]>PriceBuy ||
               Low[X]<PriceBuy && High[X]<PriceBuy)

Düşük[x], PriceBuy'dan büyük değilse, kontrol daha fazla yapılmayacaktır. Bu, hatanın açıklamasında rapor edilir. Buna göre, ilk çift parantez içine alınmışsa, bu çift karşılanmıyorsa, ikinci koşul çifti kontrol edilecektir.

Cevap için teşekkürler!

Şaşırdım - görsel olarak mantık her zaman doğru çalıştığı için, hmmm ...


Alexey Viktorov :

İkinci soru.

for( calc_day;calc_day>0; calc_day--)

calc_day nedir??? Belki sıfırdan daha az? Derleyici mantıkta ne olduğunu bilmiyor... Yani olası bir verimsiz döngü hakkında uyarıda bulunuyor.

calc_day sayısı her zaman 0'dan büyüktür, aksi takdirde kod çağrılmaz.
 
-Aleks- :

Cevap için teşekkürler!

Şaşırdım - görsel olarak mantık her zaman doğru çalıştığı için, hmmm ...

6** yapıdan önce böyleydi, tüm koşullar zinciri kontrol edildi ve her şey çalıştı, ama şimdi her şey değişti. Evet ve bu durumda eski yapılarda, durumun belirsizliği. Nasıl amaçlandı?

if( (Low[X]>PriceBuy && High[X]>PriceBuy) || (Low[X]<PriceBuy && High[X]<PriceBuy) )

ya da öyle mi?

if(Low[X]>PriceBuy && ( High[X]>PriceBuy) || (Low[X]<PriceBuy ) && High[X]<PriceBuy)

İnsan beyni bunu çözebilir, ancak bir derleyici ne yapmalı? Beyni yok...

-Aleks- :

calc_day sayısı her zaman 0'dan büyüktür, aksi takdirde kod çağrılmaz.

Bunu derleyiciye söyle ...

 
Alexey Viktorov :

6** yapıdan önce böyleydi, tüm koşullar zinciri kontrol edildi ve her şey çalıştı, ama şimdi her şey değişti. Evet ve bu durumda eski yapılarda, durumun belirsizliği. Nasıl amaçlandı?

if( (Low[X]>PriceBuy && High[X]>PriceBuy) || (Low[X]<PriceBuy && High[X]<PriceBuy) )

ya da öyle mi?

if(Low[X]>PriceBuy && ( High[X]>PriceBuy) || (Low[X]<PriceBuy ) && High[X]<PriceBuy)

İnsan beyni bunu çözebilir, ancak bir derleyici ne yapmalı? Beyni yok...


Bunu derleyiciye söyle ...

İnandırıcı bir şekilde - Daha uyanık olacağım.

derleyiciye nasıl söylenir? yaz ama anla

if ( calc_day<0 )   calc_day= calc_day*(-1);

 
Alexey Viktorov :

6** yapıdan önce böyleydi, tüm koşullar zinciri kontrol edildi ve her şey çalıştı, ama şimdi her şey değişti. Evet ve bu durumda eski yapılarda, durumun belirsizliği. Nasıl amaçlandı?

if( (Low[X]>PriceBuy && High[X]>PriceBuy) || (Low[X]<PriceBuy && High[X]<PriceBuy) )

ya da öyle mi?

if(Low[X]>PriceBuy && ( High[X]>PriceBuy) || (Low[X]<PriceBuy ) && High[X]<PriceBuy)

İnsan beyni bunu çözebilir, ama bir derleyici ne yapmalı? Beyni yok...


Bunu derleyiciye söyle ...

olası hata için operatör önceliğini kontrol edin; önceliği netleştirmek için parantez kullanmak bir hata değildir. Bu bir uyarıdır. Eski kodlarda bulundu.

Derleyiciden çok kullanıcı için ekledik. Derleyici, işlemlerin önceliğine göre yönlendirilir. Orada her şey açık. && öğesinin önceliği || öğesinden daha yüksektir, bu nedenle parantezleri şu şekilde doğru bir şekilde yerleştirin:

if( (Düşük[X]>FiyatAl && Yüksek[X]>FiyatAl) || (Düşük[X]<FiyatAl && Yüksek[X]<Fiyat) )

upd: Bu durumda, hem MT4 hem de MT5 aynı önceliğe sahiptir.

 
-Aleks- :

İnandırıcı bir şekilde - Daha uyanık olacağım.

derleyiciye nasıl söylenir? yaz ama anla

if ( calc_day<0 )   calc_day= calc_day*(-1);

 for ( calc_day = 365 ; calc_day > 0 ; calc_day --)
O zaman dene
 
Alexey Kozitsyn :

olası hata için operatör önceliğini kontrol edin; önceliği açıklığa kavuşturmak için parantez kullanmak bir hata değildir. Bu bir uyarıdır. Eski kodlarda bulundu.

Derleyiciden çok kullanıcı için ekledik. Derleyici, işlemlerin önceliğine göre yönlendirilir. Orada her şey açık. && öğesinin önceliği || öğesinden daha yüksektir, bu nedenle parantezleri şu şekilde doğru bir şekilde yerleştirin:

if( (Düşük[X]>FiyatAl && Yüksek[X]>FiyatAl) || (Düşük[X]<FiyatAl && Yüksek[X]<Fiyat) )

upd: Bu durumda, öncelik hem MT4 hem de MT5 için aynıdır.

Eh, aslında, evet, uyarı bir hata değildir. Ancak eğer( Low[X]>PriceBuy && High[X]>PriceBuy || Low[X]<PriceBuy && High[X]<PriceBuy ) çalışırsa ilk değişken nasıl olacak? ? Yoksa birkaç parantez koymak için elleriniz kırılacak mı?

 
-Aleks- :

İnandırıcı bir şekilde - Daha uyanık olacağım.

derleyiciye nasıl söylenir? yaz ama anla

if ( calc_day<0 )   calc_day= calc_day*(-1);

 for ( int i=calc_day; i> 0 ; i--) {}
 
Alexey Viktorov :

Eh, özünde, evet, bir uyarı bir hata değildir. Ama eğer( Low[X]>PriceBuy && High[X]>PriceBuy || Low[X]<PriceBuy && High[X]<PriceBuy ) çalışırsa ilk değişken nasıl olacak? ? Yoksa birkaç parantez koymak için elleriniz kırılacak mı?

Yukarıda yazdığım şekilde çalışacaktır.

Ve derleyici, bariz olmayan olası hataları önlemek için kullanıcıyı tembel olmaması ve parantez içine almaması konusunda uyarır.