Hatalar, hatalar, sorular - sayfa 2880
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
Numara
yinelenen kod bölümleri varsa - optimizasyon testi yapın!
rand()'ın ne kadar süre çalıştığı ne fark eder?
evet, test süresinin 2/3'ünü çalıştırmasına izin verin, asıl mesele rand()'ın çalışma süresinin sabit olmasıdır
IMHO, sistem işlevlerini yürütmek için bağlamı değiştirmeniz gerekiyor, ancak MQL kodunuz sistem MQL işlevlerini kullanacak mı? - test edilecek ideal kodun anlamı?
)) hızdaki fark, yöntemlerden biri (1 ila 4) lehine 4 kat olabilir, ancak rand işlemi, kodun geri kalanından 10 kat daha uzundur, bu fark görünmez (11 ila 14)
)) hızdaki fark, yöntemlerden biri (1 ila 4) lehine 4 kat olabilir, ancak rand işlemi, kodun geri kalanından 10 kat daha uzundur, bu fark görünmez (11 ila 14)
hayır yapamadım
fark hemen görünür
geliştiricilerin yeniliklerde duyurduğu bir şeyi kontrol edelim, genellikle bazı işlevler için zaman serilerine erişim süresinin optimize edildiğini yazıyorlar = uzun süredir kontrol edilmedi
2020.10.16 02:11:20.671 HızTst (EURUSD,H1) tst 1: : döngüler=10000000 ms=353174
2020.10.16 02:11:21.967 HızTst (EURUSD,H1) tst2 : : döngüler=10000000 ms=1296043
2020.10.16 02:11:21.967 HızTst (EURUSD,H1) 11304533.15558525 : 11303930.69247558
2020.10.16 02:11:44.012 HızTst (EURUSD,H1) tst1 : : döngüler=10000000 ms=359757
2020.10.16 02:11:45.369 HızTst (EURUSD,H1) tst2 : : döngüler=10000000 ms=1357325
2020.10.16 02:11:45.369 HızTst (EURUSD,H1) 11304350.05612442 : 11304321.21848488
genellikle kritik olmayan
rand() çalışma zamanı sabittir, büyük olasılıkla normal bir C++ işlevidir, google "Rand c++ kaynak kodu"
başlatmak gerekir, ancak sabitlerle başlatırsanız, optimizasyonla karşılaşabilirsiniz.
genel olarak, rand () 'dan hoşlanmama net değil
böyle bir şeyle başlatma seçeneği olarak:
hızlı olacak
betiğinizi başlattı, IMHO doğru değil
ana zaman, kodu önbelleğe ve ardından işlemciye yüklemektir.
peki, sistem zamanlayıcısının ayrıklığını ekleyin
neredeyse rastgele bir sayı alıyoruz
uzun bir süre, yaklaşık 100500 kez test etmeniz gerekiyor, IMHO
Rand() sonucu gürültülü yapar.
Bilgisayarımda, döngünün bir yinelemesi yaklaşık bir buçuk nanosaniye sürer.
İki Rand() ile bir yineleme iki katına çıkar - neredeyse 3 nanosaniyeye kadar. Aynı zamanda, böyle bir yinelemede, büyük bir dizinin bir öğesine erişimin iki kez ortadan kalktığını anlamanız gerekir, bu da oldukça pahalıdır.
Böylece toplam yineleme süresinin yaklaşık 2/3'ünün iki Rand() için harcandığını varsayabiliriz. Tabii ki, "büyüklük sırası" konusunda heyecanlandım)
Önceden hazırlanmış dizi rastgele sayılarla doluysa nasıl optimizasyonla karşılaşabileceğinizi anlamadım.
Her nasılsa, zaten rand () performansıyla ilgiliydi. Hatta kendime benzer bir fonksiyon yazmaya çalıştım. https://www.mql5.com/ru/forum/170952/page137#comment_12010041
sonuç
Bence sonuç, ne kullanılacağının neredeyse hiç fark yaratmamasıdır - sendika veya ikili kayma yoluyla.
Renkle çalışmak için iCanvas kitaplığımda bu yöntemlerin her ikisini de kullanıyorum.
Performansı da uzun süre test ettiğimi hatırladım ve neredeyse hiçbir fark olmadığı sonucuna vardım. Ancak sendikalı kod daha okunabilir.
Açıkçası bu beni hayal kırıklığına uğrattı çünkü. sendika ile performansta gözle görülür bir kazanç elde edeceğimi umuyordum.
Önceden hazırlanmış dizi rastgele sayılarla doluysa nasıl optimizasyonla karşılaşabileceğinizi anlamadım.
yukarıdaki 2 link habr verdi, ilk makalede derlemeden sonra normal bir döngünün nasıl göründüğü iyi gösterildi
Yürütme optimizasyonuna kesinlikle ulaşabileceğinizi söylemiyorum, ancak IMHO, dizi değişmezse, ki bu aslında döngü için sabit bir boyuta sahip sabit bir bellek alanıdır, hiçbir optimizasyonun olmayacağı bir gerçek değildir. yukarı, bir tür işlemci üzerinde ve hem derleyiciden hem de önbelleğe sahip işlemciden optimizasyon beklenebilir
Bence sonuç, ne kullanılacağının neredeyse hiç fark yaratmamasıdır - sendika veya ikili kayma yoluyla.
yukarıdaki 2 link habr verdi, ilk makalede derlemeden sonra normal bir döngünün nasıl göründüğü iyi gösterildi
Yürütme optimizasyonuna kesinlikle ulaşabileceğinizi söylemiyorum, ancak IMHO, dizi değişmezse, ki bu aslında döngü için sabit bir boyuta sahip sabit bir bellek alanıdır, hiçbir optimizasyonun olmayacağı bir gerçek değildir. yukarı
sonuçlara bakılırsa, optimizasyon kokusu yok
sonuçlara bakılırsa, optimizasyon kokusu yok
Evet
anlaşmazlık belirli bir kodda değil
ve test metodolojisinin kendisinde, en iyi şekilde test ettiğim gerçeğine hala bağlıyım ve Rand() bozulmalar getirse de, orantılı değil, doğrusal bir katsayı, yani. Hızda %5'ten daha az fark yoksa doğruluk esasen çok önemli değildir, IMHO
Merhaba!
Muhtemelen bir MQL5 geliştiricisi için bir sorum var? belki başka biri biliyordur... ME derleyici/kod düzenleyicisini IDEA veya Visual Studio gibi bazı popüler geliştirme ortamlarıyla entegre etmeyi planlıyor musunuz? Benim için Meta Editör büyük bir acı. Blokların katlanması yok, şablonların otomatik olarak değiştirilmesi yok (için yazmaya başladığınız gibi(... ve size hemen ikame etmek için bir döngü şablonu ve çok daha fazlasını sunuyor), normalin önemli parçalarının vurgulanması yok. Ve Modern robotların karmaşık olduğu, büyük projeler olduğu ve kod yönetimi ve ortak geliştirme olasılığı için çok daha büyük gereksinimler olduğu gerçeğinden bahsetmiyorum.
Artık kimse editörlerini ve derleyicilerini yazmıyor, herkes onları reddediyor ve Microsoft, JetBrains, vb.'nin hazır çözümlerine geçiyor. Tüm modern editörler, istediğiniz her şeyi içine sokmanıza izin veren özel eklenti sistemlerine sahiptir. Görev prensipte zor değil.
Sevgili, en azından birileri en azından benim için anlaşılmaz bir duruma cevap verebilir mi?
Ve programcıların daha da gerisindesiniz. O zaman kesinlikle yardım edecekler.