MT5 ve iş başında hız - sayfa 46

 
Renat Fatkhullin :

Milisaniye zamanlayıcı uzun süredir var: EventSetMillisecondTimer()

Tamamen konu dışısın. Diyelim ki OnTick'te iki pozisyon açmamız gerekiyor. İlk OrderSend birkaç milisaniyedir. Bundan sonra, bir anlık görüntü almanız gerekir. Ve sonra ikinci OrderSend'i çağırın.

OnTick tek başına yüzlerce milisaniye sürebilir. Ve bir çeşit OnTimer'da anlık görüntü almayı teklif ediyorsunuz.

 
Renat Fatkhullin :

Ölçüm kitaplığının kendisi hakkında da sorular var. Birdenbire, gereksiz şeyler, tepegöz de dahil olmak üzere berbat durumda.

Stüdyoda tartışma!

 
Renat Fatkhullin :

İşte kodum ve kararlı yürütme sürem: paralel olarak 20 grafikte yüzlerce ve binlerce mikrosaniye yok

Kaç çekirdek ve hangi işlemci var? i7-2600?

8 çekirdek.

 2020.10 . 06 02 : 27 : 59.464 Terminal        MetaTrader 5 x64 build 2630 started for MetaQuotes Software Corp.
2020.10 . 06 02 : 27 : 59.465 Terminal        Windows 10 build 19042 , Intel Core i7- 2700 K  @ 3.50 GHz, 7 / 15 Gb memory, 19 / 29 Gb disk, IE 11 , Admin, GMT+ 3

Paralel olarak milyonlarca istekle tekrar gizli stres testi mi?

Savaş danışmanı olduğunu defalarca söyledi. Çağrı sayısını mümkün olduğunca en aza indirin. Teoride (aptalca ölçmedi) OnTick başına 10 çağrıya kadar.


Şeffaf olun. Birkaç basit _B çağrısı göndermiş olmanız, diğer iddialarınızın kanıtı değil. Abartılı açıklamalar yaptığınız anda kodu ve koşulların gerçek tanımını aniden unutuyorsunuz.

Aklınızda herhangi bir şey hayal etmenize gerek yok - gerçekten ne aradığınızı ve test ettiğinizi söyleyin ve gösterin. Yırtık sonuç "bilinmeyen bir stres testi başlattı ve dünyaya göstermek için bir uyarı bekliyor" değil, testin tam kodu.

Savaş danışmanının sonuçlarını yayınlıyorum. WinAPI dahil 70 mqh dosyası vardır. Sözle değil, ama gerçekten anlayacaksa, kaynak kodunu sağlayacağım. Frenleri oldukça hızlı oynayın.

 
fxsaber :

Tamamen konu dışısın. Diyelim ki OnTick'te iki pozisyon açmamız gerekiyor. İlk OrderSend birkaç milisaniyedir. Bundan sonra, bir anlık görüntü almanız gerekir. Ve sonra ikinci OrderSend'i çağırın.

OnTick tek başına yüzlerce milisaniye sürebilir. Ve bir çeşit OnTimer'da anlık görüntü almayı teklif ediyorsunuz.

Anlık görüntü almayı teklif etmedim, ancak milisaniye zamanlayıcıyla ilgili doğrudan bir soruyu yanıtladım.

Mevcut test cihazında hala 1 saniyelik bir frekansla çalışmasına rağmen öyle. Yazdığımız yeni test cihazında bunu değiştirmeye çalışacağız.
 
fxsaber :

8 çekirdek.

Savaş danışmanı olduğunu defalarca söyledi. Çağrı sayısını mümkün olduğunca en aza indirin. Teoride (aptalca ölçmedi) OnTick başına 10 çağrıya kadar.


Savaş danışmanının sonuçlarını yayınlıyorum. WinAPI dahil 70 mqh dosyası vardır. Sözle değil, ama gerçekten anlayacaksa, kaynak kodunu sağlayacağım. Frenleri oldukça hızlı oynayın.

Anlayalım, kaynak gösterelim.
 
fxsaber :

Stüdyoda tartışma!

Tüm karşılaştırma ölçütünüz çöple aşırı yüklenmiş ve aslında burada onun temiz ve anlaşılır (kod yığmanızın aksine) versiyonu:


//--- benchmark macros
#define _B(_function,_alert_interval)               \
          {                                         \
           ulong _latency= GetMicrosecondCount ();    \
           _function;                               \
           _latency= GetMicrosecondCount ()-_latency; \
           if (_latency > _alert_interval)           \
              :: Alert ( "Time[" + __FILE__ + " " + ( string ) __LINE__ + " in " + __FUNCTION__ + ": " + #_function + "] = " + ( string )_latency + " mсs" ); \
          }



//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick ()
  {
   MqlTick Tick;
   
   _B( SymbolInfoTick ( _Symbol ,Tick), 0 );
   _B( SymbolInfoTick ( _Symbol ,Tick), 0 );
  }

Hangi sorunlarınız var:

  1. okunamayan kod

  2. havai kütleli bir sınıfa bağlanma

  3. yığın depolama maliyeti 50 sonuç
       static bool Set( const string Str )
      {
         if (BENCHMARK::Amount == BENCHMARK::ReserveSize)
          BENCHMARK::ReserveSize = :: ArrayResize (BENCHMARK::Bench, BENCHMARK::ReserveSize + BENCHMARK_RESERVE);
    
        BENCHMARK::Bench[BENCHMARK::Amount++].Set(Str);
    
         return ( true );
      }
    
  4. sonuçları almak - nesne koşum takımında bir sürekli ek yük ve çöp
       static ulong Get( const uint AlertInterval = 0 )
      {
         const int Pos = BENCHMARK::Amount - 1 ;
         const ulong Res = (Pos < 0 ) ? 0 : BENCHMARK::Bench[Pos].Get();
    
         if (Pos >= 0 )
        {
           if (AlertInterval && (Res > AlertInterval))
            :: Alert ( "Time[" + BENCHMARK::Bench[Pos].Str + "] = " + ( string )Res + " mсs." );
    
          BENCHMARK::Amount = Pos;
        }
    
         return (Res);
      }
    


Umarım testler için kod optimizasyonunu kapatmamışsınızdır?

Metaeditor.ini'deki genel Optimize=0 parametresini kastediyorum

 
Renat Fatkhullin :

Tüm karşılaştırma ölçütünüz çöple aşırı yüklenmiş ve aslında burada onun temiz ve anlaşılır (kod yığmanızın aksine) versiyonu:

Sürümünüz, ne yazık ki, rahatlığı anlamanın ilk aşamasında. Elverişli olarak, bu mümkün olduğunda.

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Kitaplıklar: Karşılaştırma

fxsaber , 2020.10.01 23:49

Standart sürümde pürüzlerin nerede olduğunu bulmaya çalışıyoruz. Kaynak kodunda birkaç karakter yazıyoruz.

     for ( long Chart = _B2 (:: ChartFirst ()); (Chart != - 1 ) && !Res; Chart = _B2 (:: ChartNext (Chart)))
      Res = (Chart != chartID) && _B2 (:: ChartGetInteger (Chart, CHART_IS_MAXIMIZED ));

Ve nedenini hemen görüyoruz.

 2020.10 . 02 00 : 45 : 14.113 Alert : Time[Test9.mq5 36 in IsInvisible: :: ChartGetInteger (Chart, CHART_IS_MAXIMIZED )] = 878 mсs.
2020.10 . 02 00 : 45 : 14.114 Alert : Time[Test9.mq5 36 in IsInvisible: :: ChartGetInteger (Chart, CHART_IS_MAXIMIZED )] = 943 mсs.
2020.10 . 02 00 : 45 : 14.114 Alert : Time[Test9.mq5 36 in IsInvisible: :: ChartGetInteger (Chart, CHART_IS_MAXIMIZED )] = 297 mсs.
2020.10 . 02 00 : 45 : 14.116 Alert : Time[Test9.mq5 36 in IsInvisible: :: ChartGetInteger (Chart, CHART_IS_MAXIMIZED )] = 1787 mсs.
2020.10 . 02 00 : 45 : 14.116 Alert : Time[Test9.mq5 35 in IsInvisible: :: ChartNext (Chart)] = 2 mсs.
2020.10 . 02 00 : 45 : 14.117 Alert : Time[Test9.mq5 36 in IsInvisible: :: ChartGetInteger (Chart, CHART_IS_MAXIMIZED )] = 980 mсs.
2020.10 . 02 00 : 45 : 14.117 Alert : Time[Test9.mq5 35 in IsInvisible: :: ChartNext (Chart)] = 2 mсs.
2020.10 . 02 00 : 45 : 14.117 Alert : Time[Test9.mq5 36 in IsInvisible: :: ChartGetInteger (Chart, CHART_IS_MAXIMIZED )] = 59 mсs.
2020.10 . 02 00 : 45 : 14.118 Alert : Time[Test9.mq5 36 in IsInvisible: :: ChartGetInteger (Chart, CHART_IS_MAXIMIZED )] = 803 mсs.
2020.10 . 02 00 : 45 : 14.119 Alert : Time[Test9.mq5 36 in IsInvisible: :: ChartGetInteger (Chart, CHART_IS_MAXIMIZED )] = 1059 mсs.

CHART_IS_MAXIMIZED, yabancı grafikler için yavaşlar. Hata raporu hazır! Kütüphane ile çok kolaydı.


Hangi sorunlarınız var:

  1. okunamayan kod

  2. havai kütleli bir sınıfa bağlanma

  3. yığın depolama maliyeti 50 sonuç
  4. sonuçları almak - nesne koşum takımında bir sürekli ek yük ve çöp

Kullanım kolaylığı, yetersiz ek yükü kapsar. Nasıl uygulandığına dikkatlice bakarsanız yetersizdir. Örneğin, ArrayResize bir ek yüktür, bu nedenle kullanımı minimumda tutulur.

Umarım testler için kod optimizasyonunu kapatmamışsınızdır?

Metaeditor.ini'deki genel Optimize=0 parametresini kastediyorum

Fren modlarıyla ilgilenmiyorum. Savaş danışmanının çalışmalarını izliyorum, elbette hem algoritmik optimizasyona hem de derleyici optimizasyonuna dikkat ediyorum.

 
Renat Fatkhullin :

Tüm karşılaştırma ölçütünüz çöple aşırı yüklenmiş ve aslında burada onun temiz ve anlaşılır (kod yığmanızın aksine) versiyonu:

Hangi sorunlarınız var:

  1. okunamayan kod

  2. havai kütleli bir sınıfa bağlanma

  3. yığın depolama maliyeti 50 sonuç
  4. sonuçları almak - nesne koşum takımında bir sürekli ek yük ve çöp


Umarım testler için kod optimizasyonunu kapatmamışsınızdır?

Metaeditor.ini'deki genel Optimize=0 parametresini kastediyorum

İşte C tarzı, her şey basit ve gerçekten çöpsüz. Örnek için teşekkürler.

C dilinin öğretmenlerinden biri, kullanıcı adlarında _B alt çizgisini kullanmamanın daha iyi olacağını tavsiye etti.
Bu ön ekin kütüphane, program vb. geliştiriciler tarafından kullanılması nedeniyle.
Ve bir kavşağa girmemek için kullanmamanızı tavsiye ettim.

Ve mql5'te isimlerinizle kesişme şansı var mı?
Yoksa kullanıcı adları MQ adlarından tamamen korunuyor mu?

 
Roman :

C dilinin öğretmenlerinden biri, kullanıcı adlarında _B alt çizgisini kullanmamanın daha iyi olacağını tavsiye etti.
Bu ön ekin kütüphane, program vb. geliştiriciler tarafından kullanılması nedeniyle.
Ve bir kavşağa girmemek için kullanmamanızı tavsiye ettim.

"_" ile başlayan adlar C'de hizmet, sistem veya özel adlar olarak kullanılır. Bu durumda bence kabul edilebilir. Çünkü bu fonksiyon kodu korumak ve incelemek için kullanılır.

 
Edgar Akhmadeev :

"_" ile başlayan adlar C'de hizmet, sistem veya özel adlar olarak kullanılır. Bu durumda bence kabul edilebilir. Çünkü bu fonksiyon kodu korumak ve incelemek için kullanılır.

Soru şu ki, mql5'e ek olarak MQ geliştiricisinin hizmet adları da var.