Hatalar, hatalar, sorular - sayfa 2221

 

Sentetik alet. Dakika çubuklarını içe aktarıyorum, her dakika çubuğu 1 puan (5 karakter) farklılık gösteriyor.

Pencereyi sembollerle kapatıyorum, sonra bu pencereyi yeniden açıyorum, önceki indirmeden dakika çubukları istiyorum, alıyorum

 

Her gün için semboller aynıdır. Hata nerede?

 
elibrarius :

Alglib paket koduna bakıyorum. Kodun okunabilirliğini zorlaştıran birçok yapı var:

Bu daha kolay değil mi?

Bana öyle geliyor ki yürütme hızı daha da yüksek olacak.

Kod neden bu kadar karmaşık? Veya başka bir dilden herhangi bir ayar yapmadan mı aktarıldı? Ama yine de orijinalinde neden böyle bir komplikasyon olduğunu merak ediyorum?

Büyük olasılıkla orijinalinde tam olarak hızlanma için yapıldı.

MQL'de daha hızlı olup olmayacağı - bu ölçülmeli, burada çalışmıyor gibi görünüyor.

 
Koldun Zloy :

Büyük olasılıkla orijinalinde tam olarak hızlanma için yapıldı.

MQL'de daha hızlı olup olmayacağı - bu ölçülmeli, burada çalışmıyor gibi görünüyor.

"Büyük olasılıkla" da çalışmayacaktır.
Peki, böyle bir form nasıl daha hızlı çalışabilir? Neden bahsediyorsun!

Bir değişken yerine iki ekstra döngü ve fazladan bir dizi.

 

Nikolai Semko :

Bir değişken yerine iki ekstra döngü ve fazladan bir dizi.

Bu tür ilkel akıl yürütme, modern işlemciler için uygun değildir.

 
Koldun Zloy :

Bu tür ilkel akıl yürütme, modern işlemciler için uygun değildir.

Sen daha iyi bilirsin. daha fazla tecrüben var mı...

 


Koldun Zloy
:

Bu tür ilkel akıl yürütme, modern işlemciler için uygun değildir.

Eh, özünde ise, o zaman üzgünüm, ama sen çılgınsın.

Şu anda mevcut işlemcilerin hiçbiri böyle bir şeye sahip olmayacak

 for (i= 0 ;i<=npoints- 1 ;i++)

daha hızlı çalışmak

 for (i= 0 ;i<npoints;i++)

, bir diziye erişmek asla basit bir değişkene erişmekten daha hızlı olmayacaktır,

üç özdeş döngü asla bir birleşik döngüden daha hızlı çalışmayacaktır.


Çok tembel değildim ve asılsız olmamak için doğrudan ALGLIB kaynağında iki farklı hız seçeneği test ettim:

      e= 0 ;
       double tmp1;
       ulong t= GetMicrosecondCount ();
       for (i= 0 ;i<npoints;i++)
        {
         v= 0.0 ;
         for (i_= 0 ;i_<nvars;i_++)
           {
            tmp1=xy[i][i_]-ct[xyc[i]][i_];
            v+=tmp1*tmp1;
           }
         e=e+v;
        }
      t= GetMicrosecondCount ()-t;
       Print ( "fast = " +( string )t+ " микросекунд, e = " + DoubleToString (e) + " , npoints = " + ( string )npoints+ " , nvars = " + ( string )nvars );



      e= 0 ;
      t= GetMicrosecondCount ();
       for (i= 0 ;i<=npoints- 1 ;i++)
        {
         for (i_= 0 ;i_<=nvars- 1 ;i_++)
            tmp[i_]=xy[i][i_];
         for (i_= 0 ;i_<=nvars- 1 ;i_++)
            tmp[i_]=tmp[i_]-ct[xyc[i]][i_];
         //--- calculation
         v= 0.0 ;
         for (i_= 0 ;i_<=nvars- 1 ;i_++)
            v+=tmp[i_]*tmp[i_];
         e=e+v;
        }
      t= GetMicrosecondCount ()-t;
       Print ( "slow = " +( string )t+ " микросекунд, e = " + DoubleToString (e) + " , npoints = " + ( string )npoints+ " , nvars = " + ( string )nvars );

sonuç:

 2018.06 . 27 04 : 36 : 50.265 TestClasses (GBPUSD,M6) fast = 571 микросекунд, e = 534.47773777 , npoints = 1500 , nvars = 40
2018.06 . 27 04 : 36 : 50.266 TestClasses (GBPUSD,M6) slow = 841 микросекунд, e = 534.47773777 , npoints = 1500 , nvars = 40
2018.06 . 27 04 : 36 : 50.630 TestClasses (GBPUSD,M6) fast = 577 микросекунд, e = 531.85904819 , npoints = 1500 , nvars = 40
2018.06 . 27 04 : 36 : 50.631 TestClasses (GBPUSD,M6) slow = 812 микросекунд, e = 531.85904819 , npoints = 1500 , nvars = 40
2018.06 . 27 04 : 36 : 51.143 TestClasses (GBPUSD,M6) fast = 599 микросекунд, e = 537.42685690 , npoints = 1500 , nvars = 40
2018.06 . 27 04 : 36 : 51.144 TestClasses (GBPUSD,M6) slow = 853 микросекунд, e = 537.42685690 , npoints = 1500 , nvars = 40
2018.06 . 27 04 : 36 : 51.955 TestClasses (GBPUSD,M6) fast = 600 микросекунд, e = 531.17444713 , npoints = 1500 , nvars = 40
2018.06 . 27 04 : 36 : 51.956 TestClasses (GBPUSD,M6) slow = 809 микросекунд, e = 531.17444713 , npoints = 1500 , nvars = 40
2018.06 . 27 04 : 36 : 52.344 TestClasses (GBPUSD,M6) fast = 567 микросекунд, e = 540.39509565 , npoints = 1500 , nvars = 40
2018.06 . 27 04 : 36 : 52.344 TestClasses (GBPUSD,M6) slow = 813 микросекунд, e = 540.39509565 , npoints = 1500 , nvars = 40
2018.06 . 27 04 : 36 : 52.857 TestClasses (GBPUSD,M6) fast = 690 микросекунд, e = 550.68494369 , npoints = 1500 , nvars = 40
2018.06 . 27 04 : 36 : 52.858 TestClasses (GBPUSD,M6) slow = 820 микросекунд, e = 550.68494369 , npoints = 1500 , nvars = 40
2018.06 . 27 04 : 36 : 53.229 TestClasses (GBPUSD,M6) fast = 585 микросекунд, e = 547.94313745 , npoints = 1500 , nvars = 40
2018.06 . 27 04 : 36 : 53.230 TestClasses (GBPUSD,M6) slow = 811 микросекунд, e = 547.94313745 , npoints = 1500 , nvars = 40
2018.06 . 27 04 : 36 : 53.736 TestClasses (GBPUSD,M6) fast = 560 микросекунд, e = 568.39404456 , npoints = 1500 , nvars = 40
2018.06 . 27 04 : 36 : 53.737 TestClasses (GBPUSD,M6) slow = 813 микросекунд, e = 568.39404456 , npoints = 1500 , nvars = 40

Onlar. Hızdaki kazancın %40'tan fazla olduğu görülebilir.

Dosyalar:
dataanalysis.mqh  1150 kb
TestClasses.mqh  2762 kb
 
Nikolai Semko :

Eh, özünde ise, o zaman üzgünüm, ama sen çılgınsın.

Şu anda mevcut işlemcilerin hiçbiri böyle bir şeye sahip olmayacak

daha hızlı çalışmak

, bir diziye erişmek asla basit bir değişkene erişmekten daha hızlı olmayacaktır,

üç özdeş döngü asla bir birleşik döngüden daha hızlı çalışmayacaktır.


Çok tembel değildim ve asılsız olmamak için doğrudan ALGLIB kaynağında iki farklı hız seçeneği test ettim:

sonuç:

Onlar. Hızdaki kazancın %40'tan fazla olduğu görülebilir.

Test için teşekkürler! Sadece MQL'de değil tüm dillerde daha hızlı çalışacağını düşünüyorum.

Nedenlerini düşündüm ve başka bir şey düşünmedim, bunu yazan programcının sadece çalışan bir program için değil, satır sayısı için maaş alması gibi. Sonuçta 500 satırlık bir program müşteriyi 5000 satırlık bir program kadar etkilemez. Kodun hızının ve okunabilirliğinin bundan muzdarip olması üzücü.

 
elibrarius :
Sadece MQL'de değil tüm dillerde daha hızlı çalışacağını düşünüyorum.

Kesinlikle.

 
MQL'de yetkilendirme yaparken dikkat edildi, hata veriyor, facebook'tan uzun bir yanıt (muhtemelen yetkilendirme) tarayıcı durumunda askıda kalıyor
 
SEM :

Sentetik alet. Dakika çubuklarını içe aktarıyorum, her dakika çubuğu 1 puan (5 karakter) farklılık gösteriyor.

Pencereyi sembollerle kapatıyorum, sonra bu pencereyi yeniden açıyorum, önceki indirmeden dakika çubukları istiyorum, alıyorum

 

Her gün için semboller aynıdır. Hata nerede?

Stabil oynuyor mu? Ne inşası?