MT5'te dizilerin zorla temizlenmesi? - sayfa 4

 
4-ke'de yeniden boyutlandırma sırasında sıfırlarla başlatmanın gerçekleştiğini bilmiyordum. Bu bir kolaylık değil, programların hızında bir azalmaya yol açan bir tür aptallıktır. Onlar. diziyi -1 değeriyle başlatmam gerekirse, çift başlatma vardır.
Sonra MT4'ün neden daha yavaş olduğunu merak ediyorlar.
 
Vasiliy Sokolov :

... MQL5, MQL4'ün aksine, kullanıcının ne istediğini anlamaya çalışmıyor ve haklı olarak da öyle.

Bunu bir reklam afişine asmayı öneriyorum. :) (şaka)

Vasily, bir programcının rahatlığına böyle bir MT5 yaklaşımını haklı çıkaran nüanslar olduğunu fark ettim. Ve umursamıyorum. Bırak olsun.

 
Реter Konow :

1. Mantık, dizileri temizleme prosedürünün derleyici tarafından derleme aşamasında bir kez gerçekleştirilmesini belirtir.

Evet, mantıkla ilgili bir problemin var :)

 
Nikolai Semko :
4-ke'de yeniden boyutlandırma sırasında sıfırlarla başlatmanın gerçekleştiğini bilmiyordum. Bu bir kolaylık değil, programların hızında bir azalmaya yol açan bir tür aptallıktır. Onlar. diziyi -1 değeriyle başlatmam gerekirse, çift başlatma vardır.
Sonra MT4'ün neden daha yavaş olduğunu merak ediyorlar.

Prensip olarak, bir dizi bildirirken derleyiciye diziyi temizlemesini söyleyen bir tür bayrak eklemek mümkün olacaktır. Ya uygun ya da hızlı olurdu - seçiminiz.

 
Реter Konow :

Prensip olarak, bir dizi bildirirken derleyiciye diziyi temizlemesini söyleyen bir tür bayrak eklemek mümkün olacaktır. Ya uygun ya da hızlı olurdu - seçiminiz.

Fark ne. Yeniden boyutlandırmadan sonra başlatma yaparsınız, tüm bayrak bu.
Özellikle dinamik dizi bildirilirken boyutu bilinmez.
 
Nikolai Semko :
Fark ne. Yeniden boyutlandırmadan sonra başlatma yaparsınız, tüm bayrak bu.
Özellikle dinamik dizi bildirilirken boyutu bilinmez.

Evet, her global dizi bildiriminden ve her yeniden boyutlandırmadan sonra. Ve 20 - 30 küreniz varsa. Bazıları belirli koşullar altında boyut değiştiren diziler? Her yerde döngüler halinde başlatma yazmak için? (diziler iki boyutlu olabilir). Bu böcekler için potansiyel bir üreme alanı değil mi?

 
Реter Konow :

Evet, global dizinin her bildiriminden sonra ve her yeniden boyutlandırmadan sonra. Ve 20 - 30 küreniz varsa. Bazıları belirli koşullar altında boyut değiştiren diziler? Her yerde döngüler halinde başlatma yazmak için? (diziler iki boyutlu olabilir). Bu böcekler için potansiyel bir üreme alanı değil mi?

Bu ameliyat oldukça basittir. " ArrayResize " kelimesini başka bir şeyle değiştirin - bu, yeniden boyutlandırma işlevinizin adı olacaktır. İçinde, yeniden boyutlandırmanın artış yönünde olup olmadığını kontrol edin, ardından döngüdeki yeni öğeleri gözden geçirin ve bunları sıfıra atayın.

(Varsa) boyutuna sahip tüm dizileri başlatmak için hala init içinde.

İşlevlerde belirli bir boyutta diziler de olabilir - onlar da. Onları köşeli parantez içinde arayın.

 
Dmitry Fedoseev :

Bu ameliyat oldukça basittir. "ArrayResize" kelimesini başka bir şeyle değiştirin - bu, yeniden boyutlandırma işlevinizin adı olacaktır. İçinde, yeniden boyutlandırmanın artış yönünde olup olmadığını kontrol edin, ardından döngüdeki yeni öğeleri gözden geçirin ve bunları sıfıra atayın.

(Varsa) boyutuna sahip tüm dizileri başlatmak için hala init içinde.

İşlevlerde belirli bir boyutta diziler de olabilir - onlar da. Onları köşeli parantez içinde arayın.

Bu arada, evet.
Peter, Dmitry mantıklı bir şey söylüyor.
İyi yazılmış bir tanım, sizi tüm kodu yeniden yazmaktan kurtaracaktır.
 
Nikolai Semko :
Bu arada, evet.
Peter, Dmitry mantıklı bir şey söylüyor.
İyi yazılmış bir tanım, sizi tüm kodu yeniden yazmaktan kurtaracaktır.

Deneyeceğim. İlginç hack.

 

Yaratılışı hakkında birçok soru olmasına rağmen, konu başlatıcıyı destekleyeceğim)))

MQL5 geliştiricileri, hesaplama hızının (veya diğer bazı güzel sayıların) peşinde, MQL4'ü daha kolay hale getiren tüm "küçük güzellikleri" kaldırdı,

Örnek olarak, burada MT5 için göstergeler yazmayı ele aldım, MQL4'te temel, MQL5'te bir programlama ders kitabı olur ve bu "ders kitabı" bir ticaret terminali bağlamında okunabilmelidir:

1. OnInit() çağrılırken gösterge arabellekleri otomatik olarak başlatılmaz

2. kod tabanındaki yaklaşık yüz göstergeye baktılar, ne yazık ki, MQL5'te programlama kisvesi altında, MQL4 tarzında göstergeler yazıyorlar - dizilerin ve zaman serilerinin sayısını genişletin

3. iHighest / iLowest düzgün çalışmıyor - zaman serilerinin numaralandırılması yönünde en yüksek/en düşük değerlere sahip çubukları ararlar... yani. MQL4'te göstergeler oluşturmak için standart şemaları kullanırsanız - geçmiş verilerden mevcut verilere hesaplama, o zaman bu görev iHighest ve iLowest kullanılarak çözülemez, çünkü en soldaki çubuk 0'dır ve iLowest çağrıldığında gelecekte değerleri arayacağız....

4. ArrayMaximum() ile aynı sorun - göstergelerde kullanmak zor... peki, ne kadar zor, zaman serisi numaralandırmasını genişletmemek için, başlangıç elemanından belirli sayıda çubuk alıp sürekli çıkarıyoruz ve ArrayMaximum(high[i] , i -Period,Period) alın

5. ne yazık ki, MQL5 uzmanları bile şüpheli yapılar kullanıyor... diyelim ki hala MT4'ten geçiş sırasında korunan belirli bir koltuk değneği tabanı taşıyorlar.


Peki, bütün bunlar ne için? MQL'nin saf C++ gibi davranmadığı gerçeğine, neden kullanıcılar için daha basit uygulamaları kaldırdılar, yaklaşık bir aydır Python'un ne işe yaradığına, üzerinde neden bu kadar çok çalışma olduğuna bakıyorum.. . ve ancak şimdi Python'a insanlara küçük şeylere dikkat etmeme fırsatı verildiğini anlıyorum, daha dostça bir arayüz yaptılar;) - deneyimli bir programcı için tüm bunların doğru olmadığı görünecek, ancak insanlar bunu kullanıyor ve Python oldukça popüler

Neden: