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

 

Bu formatın bir sorusu var: böyle bir kod var

intP=3;

if(P==5){o zaman kütüphaneye girip bir şeyler hesaplamanız gerekiyor}

bu durumda P=3, yani. koşul yanlış, soru derleyici kitaplığa tırmanıp boşta kod mu olacak yoksa derleyici mevcut dosyadaki kodu mu okuyacak ? Bunu neden sorduğumu açıklayayım. Bakın, varsayalım ki bu formatın bir koşulunu yazarsanız

intY=4;

if(Y==4){bir şey yap} başka {başka bir şey yap}. Bu durumda aşağıdaki resmi elde ederiz Y == 4, birincisinin öncelikli operatör olduğu söylenebilir ancak else {do başka bir şey yapın} bloğunda yazılanlar da kontrol edilecektir - hesaplanır ( her zaman hesaplanır), ancak öncelik if(Y==4) ifadesi olduğu için yürütülmez. Başka bir deyişle, doğruluk sonucu ne olursa olsun, makine tüm hesaplamaları yapar, yani. ikincil ifadenin yürütülüp yürütülmediğinden bağımsız olarak hesaplamalara güç harcar. Büyük programlar ve kütüphaneler kullanıyorsanız ve derleyici her seferinde kütüphanelerin kodunu kazacaksa, bu sonunda böyle bir programın çalışmasını yavaşlatacaktır, bu durumda kütüphanelerin kullanımı ne kadar etkili olacak, kullanmaya değer olabilir robotun performansının yüksek olması için mql4'ün mümkün olan en kısa kodu? Bu konuda kimin fikri var?

 
Pavel Soin :

Merhaba.

Diyelim ki 2 gösterge var, birincisi 4 tampon, ikincisi 2 tane var. Bunları grafiğin üzerine atıyorum, data penceresini açıyorum (CTRL + D), listede 0'dan 5'e kadar 6 tampon var. Bu listedeki değeri MQL'de, örneğin 5 arabellekte okuyabilir miyim? iCustom üzerinden istenilen gösterge çok uygun değil. Bu listeden daha uygun. Yaptıklarını biliyorum ama nasıl?

Biri yardım edebilir mi?

 
Seric29 :

Bu formatın bir sorusu var: böyle bir kod var

intP=3;

if(P==5){o zaman kütüphaneye girip bir şeyler hesaplamanız gerekiyor}

bu durumda P=3, yani. koşul yanlış, soru derleyici kitaplığa tırmanıp boşta kod mu olacak yoksa derleyici mevcut dosyadaki kodu mu okuyacak ? Bunu neden sorduğumu açıklayayım. Bakın, varsayalım ki bu formatın bir koşulunu yazarsanız

intY=4;

if(Y==4){bir şey yap} başka {başka bir şey yap}. Bu durumda aşağıdaki resmi elde ederiz Y == 4, birincisinin öncelikli operatör olduğu söylenebilir ancak else {do başka bir şey yapın} bloğunda yazılanlar da kontrol edilecektir - hesaplanır ( her zaman hesaplanır), ancak öncelik if(Y==4) ifadesi olduğu için yürütülmez. Başka bir deyişle, doğruluk sonucu ne olursa olsun, makine tüm hesaplamaları yapar, yani. ikincil ifadenin yürütülüp yürütülmediğinden bağımsız olarak hesaplamalara güç harcar. Büyük programlar ve kütüphaneler kullanıyorsanız ve derleyici her seferinde kütüphanelerin kodunu kazacaksa, bu sonunda böyle bir programın çalışmasını yavaşlatacaktır, bu durumda kütüphanelerin kullanımı ne kadar etkili olacak, kullanmaya değer olabilir robotun performansının yüksek olması için mql4'ün mümkün olan en kısa kodu? Bu konuda kimin fikri var?

MetaEditor'da yerleşik olarak bulunan hata ayıklayıcı, bu tür soruları çok iyi yanıtlar. Benzer koşullara sahip bir komut dosyası yazın ve hata ayıklayıcıda adım adım çalıştırın. Gerçekte, programın ilgisi olmayan yerlere nasıl gitmediğini göreceksiniz. Üstelik böyle bir koşul

 int P = 3 , Y = 4 ;
if (P == 5 && Y == 4 )

P != 3 kontrol edildikten sonra hiçbir şey kontrol edilmeyecektir.

 
Tünaydın. Lütfen bana tüm grafik öğelerinin hafta sonu boyunca grafikte kalması için ne yapacağımı söyleyin?
 
Lomonosov1991 :
Tünaydın. Lütfen bana tüm grafik öğelerinin hafta sonu boyunca grafikte kalması için ne yapacağımı söyleyin?
onları silme
 
Alexey Viktorov :

MetaEditor'da yerleşik olarak bulunan hata ayıklayıcı, bu tür soruları çok iyi yanıtlar. Benzer koşullara sahip bir komut dosyası yazın ve hata ayıklayıcıda adım adım çalıştırın. Gerçekte, programın ilgisi olmayan yerlere nasıl gitmediğini göreceksiniz. Üstelik böyle bir koşul

P != 3 kontrol edildikten sonra hiçbir şey kontrol edilmeyecektir.

İşte size bir örnek

int pp=8;if(pp==8){pp=3;}else{pp=3400000000000000000000000000000;}

bu durumda pp 8'e eşittir ama derleyici çok sayıda yemin ediyor ki ben bir değişkene sokmak istiyorum ama bu sayıyı bir değişkene sokmayacağım çünkü pp=8 doğru, ama nedense derleyici başlıyor orada yazdıklarımı kazmak ve derleyicinin her şeyi kontrol ettiği ve düşündüğü sonucuna vardığımız gibi olup olmadığını kontrol edebiliriz, peki, bu elbette büyük bir hata, daha az ciddi bir hata yapabilirsiniz, ancak derleyici yine de bunun olup olmadığını kontrol edin. yani kütüphanelere ne olacağı da iyi bir soru, tabii ki oraya böyle şeyler yazmayacağım, ama mesele şu ki derleyici oraya girecek ve ne yapması önerildiğini kontrol etmeye başlayacak, ama olmayacak yap, ama sayılacak. Sonra, MQL4 hata ayıklayıcı ile çalışmayı denedim, buradaki talimatları okuyun https://www.metatrader5.com/ru/metaeditor/help/development/debug , "geçmişi kontrol et" sekmesi bile etkin değil , talimatlarda aktif olması gerekmesine rağmen, gerçek veriler üzerinde bir seçenek seçmeye çalıştım, ancak bu durumda değişkenlerin değerleri görüntülenmiyor, her şey boş, hiçbir şey yazmıyor, sadece nasıl olduğu ilginç dır-dir.

 
Seric29 :

İşte size bir örnek

int pp=8;if(pp==8){pp=3;}else{pp=3400000000000000000000000000000;}

bu durumda pp 8'e eşittir ama derleyici çok sayıda yemin ediyor ki ben bir değişkene sokmak istiyorum ama bu sayıyı bir değişkene sokmayacağım çünkü pp=8 doğru, ama nedense derleyici başlıyor orada yazdıklarımı kazmak ve derleyicinin her şeyi kontrol ettiği ve düşündüğü sonucuna vardığımız gibi olup olmadığını kontrol edebiliriz, peki, bu elbette büyük bir hata, daha az ciddi bir hata yapabilirsiniz, ancak derleyici yine de bunun olup olmadığını kontrol edin. yani kütüphanelere ne olacağı da iyi bir soru, tabii ki oraya böyle şeyler yazmayacağım, ama mesele şu ki derleyici oraya girecek ve ne yapması önerildiğini kontrol etmeye başlayacak, ama olmayacak yap, ama sayılacak. Sonra, MQL4 hata ayıklayıcı ile çalışmayı denedim, buradaki talimatları okuyun https://www.metatrader5.com/ru/metaeditor/help/development/debug , "geçmişi kontrol et" sekmesi bile etkin değil , talimatlarda aktif olması gerekmesine rağmen, o zaman gerçek veriler üzerinde bir seçenek seçmeye çalıştım, ancak bu durumda değişkenlerin değerleri görüntülenmiyor, her şey boş, hiçbir şey yazmıyor, sadece nasıl olduğu ilginç dır-dir.

Derleyici, derleme zamanında geçerli değerleri kontrol eder, ancak program yürütme zamanında değil. Değişken türlerini, bu değişkenlerin değerlerine hangi aralıklarda izin verildiğini okuyun. Derleyici bu tür kontrolleri yapmadıysa, kod yürütme sırasında değerler kaybolabilir ve buna bağlı olarak hatalı hesaplama sonuçları elde edilir. Dolayısıyla bu davranış programcı için iyidir. Derleyici her zaman olası bir hassasiyet kaybı konusunda uyaracaktır.

Ve MT4 hata ayıklayıcısı geçmiş veriler üzerinde çalışmaz. Bu, MT5 test cihazının ayrıcalığıdır. Ama zaten geçmişte betiklerde hata ayıklamanın bir anlamı yok ve önerdiğim şey MT4 test cihazında gözlemlenebilir. Kodun başına bir kesme noktası koymanız ve ardından adım adım yürütme sırasını ve değişkenlerin değerlerini gözlemlemeniz yeterlidir.

 
Geri derlenmiş kod parçalarını tartışmanın normal olduğunu düşünüyor musunuz?
Sadece değişkenler yeniden adlandırılsaydı. Ve bu oldukça küstahça...
 
Artyom Trishkin :
Geri derlenmiş kod parçalarını tartışmanın normal olduğunu düşünüyor musunuz?

Keşke değişkenler yeniden adlandırılsaydı. Ve bu oldukça küstahça...

Bu Uzman Danışman, MQL4 formatında çevrimiçi olarak mevcuttur. Üçlü Dansçılar. sadece kendim yeniden yapıyorum

 
Lomonosov1991 :

Bu danışman çevrimiçi. Üçlü Dansçılar. sadece kendim yeniden yapıyorum

Ne olmuş? Çalıntı mal alıp sattıkları yerler var.
Bu forum o kategoride değil.
Expert Advisor bir zamanlar biri tarafından hacklendi (yazardan çalındı) ve şimdi bunu kendiniz yapıyorsunuz. Lütfen bu kaynak üzerinde yapmayın. Biz burada ahlaklıyız.