Hatalar, hatalar, sorular - sayfa 2823

 
Nikolai Semko :

Çılgın versiyonu hız için kontrol etmeye karar verdim.
Ve sonuç şaşırttı.
Önceden normalleştirilmiş çiftlerin bile karşılaştırılması, çiftin epsilon veya int'ye dönüştürülmesi yoluyla karşılaştırılmasından ortalama olarak daha yavaştır.

Sonuç:

Pek çok şeyin işlemcinin yeniliğine ve mimarisine bağlı olduğunu ve birisi için sonucun farklı olabileceğini göz ardı etmiyorum.

Şaşırtıcı bir şekilde, tamsayıya yuvarla işlevi bir tamsayı değil, gerçek bir sayı döndürür, ayrıca türü bir tamsayıya çevirmeniz gerekir. Dilin mantığı nerede?
 
Nikolai Semko :

İki ikili karşılaştırma işleminin performansı gerçekten değişkenlerin kendi değerlerine mi bağlı? Ben şüpheliyim.

Evet gibi görünüyor. Çok ilginç.
Yukarıdaki örnekteki satırı değiştirirseniz

 double test = 1.11 ;

üzerinde

 double test = NormalizeDouble ( 1.11 , 2 );

daha sonra iki ikilinin basit bir karşılaştırması diğer seçeneklerden daha hızlı çalışmaya başlar. Orada olan çift olmasına rağmen, orada olan çifttir. Fark ne olurdu? Ve genel performans iki kat daha yüksektir. Bazı mucizeler.

 2020.08 . 10 17 : 40 : 13.583 TestCompareDouble (USDCAD,H4)   простое сравнение предварительно нормализированых double 1 - 552 микросекунд, всего совпадений = 507
2020.08 . 10 17 : 40 : 13.583 TestCompareDouble (USDCAD,H4)   простое сравнение предварительно нормализированых double 2 - 954 микросекунд, всего совпадений = 507
2020.08 . 10 17 : 40 : 13.583 TestCompareDouble (USDCAD,H4)   сравнение double через эпсилон                             - 778 микросекунд, всего совпадений = 507
2020.08 . 10 17 : 40 : 13.583 TestCompareDouble (USDCAD,H4)   сравнение double через преобразование в int                 - 854 микросекунд, всего совпадений = 507
Dosyalar:
 
Alexey Navoykov :

Test yanlış. Neden sonunda 100000.0'a yalnızca bir kez bölüyorsunuz? Her yinelemede yürütülmeli ve ardından özetlenmelidir. O zaman adil bir karşılaştırma olacak. Yani herhangi bir normalleştirmeniz yok, sadece test algoritmanızı optimize ettiniz. Doğal olarak hem daha hızlı hem de daha doğru olacaktır (çünkü biriken hata azalır)

Evet haklısın. Her yinelemede bölünürse, doğruluk NormalizeDouble ile aynı olacaktır. Ancak hız yine de NormalizeDouble'dan daha yüksek olacaktır.

 2020.08 . 10 21 : 38 : 48.652 TestCompareDouble (USDCAD,H4)   простая сумма                            - 1394 микросекунд, сумма = - 3604329.1567609389312565
2020.08 . 10 21 : 38 : 48.652 TestCompareDouble (USDCAD,H4)   сумма с NormalizeDouble                   - 5861 микросекунд, сумма = - 3604329.1543100476264954
2020.08 . 10 21 : 38 : 48.652 TestCompareDouble (USDCAD,H4)   сумма, нормализированная через int        - 2179 микросекунд, сумма = - 3604329.1543100476264954

Teşekkür ederim.

 

Genel olarak, elbette, bir tam sayıya yuvarladıktan sonra, tamsayı olmayan bir sayının dönüşü iyi değildir. Daha önce, baskılarda, turdan sonra neredeyse tam sayılarla, ondalık noktadan sonra sıfırlar ve sonunda bir veya ondalık noktadan sonra dokuzlar ile karşılaşıyordum. Bir böcek olduğunu düşündüm. Geliştiricilerin anlaşılmaz konumu ortaya çıkıyor. İyi için, bir tamsayıya yuvarlarken, ikili biçimde ondalık noktadan sonra kalanı çıkarmanız gerekir, ancak görünüşe göre mantisi sıfırlamak zor/imkansızdır. Normalleştirme konusunda daha da zordur, virgülü 5 basamak taşıyıp ikili biçimde bir tamsayıya dönüştürseniz bile, o zaman double'a ters çevirme tamsayı türüyle bir fark verecektir.

Üzüntü, görünüşte basit karşılaştırma işlemleriyle koltuk değneği yapmak zorundasınız.

Piton değil.

 
Valeriy Yastremskiy :

Genel olarak, elbette, bir tam sayıya yuvarladıktan sonra, tamsayı olmayan bir sayının dönüşü iyi değildir. Daha önce, baskılarda, turdan sonra neredeyse tam sayılarla, ondalık noktadan sonra sıfırlar ve sonunda bir veya ondalık noktadan sonra dokuzlar ile karşılaşıyordum. Bir böcek olduğunu düşündüm. Geliştiricilerin anlaşılmaz konumu ortaya çıkıyor. İyi için, bir tamsayıya yuvarlarken, ikili biçimde ondalık noktadan sonra kalanı çıkarmanız gerekir, ancak görünüşe göre mantisi sıfırlamak zor/imkansızdır. Normalleştirme konusunda daha da zordur, virgülü 5 basamak taşıyıp ikili biçimde bir tamsayıya dönüştürseniz bile, o zaman double'a ters çevirme tamsayı türüyle bir fark verecektir.

Üzüntü, görünüşte basit karşılaştırma işlemleriyle koltuk değneği yapmak zorundasınız.

Yuvarlamadan sonraki ifadelerde, elde edilen sonucun tamsayı olması gerekmeyen başka işlemler de olabilir. Ardından, maviden bir ek yük oluşturarak int'den tekrar ikiye dönüştürmeniz gerekir. Neden gerekli?

Hiç kimse gerekli türü döndürecek kendi RoundInt veya RoundLong fonksiyonlarınızı yaratma zahmetine girmez.

 

Piyasada test cihazında sorun var.

Çoklu para biriminde bir Uzman Danışman kontrol ediliyorsa, test cihazı donar.

Sebep: Bir finansal aracın analizi sırasında Expert Advisor, geçmişi olmayan veya doğru formatlanmamış enstrümanlara rastlar.

Standart bir terminalde bu 29 saniyelik bir beklemeye neden olur, bu kesindir ve bu doğrulanır.

Piyasadaki test cihazı çok uzun test yazıyor.

Danışmanın bu bozuk finansal araçlardan birkaçına rastladığını varsayıyorum.

Bu sorun birkaç kez ve bir yıl önce yazıldı, ancak işler hala orada ....

 
Vladimir Pastushak :

Bu sorun birkaç kez ve bir yıl önce yazıldı, ancak işler hala orada ....

çoğalmıyorum. Kaynağınızı ekleyin.

 

İşlevin neden çalışmadığı hakkında yorum yapabilir misiniz? 0 grafiğine geçmez.

 ChartSetInteger ( 0 , CHART_BRING_TO_TOP , 0 , true );

şablonun ikinci ve sonraki uygulaması pencereleri kopyalar

 ChartApplyTemplate ( 0 , "Template.tpl" );

Bu özellikler güncellemeden önce çalışıyordu.

 
fxsaber :

çoğalmıyorum. Kaynağınızı ekleyin.

Metaquots Demo sunucularında test edin

 void OnStart ()
  {
   int m_all_symbols = SymbolsTotal ( false );
   string m_sym_name = "" ;
   for ( int i = 0 ; i < m_all_symbols; i++)
     {
       // ======================================================================
       // === Получили имя символа
       if ((m_sym_name = SymbolName (i, false )) != NULL )
        {
         // ======================================================================
         // === Если символ не выбран в окне маркет ватч
         if (! SymbolInfoInteger (m_sym_name, SYMBOL_SELECT ))
             if (! SymbolSelect (m_sym_name, true ))
               Print ( " SymbolSelect " + m_sym_name);
         ulong get = GetMicrosecondCount ();
         MqlRates rateM1[ 1440 ];
         if ( CopyRates (m_sym_name, PERIOD_M1 , 0 , 1440 , rateM1) > 0 )
           {
             Print (m_sym_name, "  " , ( GetMicrosecondCount () - get));
           }
         else
             Print ( "Error  " ,m_sym_name, "  " , ( GetMicrosecondCount () - get));
        }
     }
  }


2020.08.11 20:20:55.657 test (EURUSD,M15) MXNJPY 1998

2020.08.11 20:20:55.659 test (EURUSD,M15) NZDMXN 1979

2020.08.11 20:20:55.661 test (EURUSD,M15) USDCOP 1973

2020.08.11 20:20:55.663 test (EURUSD,M15) USDAR 2093

2020.08.11 20:20:55.665 test (EURUSD,M15) USDCLP 1929

2020.08.11 20:21:25.259 test (EURUSD,M15) Hata AUS200 29593673

2020.08.11 20:21:54.837 test (EURUSD,M15) Hata FCHI40 29578404

2020.08.11 20:22:24.336 test (EURUSD,M15) Hata GDAXIm 29498485

2020.08.11 20:22:53.949 test (EURUSD,M15) Hata HSI50 29612968

2020.08.11 20:23:23.458 test (EURUSD,M15) Hata Jap225 29509059

2020.08.11 20:23:52.919 test (EURUSD,M15) Hata ND100m 29461316

2020.08.11 20:24:22.425 test (EURUSD,M15) Hata SP500m 29505571

2020.08.11 20:24:51.860 test (EURUSD,M15) Hata SPN35 29435460

2020.08.11 20:25:21.273 test (EURUSD,M15) Hata STOX50 29412578

2020.08.11 20:25:50.663 test (EURUSD,M15) Hata UK100 29389644

2020.08.11 20:26:20.205 test (EURUSD,M15) Brent 29542597

2020.08.11 20:26:49.667 test (EURUSD,M15) Hata Ham 29462066

2020.08.11 20:27:19.194 test (EURUSD,M15) Hata Doğal Gaz 29526780




 
Vladimir Pastushak :

Metaquots Demo sunucularında test edin

Üzgünüm, şimdi sıkıca kilitleniyor ....

Bu komut dosyası, Terminal'in makinemde asılı kalmasına neden olmadı.