Hatalar, hatalar, sorular - sayfa 2723

 
Aleksey Mavrin :

Size neyin yanlış olduğunu ve programın güncellemesini nasıl hızlandıracağınızı kim söyleyecek? Expert Advisor'dan ChartRedraw işlevini çağırıyorum, ancak hala birkaç dakikalık gecikme var.

ChartRedraw yalnızca grafik nesnelerini çizmek (güncellemek) için gereklidir, gösterge tamponlarıyla çizilen normal bir gösterge için ChartRedraw gerekli değildir

IMHO, göstergede bir sorun arayın, belki de her kene üzerinde arabelleklerin yanlış hesaplanması, her tikte tüm geçmişi sayan "yazarlar" var

Not: Söyleyemem, ama belki ChartRedraw tüm grafiği geçmiş senkronizasyonu ile günceller, eğer öyleyse, o zaman genellikle tüm geçmişin tam bir hesaplamasıyla göstergeyi her seferinde yeniden başlatırsınız.

UPD: grafikteki geçmişi daha az sayıda çubukla sınırlamaya çalışın 10.000 yeterlidir, MT4'te ağır bir göstergenin tüm belleği "silip süpürdüğü" ve ardından EA'nın neden doğru çalışmadığını aradığı bir durum vardı (bu işe yaramadı). MT5'te tüm hafızanın kullanılması pek olası olmasa da .... her şey olabilir

 
Igor Makanu :

ChartRedraw yalnızca grafik nesnelerini çizmek (güncellemek) için gereklidir, gösterge tamponlarıyla çizilen normal bir gösterge için ChartRedraw gerekli değildir

IMHO, göstergede bir sorun arayın, belki de her kene üzerinde arabelleklerin yanlış hesaplanması, her tikte tüm geçmişi sayan "yazarlar" var

Not: Söyleyemem, ama belki ChartRedraw tüm grafiği geçmiş senkronizasyonu ile günceller, eğer öyleyse, o zaman genellikle tüm geçmişin tam bir hesaplamasıyla göstergeyi her seferinde yeniden başlatırsınız.

UPD: grafikteki geçmişi daha az sayıda çubukla sınırlamaya çalışın 10.000 yeterlidir, MT4'te ağır bir göstergenin tüm belleği "silip süpürdüğü" ve ardından EA'nın neden doğru çalışmadığını aradığı bir durum vardı (bu işe yaramadı). MT5'te tüm hafızanın kullanılması pek olası olmasa da .... her şey olabilir

Ayrıca, hesaplamayı optimize etmeye ve test için hindinin cilalı bir versiyonunu koymaya hemen yardımcı oldu. Ondan önce 1000 barın her tikini saydım, şimdi yeni bir barın açılmasını bekliyorum.

Bu nedenle, hala çok şaşırmaya değer. 1k bar çok güçlü olmayan hesaplamalar grafiğin çizimini 2 dakika yavaşlatıyor mu? ..

 
Aleksey Mavrin :

Bu nedenle, hala çok şaşırmaya değer. 1k bar çok güçlü olmayan hesaplamalar grafiğin çizimini 2 dakika yavaşlatıyor mu? ..

bu olamaz, bence terminal böyle bir göstergeyi " xxx göstergesindeki hesaplama çok uzun" yazan mesajla kaldıracaktır.

MT'nin (4/5) hızı çok yüksek, elbette aynı verileri birkaç kez sayabilirsiniz, ancak IMHO, yine de denemeniz gerekiyor

Göstergenin yazarının gösterge arabelleklerinin ekonomik hesaplanmasına aşina olmadığını düşünüyorum ve göstergelerin nasıl yazıldığını incelemek için son çubukları doğru bir şekilde hesaplamayı unutuyor... acilen KB'de;)

 
Slava :

Bu iki program aynı terminalde mi yoksa iki farklı programda mı?

İşte sorunu yeniden oluşturmak için kod. https://www.mql5.com/en/forum/332849

Çoğaltmak için kodu en az 2 kez çalıştırmanız gerekir.

File-Sharing ... my next "Sometimes-Bug" in MT5?
File-Sharing ... my next "Sometimes-Bug" in MT5?
  • 2020.02.16
  • www.mql5.com
FILE_SHARE_READ and FILE_SHARE_WRITE do not work proper. MQL creates buffers with different contents for the same file. Please watch the example...
 
Alexey Navoykov :

Hiç gerekli değil. Neden sishler? C#'a ne dersin? - ona bir kez daha anlamca daha yakın.

Muhtemelen c++ benzer olduğundan ve C'den gelen yapılar oraya geldiği için.

Yapıların pasifliği hakkındaki tüm konuşmalar, tamamen arkaik fikirlerdir, IMHO.

Yapıcılara ihtiyaç var - sınıfları kullanın veya keskinliğe hoş geldiniz. Neden böyle bir çağrışımdan yapıyı mahrum bırakalım? Programlar sadece bundan daha anlamlı hale gelecektir. Burada birinin kodunu alacağım, görüyorum - bir sınıf yerine bir yapı ve sadece bir kelimeden çok fazla bilgi alacağım. Hiçbir şey elde edemezsiniz, anında aldığım sonucu elde etmek için kaynak kodunu özenle çalışacaksınız. Tecrübelerime göre, yapılar üzerindeki bu anlaşmaya saygı duyulur, belki biraz nihilist marjinalizmi mahveder.

En azından her türün bir kurucusu olması gerektiğini düşünüyorum. Başlatılmamış alanlar kötüdür ve bundan kaçınılmalıdır.

Orada kötülük yok, sence. Hatta bunu standarda genişlettiler: başlatılmamış unsigned char ve std:: byte'ı okumak tanımsız davranış değildir. POD için başlatmayı toplamak mümkündür. Ve unutmayın - tüm bu başlatma ücretsiz değildir, bu gerçek bir kaynak maliyetidir (CPU, bellek, yürütülebilir boyut). Bunu numara kırıcınızla yaparsanız, bazı mikro denetleyiciler söz konusu olduğunda bu önemli olabilir. Sonuçta, C / C ++ sadece keskin gibi bir vida formu-tokat değildir.

 unsigned char fn() { unsigned char q; return q + 2 ;}
int main() {
    fn();
}
0000000000001119 <fn>:
     1119 :       55                       push   %rbp
     111 a:       48 89 e5                mov    %rsp,%rbp
     111 d:       0 f b6 45 ff             movzbl - 0x1 (%rbp),%eax
     1121 :       83 c0 02                 add    $ 0x2 ,%eax
     1124 :       5 d                      pop    %rbp
     1125 :       c3                      retq           

unsigned char fn2() { unsigned char q = 5 ; return q + 2 ;}
int main() {
    fn();
}
0000000000001119 <fn2>:
     1119 :       55                       push   %rbp
     111 a:       48 89 e5                mov    %rsp,%rbp
     111 d:       c6 45 ff 05              movb   $ 0x5 ,- 0x1 (%rbp)
     1121 :       0 f b6 45 ff             movzbl - 0x1 (%rbp),%eax
     1125 :       83 c0 02                 add    $ 0x2 ,%eax
     1128 :       5 d                      pop    %rbp
     1129 :       c3                      retq
Sadece bir değişkeni başlatmak, talimatların boyutunu %30 artırdı.
 
Stanislav Korotky :

bir terminalde. Uzman verileri yazar, göstergeyi okur. Farklı çizelgelerde asılıydılar, ancak birde olabilecekleri açık (eğer önemliyse). 2380 oluşturun.

Bir dosyayı okuyan bir Uzman Danışman, dosyayı kapalı tutmalıdır.

Dosyaların MQL5'te uygulanmasının özelliği, dosyalardan gelen verileri kendi arabelleklerinde maksimum düzeyde tutmalarıdır. Bilgi miktarı arabelleğe sığmayacak kadar büyükse, işaretçiyi dosyanın başına ve ardından sonuna taşıma hileniz işe yarayabilir.

Şimdilik dosyayı açın , içeriğini kontrol edin ve ardından tekrar kapatın.

 
Slava :

Bir dosyayı okuyan bir Uzman Danışman, dosyayı kapalı tutmalıdır.

Dosyaların MQL5'te uygulanmasının özelliği, dosyalardan gelen verileri kendi arabelleklerinde maksimum düzeyde tutmalarıdır. Bilgi miktarı arabelleğe sığmayacak kadar büyükse, işaretçiyi dosyanın başına ve ardından sonuna taşıma hileniz işe yarayabilir.

Şimdilik dosyayı açın , içeriğini kontrol edin ve ardından tekrar kapatın.

Yani FileFlush() işe yaramaz mı?
 
Alain Verleyen :
Yani FileFlush() işe yaramaz mı?

Numara. Başka birinin değiştirilen dosyayı okuyabilmesini istiyorsanız FileFlush bir zorunluluktur.

Sorun, MQL5 programının dosyayı açarken kendi arabelleğine okumasıdır. Ve dosyayı tekrar okuyana kadar dosyada bir şeylerin değiştiği gerçeği hakkında hiçbir şey bilmeyecek. Dosyayı ancak bu dosyayı kapatıp açtığınızda tekrar okuyabilirsiniz.

 
Slava :
Numara. Başka birinin değiştirilen dosyayı okuyabilmesini istiyorsanız FileFlush bir zorunluluktur.

Dosyayı kapatsan bile?

 
Andrey Barinov :

Dosyayı kapatsan bile mi?

İşte tam da bundan bahsediyorum. Kapat sonra tekrar aç

Yoksa dosyayı kapatmadan önce FileFlush'ı mı kastediyorsunuz?