Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
Normal işlevleri dağıtmak elbette bir meseledir
onlar. (int i=0; i<ArraiSize(max); i++) için
burada ArraySize(maks); açılır ve orada bu dizinin boyutu için bir adres gibi bir şey ortaya çıkar (diziye bakarsanız, boyutu değişkendedir ve burada bu değişken için "bellekteki adres" ikamesi gerçekleşir) yani. genel olarak, onu bir değişkene dönüştürmenin bir anlamı yoktur.
(int i=0; i<ArraiSize(max); i++) için
ve
için (int i=0; i<boyut; i++)
Bu durumda, ArraySize(max) ve size, dizinin boyutunu belirlemek için aynı zamanlamalara sahiptir.
yanlış ifade
test edildi: 1000 kez ölçüldü, her dizi için 3 dizi ve 3 iç içe yineleme döngüsü, 2 seçenek: 1. ve 2 .
sonuç stabildir (3 kez test edilmiştir):
2020.11.02 21:17:25.952 HızTst (EURUSD,H1) ArraySize: döngüler = 1000 saniye=114.5013
2020.11.02 21:17:40.713 HızTst (EURUSD,H1) cnt: döngüler = 1000 saniye=99.7722
Bu döngü örneğinde, muhtemelen zamanlamalar konusunda aynı fikirde değilim.
Aksine, sonucu boyut değişkenine almak ve onu koşulda kullanmak tavsiye edilir.
ArraySize(max) için her yinelemedeki döngü, gereksiz açma işlemini gerçekleştirerek döngüyü yavaşlatacaktır.
ArraySize(max) işlevi, bir uzunluk kaydıyla diziden bir hücre çıkaran ve onu, dizinin uzunluğunun kaydedildiği hücrenin adresini döndüren genişletilir.
ve herhangi bir değişken nedir, bizim durumumuzda boyut, dizinin uzunluğunun yazıldığı hücrenin adresidir.
onlar. çıktı aynıdır ve döngü sırasında dizinin boyutunu değiştirsek bile, ilk veya ikinci durumda hücre başına adres değişmez.
Dan beri mas değerimiz her zaman statiktir (bu bir bağlantı değildir), o zaman burada başka bir mantık olamaz)))
ArraySize (max) işlevinin kendisi, burada dizinin uzunluğundan sorumlu olan max dizisinin bellek bölümünün kullanılması gerektiğini ve bunun derleme aşamasında yapıldığını söylüyor - işlev dağıtımı
yanlış ifade
test edildi: 1000 kez ölçüldü, her dizi için 3 dizi ve 3 iç içe yineleme döngüsü, 2 seçenek: 1. ve 2 .
sonuç stabildir (3 kez test edilmiştir):
2020.11.02 21:17:25.952 HızTst (EURUSD,H1) ArraySize: döngüler = 1000 saniye=114.5013
2020.11.02 21:17:40.713 HızTst (EURUSD,H1) cnt: döngüler = 1000 saniye=99.7722
sonra montajla ilgili bazı sorunlar ....
sonra montajla ilgili bazı sorunlar ....
Çıktının aynı olduğu açıktır.
Sadece hafızanın bu bölümüne farklı şekillerde erişilecek ve asıl mesele buydu.
Değişken zaten bir değer içerdiğinden, bir değişkene erişmek, bir işleve erişmekten daha hızlıdır.
Ve fonksiyonun yine de bu değeri alması ve geri döndürmesi gerekiyor, yani bir hafıza hücresine, ekstra bir talimata bakın.
Igor örneği, bahsettiğim şeyin sadece bir teyidi.
sonra montajla ilgili bazı sorunlar ....
Yalan
ArraySize() çağrısı her yinelemede gerçekleşir
dizinin boyutu her seferinde kontrol edilmese bile, prosedür yine de çağrılır ve en azından dizinin boyutunun değerini depolayan değişkenin kontrolü
işte yazdığım şey hakkında bir test, bir döngüde dizinin boyutunu değiştiriyoruz, döngü beklendiği gibi kesintiye uğradı, yani. döngünün her yinelemesinde, döngü gövdesinin yürütülmesinden sonra dizinin boyutu belirlendi:
Yalan
ArraySize() çağrısı her yinelemede gerçekleşir
dizinin boyutu her seferinde kontrol edilmese bile, prosedür yine de çağrılır ve en azından dizinin boyutunun değerini depolayan değişkenin kontrolü
işte yazdığım şey hakkında bir test, bir döngüde dizinin boyutunu değiştiriyoruz, döngü beklendiği gibi kesintiye uğradı, yani. döngünün her yinelemesinde, döngü gövdesinin yürütülmesinden sonra dizinin boyutu belirlendi:
Bize testimizin tam kodunu verin
Çıktının aynı olduğu açıktır.
Sadece hafızanın bu bölümüne farklı şekillerde erişilecek ve asıl mesele buydu.
Igor örneği, bahsettiğim şeyin sadece bir teyidi.
Ve testi kendin yaptın, 11000000000000000'de böyle bir şeyim yok
ArraySize(max) işlevi, bir uzunluk kaydıyla diziden bir hücre çıkaran ve onu, dizinin uzunluğunun kaydedildiği hücrenin adresini döndüren genişletilir.
ve herhangi bir değişken nedir, bizim durumumuzda boyut, dizinin uzunluğunun yazıldığı hücrenin adresidir.
onlar. çıktı aynıdır ve döngü sırasında dizinin boyutunu bir şekilde değiştirsek bile, hücre başına adres bundan ne birinci ne de ikinci durumda değişmez.
Dan beri mas değerimiz her zaman statiktir (bu bir bağlantı değildir), o zaman burada başka bir mantık olamaz)))
ArraySize (max) işlevinin kendisi, burada dizinin uzunluğundan sorumlu olan max dizisinin bellek bölümünün kullanılması gerektiğini ve bunun derleme aşamasında yapıldığını söylüyor - işlev dağıtımı
Bu karar aceleye getirilmiş gibi görünüyor. ArraySize işlevinin cephesinin arkasında tam olarak ne olduğu bilinmiyor, değil mi? MQL'de bu bir kara kutudur. for (int i=0; i<ArraiSize(max); i++) birden çok ifadenin yürütülmesine neden olabilir. Örneğin, bir işlev girdi parametrelerini doğrulayabilir . Kaydet - verileri yığından itin. Kayıtları kaydedin. Kayıtları geri yükle. İşlev çağrısı - arayın, ardından geri dönün. Demek istediğim, arka planda birçok şey olabilir ve biz bunu göremeyiz. Bu nedenle for (int i=0; i<size; i++) kullanmak ve beklediğimiz şeyi yapması için derleyiciye güvenmemek daha güvenlidir.
Ve testi kendin yaptın, 11000000000000000'de böyle bir şeyim yok
Bu uzun süredir test edildi, bu yüzden döngülerde sadece değişkenleri kullanıyorum.
Bu uzun süredir test edildi, bu yüzden döngülerde sadece değişkenleri kullanıyorum.
Bana kodlu bir test göster
Bana kodlu bir test göster
Evet, ne testi? ))
Döngü koşulunun her iki çeşidini de kendiniz gösterdiniz.
Igor da yukarıdaki kodu getirdi.
Döngünün yürütülmesini size değişkeni ve döngü koşulunda ArraySize() ile ölçün.