Hatalar, hatalar, sorular - sayfa 2777

 
Alain Verleyen :

Güncelleme :

Maksimum tepe artık ciddi şekilde artırıldı:

2020.06.13 08:18:25.187 342152 (EURGBP, H1) Tutar = 23520
2020.06.13 08:18:25.187 342152 (EURGBP, H1) Min=33
2020.06.13 08:18:25.187 342152 (EURGBP, H1) Maks = 81011
2020.06.13 08:18:25.187 342152 (EURGBP, H1) Ort.=149

Deneyin saflığı için, bu betiği birkaç çizelgede ve birkaç terminalde paralel olarak çalıştırmanız gerekir. Ardından bekleme sürelerini karşılaştırın.

 
Stanislav Korotky :

Deneyin saflığı için, bu betiği birkaç çizelgede ve birkaç terminalde paralel olarak çalıştırmanız gerekir. Ardından bekleme sürelerini karşılaştırın.

Tamam, ama zaten 1 grafikte olduysa, birden fazla grafikle düzelmez.

Birden çok çizelgede/terminalde çalıştırmanız için size daha fazla ne verecek?

 
Alain Verleyen :

Tamam, ama zaten 1 grafikte olduysa, birden fazla grafikle düzelmez.

Birden çok çizelgede/terminalde çalıştırmanız için size daha fazla ne verecek?

Bu, farklı terminallerde eşleşirse, sorun işletim sistemi düzlemindedir.

 
Stanislav Korotky :

Bu, farklı terminallerde eşleşirse, sorun işletim sistemi düzlemindedir.

Anladım. Deneyeceğim.
 
Stanislav Korotky :

Deneyin saflığı için, bu betiği birkaç çizelgede ve birkaç terminalde paralel olarak çalıştırmanız gerekir. Ardından bekleme sürelerini karşılaştırın.

Başka bir Terminal, ancak 20 çizelge (farklı semboller) aynı anda başladı.

Zirvenin nereden geldiğini AUDUSD için kontrol ettim:

2020.06.13 09:16:35.151 342152 (USDJPY, H1) Tutar = 240
2020.06.13 09:16:35.151 342152 (USDJPY, H1) Min=38
2020.06.13 09:16:35.151 342152 (USDJPY, H1) Maks = 2235
2020.06.13 09:16:35.151 342152 (USDJPY, H1) Ort=472
2020.06.13 09:16:35.151 342152 (CADCHF, H1) Tutar = 240
2020.06.13 09:16:35.151 342152 (CADCHF, H1) Min=48
2020.06.13 09:16:35.151 342152 (CADCHF, H1) Maks=2323
2020.06.13 09:16:35.152 342152 (CADCHF, H1) Ort.=606
2020.06.13 09:16:35.152 342152 (EURAUD, H1) Tutar = 240
2020.06.13 09:16:35.152 342152 (EURCHF, H1) Tutar = 240
2020.06.13 09:16:35.152 342152 (GBPCHF, H1) Tutar=240
2020.06.13 09:16:35.152 342152 (EURCHF, H1) Min=141
2020.06.13 09:16:35.152 342152 (EURGBP, H1) Tutar = 240
2020.06.13 09:16:35.152 342152 (CHFJPY, H1) Tutar=240
2020.06.13 09:16:35.152 342152 (AUDJPY, H1) Tutar=240
2020.06.13 09:16:35.152 342152 (AUDJPY, H1) Min=47
2020.06.13 09:16:35.152 342152 (EURUSD, H1) Tutar = 240
2020.06.13 09:16:35.152 342152 (EURUSD, H1) Min. = 23
2020.06.13 09:16:35.152 342152 (EURUSD, H1) Maks = 2368
2020.06.13 09:16:35.152 342152 (AUDUSD, H1) Tutar = 240
2020.06.13 09:16:35.152 342152 (EURUSD, H1) Ort=607
2020.06.13 09:16:35.152 342152 (AUDUSD, H1) Min=74
2020.06.13 09:16:35.152 342152 (GBPJPY, H1) Tutar=240
2020.06.13 09:16:35.152 342152 (AUDNZD, H1) Tutar=240
2020.06.13 09:16:35.152 342152 (USDCHF, H1) Tutar = 240
2020.06.13 09:16:35.152 342152 (AUDNZD, H1) Min=122
2020.06.13 09:16:35.152 342152 (AUDCHF, H1) Tutar=240
2020.06.13 09:16:35.152 342152 (AUDNZD, H1) Maks=2402
2020.06.13 09:16:35.152 342152 (AUDNZD, H1) Ort=660
2020.06.13 09:16:35.152 342152 (AUDCHF, H1) Min=157
2020.06.13 09:16:35.152 342152 (AUDCHF, H1) Maks=2354
2020.06.13 09:16:35.152 342152 (AUDCHF, H1) Ort=663
2020.06.13 09:16:35.152 342152 (GBPCHF, H1) Min=32
2020.06.13 09:16:35.152 342152 (GBPCHF, H1) Maks=2380
2020.06.13 09:16:35.152 342152 (GBPCHF, H1) Ort=616
2020.06.13 09:16:35.152 342152 (EURCHF, H1) Maks = 2327
2020.06.13 09:16:35.152 342152 (EURCHF, H1) Ort=618
2020.06.13 09:16:35.152 342152 (EURGBP, H1) Min=36
2020.06.13 09:16:35.152 342152 (EURGBP, H1) Maks = 2233
2020.06.13 09:16:35.152 342152 (EURGBP, H1) Ort=503
2020.06.13 09:16:35.152 342152 (CHFJPY, H1) Min=11
2020.06.13 09:16:35.152 342152 (CHFJPY, H1) Maks=2387
2020.06.13 09:16:35.152 342152 (CHFJPY, H1) Ort.=657
2020.06.13 09:16:35.152 342152 (AUDJPY, H1) Maks=2292
2020.06.13 09:16:35.152 342152 (AUDJPY, H1) Ort=612
2020.06.13 09:16:35.152 342152 (EURNZD, H1) Tutar = 240
2020.06.13 09:16:35.152 342152 (EURNZD, H1) Min=54
2020.06.13 09:16:35.152 342152 (EURNZD, H1) Maks=2361
2020.06.13 09:16:35.152 342152 (EURNZD, H1) Ort=612
2020.06.13 09:16:35.152 342152 (AUDCAD, H1) Tutar=240
2020.06.13 09:16:35.152 342152 (AUDCAD, H1) Min=121
2020.06.13 09:16:35.152 342152 (EURCAD, H1) Miktar = 240
2020.06.13 09:16:35.152 342152 (AUDCAD, H1) Maks=2328
2020.06.13 09:16:35.152 342152 (AUDCAD, H1) Ort=605
2020.06.13 09:16:35.152 342152 (AUDUSD, H1) Maks = 2361
2020.06.13 09:16:35.152 342152 (AUDUSD, H1) Ort=611
2020.06.13 09:16:35.152 342152 (GBPJPY, H1) Min=13
2020.06.13 09:16:35.152 342152 (GBPJPY, H1) Maks = 2411
2020.06.13 09:16:35.152 342152 (GBPJPY, H1) Ort=661
2020.06.13 09:16:35.153 342152 (GBPUSD, H1) Tutar = 240
2020.06.13 09:16:35.153 342152 (GBPUSD, H1) Min = 113
2020.06.13 09:16:35.153 342152 (GBPUSD, H1) Maks = 2362
2020.06.13 09:16:35.153 342152 (GBPUSD, H1) Ort = 667
2020.06.13 09:16:35.153 342152 (USDCAD, H1) Tutar=240
2020.06.13 09:16:35.153 342152 (USDCAD, H1) Min=151
2020.06.13 09:16:35.153 342152 (USDCAD, H1) Maks=2386
2020.06.13 09:16:35.153 342152 (EURAUD, H1) Min=35
2020.06.13 09:16:35.153 342152 (USDCAD, H1) Ort=671
2020.06.13 09:16:35.153 342152 (EURAUD, H1) Maks=2233
2020.06.13 09:16:35.153 342152 (EURAUD, H1) Ort=478
2020.06.13 09:16:35.153 342152 (EURJPY, H1) Tutar = 240
2020.06.13 09:16:35.153 342152 (EURJPY, H1) Min=10
2020.06.13 09:16:35.153 342152 (EURCAD, H1) Min=123
2020.06.13 09:16:35.153 342152 (EURCAD, H1) Maks=2384
2020.06.13 09:16:35.153 342152 (EURCAD, H1) Ort=658
2020.06.13 09:16:35.153 342152 (USDCHF, H1) Min=32
2020.06.13 09:16:35.153 342152 (USDCHF, H1) Maks = 2369
2020.06.13 09:16:35.153 342152 (USDCHF, H1) Ort=614
2020.06.13 09:16:35.153 342152 (EURJPY, H1) Maks = 2344
2020.06.13 09:16:35.153 342152 (EURJPY, H1) Ort = 658

İşte o zaman zirveler gelir:

2020.06.13 09:17:35.151 342152 (USDJPY, H1) Tutar = 480
2020.06.13 09:17:35.151 342152 (USDJPY, H1) Min=38
2020.06.13 09:17:35.151 342152 (USDJPY, H1) Maks = 17421
2020.06.13 09:17:35.151 342152 (USDJPY, H1) Ort=533
2020.06.13 09:17:35.151 342152 (EURAUD, H1) Tutar = 480
2020.06.13 09:17:35.151 342152 (EURAUD, H1) Min=35
2020.06.13 09:17:35.151 342152 (EURAUD, H1) Maks = 17406
2020.06.13 09:17:35.151 342152 (EURAUD, H1) Ort=518
2020.06.13 09:17:35.151 342152 (EURGBP, H1) Tutar = 480
2020.06.13 09:17:35.151 342152 (EURGBP, H1) Min=36
2020.06.13 09:17:35.151 342152 (EURGBP, H1) Maks = 17425
2020.06.13 09:17:35.151 342152 (EURGBP, H1) Ort = 515
2020.06.13 09:17:35.151 342152 (EURUSD, H1) Tutar = 480
2020.06.13 09:17:35.151 342152 (EURUSD, H1) Min=18
2020.06.13 09:17:35.151 342152 (EURUSD, H1) Maks = 17366
2020.06.13 09:17:35.151 342152 (EURCHF, H1) Tutar = 480
2020.06.13 09:17:35.151 342152 (EURUSD, H1) Ort = 618
2020.06.13 09:17:35.151 342152 (AUDCHF, H1) Tutar=480
2020.06.13 09:17:35.151 342152 (USDCHF, H1) Tutar = 480
2020.06.13 09:17:35.151 342152 (AUDCHF, H1) Min=126
2020.06.13 09:17:35.151 342152 (CADCHF, H1) Tutar = 480
2020.06.13 09:17:35.151 342152 (AUDCHF, H1) Maks=10477
2020.06.13 09:17:35.151 342152 (EURCAD, H1) Miktar = 480
2020.06.13 09:17:35.151 342152 (GBPUSD, H1) Tutar = 480
2020.06.13 09:17:35.152 342152 (EURCAD, H1) Min=123
2020.06.13 09:17:35.152 342152 (GBPUSD, H1) Min=112
2020.06.13 09:17:35.152 342152 (EURCAD, H1) Maks=10485
2020.06.13 09:17:35.152 342152 (EURCAD, H1) Ort=663
2020.06.13 09:17:35.152 342152 (GBPUSD, H1) Maks = 10435
2020.06.13 09:17:35.152 342152 (GBPUSD, H1) Ort = 661
2020.06.13 09:17:35.152 342152 (EURCHF, H1) Min=71
2020.06.13 09:17:35.152 342152 (EURJPY, H1) Tutar = 480
2020.06.13 09:17:35.152 342152 (USDCAD, H1) Tutar=480
2020.06.13 09:17:35.152 342152 (USDCAD, H1) Min=54
2020.06.13 09:17:35.152 342152 (EURJPY, H1) Min=10
2020.06.13 09:17:35.152 342152 (EURJPY, H1) Maks = 10487
2020.06.13 09:17:35.152 342152 (EURJPY, H1) Ort = 664
2020.06.13 09:17:35.152 342152 (EURNZD, H1) Tutar = 480
2020.06.13 09:17:35.152 342152 (EURNZD, H1) Min=54
2020.06.13 09:17:35.152 342152 (EURNZD, H1) Maks = 17426
2020.06.13 09:17:35.152 342152 (EURNZD, H1) Ort=620
2020.06.13 09:17:35.152 342152 (USDCHF, H1) Min=32
2020.06.13 09:17:35.152 342152 (USDCHF, H1) Maks = 17427
2020.06.13 09:17:35.152 342152 (USDCHF, H1) Ort = 649
2020.06.13 09:17:35.152 342152 (GBPCHF, H1) Tutar=480
2020.06.13 09:17:35.152 342152 (GBPCHF, H1) Min=32
2020.06.13 09:17:35.152 342152 (GBPCHF, H1) Maks=17433
2020.06.13 09:17:35.152 342152 (GBPCHF, H1) Ort.=647
2020.06.13 09:17:35.152 342152 (AUDJPY, H1) Tutar=480
2020.06.13 09:17:35.152 342152 (AUDJPY, H1) Min. = 47
2020.06.13 09:17:35.152 342152 (AUDJPY, H1) Maks = 17415
2020.06.13 09:17:35.152 342152 (AUDJPY, H1) Ort.=640
2020.06.13 09:17:35.152 342152 (CADCHF, H1) Min=48
2020.06.13 09:17:35.152 342152 (CADCHF, H1) Maks=17435
2020.06.13 09:17:35.152 342152 (CADCHF, H1) Ort.=637
2020.06.13 09:17:35.152 342152 (AUDCHF, H1) Ort=662
2020.06.13 09:17:35.152 342152 (AUDUSD, H1) Tutar = 480
2020.06.13 09:17:35.152 342152 (AUDUSD, H1) Min=43
2020.06.13 09:17:35.152 342152 (AUDUSD, H1) Maks = 17416
2020.06.13 09:17:35.152 342152 (AUDUSD, H1) Ort=620
2020.06.13 09:17:35.152 342152 (GBPJPY, H1) Tutar = 480
2020.06.13 09:17:35.152 342152 (GBPJPY, H1) Min=13
2020.06.13 09:17:35.152 342152 (GBPJPY, H1) Maks = 10468
2020.06.13 09:17:35.152 342152 (GBPJPY, H1) Ort=660
2020.06.13 09:17:35.152 342152 (CHFJPY, H1) Tutar=480
2020.06.13 09:17:35.152 342152 (CHFJPY, H1) Min=11
2020.06.13 09:17:35.152 342152 (CHFJPY, H1) Maks=10474
2020.06.13 09:17:35.152 342152 (AUDNZD, H1) Tutar=480
2020.06.13 09:17:35.152 342152 (AUDNZD, H1) Min=61
2020.06.13 09:17:35.152 342152 (AUDNZD, H1) Maks=10491
2020.06.13 09:17:35.152 342152 (AUDNZD, H1) Ort=663
2020.06.13 09:17:35.152 342152 (EURCHF, H1) Maks = 17414
2020.06.13 09:17:35.152 342152 (EURCHF, H1) Ort = 646
2020.06.13 09:17:35.152 342152 (AUDCAD, H1) Tutar=480
2020.06.13 09:17:35.152 342152 (AUDCAD, H1) Min=100
2020.06.13 09:17:35.152 342152 (AUDCAD, H1) Maks=17421
2020.06.13 09:17:35.152 342152 (AUDCAD, H1) Ort=638
2020.06.13 09:17:35.152 342152 (USDCAD, H1) Maks=10488
2020.06.13 09:17:35.152 342152 (USDCAD, H1) Ort=666
2020.06.13 09:17:35.152 342152 (CHFJPY, H1) Ort.=656

Yani her şey aynı anda oldu. Ancak bu yine de MT5 ile ilgili bir sorun olabilir. Diğer eşzamanlı terminallerle kontrol edeceğim.

 
Stanislav Korotky :

Bu, farklı terminallerde eşleşirse, sorun işletim sistemi düzlemindedir.

Sorun işletim sistemi düzleminde değil, MT'de.
MT5'te kontrol edildi (derleme 2009) - her şey uçuyor, yürütme 5 ms'den az
Aynı zamanda, MT5'te (build 2485) her şey yavaşlar, yürütme süresi genellikle 200 ms'yi aşıyor (özellikle 50+ çizelge açıkken)
Sorun açıklamasındaki kod kullanıldı: https://www.mql5.com/en/forum/342152

MT5 2009 ve MT5 2485'in iki sürümü için ChartGetInteger işlevinin uygulamalarını karşılaştırdım, sorun şu olabilir:
1. 2485'te, grafik nesnesinin "atomik" alanlarını okumak için oldukça yavaş işlemler kullanılır:
çit; kilit mov eax,[rax+2C];
Ancak, 2009 derlemesinde bu şu şekilde yapılır: lock xadd [rcx+2C],eax

2. Ayrıca, ntdll_RtlEnterCriticalSection'da geçirilen mantık ve olası süre de önemli ölçüde değişmiş gibi görünüyor.
Daha önce, 2009 yılında, kritik bölümde herhangi bir atomik işlem yapılmadan sadece birkaç alınan değer kontrol edildi.
Ve 2485'te, bağlantılı liste grafik nesneleri üzerinde yineleme ek olarak gerçekleştirilebilir.


Muhtemelen sorun, yeni bir derleyiciye geçişin bir parçası olarak (2-3 ay önce) grafik işlevleriyle çalışırken bir kilitlenme giderildiğinde ortaya çıkmış olabilir.
MT5'te (yapı 2485) ChartGetInteger'ı çağırmak için montajcı kodu ektedir.

 
Sergey Dzyublik :

Sorun işletim sistemi düzleminde değil, MT'de.
MT5'te kontrol edildi (derleme 2009) - her şey uçuyor, yürütme 5 ms'den az
Aynı zamanda, MT5'te (build 2485) her şey yavaşlar, yürütme süresi genellikle 200 ms'yi aşıyor (özellikle 50+ çizelge açıkken)
Sorun açıklamasındaki kod kullanıldı: https://www.mql5.com/en/forum/342152

MT5 2009 ve MT5 2485'in iki sürümü için ChartGetInteger işlevinin uygulamalarını karşılaştırdım, sorun şu olabilir:
1. 2485'te, grafik nesnesinin "atomik" alanlarını okumak için oldukça yavaş işlemler kullanılır:
çit; kilit mov eax,[rax+2C];
Ancak, 2009 derlemesinde bu şu şekilde yapılır: lock xadd [rcx+2C],eax

2. Ayrıca, ntdll_RtlEnterCriticalSection'da geçirilen mantık ve olası süre de önemli ölçüde değişmiş gibi görünüyor.
Daha önce, 2009 yılında, kritik bölümde herhangi bir atomik işlem yapılmadan sadece birkaç alınan değer kontrol edildi.
Ve 2485'te, bağlantılı liste grafik nesneleri üzerinde yineleme ek olarak gerçekleştirilebilir.


Muhtemelen sorun, yeni bir derleyiciye geçişin bir parçası olarak (2-3 ay önce) grafik işlevleriyle çalışırken bir kilitlenme giderildiğinde ortaya çıkmış olabilir.
MT5'te (yapı 2485) ChartGetInteger'ı çağırmak için montajcı kodu ektedir.

Resmi yapılar 2005 Build ve ardından 2085 Build idi, sizde var mı? Sadece 2007 Yapım var.
 
Sergey Dzyublik :

Eşzamansızlık ve eşzamanlılık terimlerini yanlış anlamışsınız.
Bir işlevin eşzamansız olduğunu söylediklerinde, bunun geçerli yürütme dizisinde değil, başka bir paralel dizide yürütüleceği anlamına gelir.

Asıl yürütme farklı bir iş parçacığında gerçekleştiğinden, ana iş parçacığından zaman uyumsuz ChartSetInteger işlevinin çağrılması hızlıdır.

Öte yandan, ChartGetInteger eşzamanlı işlevini çağırmak, iş parçacığı eşitleme gerektirir ve bu ek zaman alabilir.
Gecikmeler, özellikle paralel bir iş parçacığı sürekli olarak grafik yapısının verilerini güncellediğinde (örneğin, kullanıcı grafik penceresini hareket ettirdiğinde veya geçmişi kaydırdığında) fark edilir.
Büyük olasılıkla, basitlik ve güvenilirlik için, grafik veri yapısı için bir senkronizasyon nesnesi kullanılır.
"Veri segmentasyonu" kullanarak yürütme hızını artırmayı deneyebilirsiniz, ancak diğer yandan, artık bir kilitlenme veya yetersiz güncellenmiş veriler veya diğer daha kritik yerlerde yavaşlama olasılığı vardır.
Genel olarak - zaten stabil çalışana dokunmamak daha iyidir.

İlyas :

Zirvenin grafik yorumunun çizimi olduğunu varsayacağım, aksi takdirde, grafik kuyruğu boş olduğunda, ChartGetXXX işlevine yapılan çağrı (eşzamanlı çağrı) 0.13 milisaniye sürer.

Ben daha çok kod konuşmaya alışığım.
Burada, örneğin, böyle bir gösterge çizdim:


fare hareket ettiğinde ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR, 0) yürütülür;
kırmızı grafik, bu işlevin çalışma süresi istatistikleridir.
Bir basamak için basit bir istek, tüm ekranı temizleyen, birkaç bin satırlık bir grafik oluşturan, bir ölçek çizen, bir metin bilgi bloğu oluşturan ve hepsini ekranda görüntüleyen BildChart işlevinden birkaç kat daha yavaştır.

Eşzamanlılık-eşzamansızlık nedeniyle nasıl olması gerektiğine dair tüm akademik anlatılar "siyah beyazdır" olarak algılanıyor.
Tam bir alıntı dizisine sahip olarak, tuvale dayalı olarak kendi bağımsız grafiğimi kolayca oluşturabilirim ve bu grafiğin özelliklerinin tam bir tablosuna sahip olacağım ve bu tabloya nanosaniyeler içinde erişilebilecek. Ve aynı zamanda, grafik tuvali başka bir iş parçacığında çizilecektir.

Dosyalar:
 
Bu satırda derleyicinin neyi sevmediğini anlamadan uzun süre aptaldım.
   else (Type != - 1 ) // expression has no effect

varsa yazmayı unutmuşum. Böyle aptal insanların mesajı çiğnemesinin iyi olacağını düşündüm.

 
Nikolai Semko :

Bir basamak için basit bir istek, tüm ekranı temizleyen, birkaç bin satırlık bir grafik oluşturan, bir ölçek çizen, bir metin bilgi bloğu oluşturan ve hepsini ekranda görüntüleyen BildChart işlevinden birkaç kat daha yavaştır.

Bildiğim kadarıyla ChartRedraw'ı çağırmak grafiği hemen yeniden çizmez. Yeniden çizim, yalnızca Get yöntemi çağrıldığında gerçekleşir.
Ve ChartRedraw aslında aynı asenkron yöntemdir. Yani BuildChart ölçümünüz güvenilir değil.