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

 
fxsaber :

Sevgili geliştiriciler, MQL_MEMORY_USED'in nasıl hesaplandığını bize anlatır mısınız?

Tüm EA değişkenlerinin kapladığı belleği hesapladım.

Bu %10'dan az. Doğru anlarsam, MQL_MEMORY_USED, Geçmiş önbelleğini ve CopyTicks önbelleğini içerir. Ama yine de çok daha az sürmelidir.

Aynı zamanda, paralel danışman birkaç kat daha az yer. Prensip aynı olmasına rağmen.

Genel olarak, bu değere neler dahildir?


Not: Şablonu danışmanla birlikte kaydettim ve aynı grafiğe uygulayarak yeniden başlatmaya neden oldum. Öyle oldu.

Bellek tüketimi neredeyse büyüklük sırasına göre değişti. Bunun ne anlama geldiğini açıklamak zor.

Bellek kullanımının kümülatif etkisi birçok programdadır. Tarayıcılar bununla günah işler, aynı Word, bazen yapabilir. Terminal de günah işler. Ek olarak, herkes varsayılan günlükler yazar ve çok fazla eylem varsa, o zaman bir haftada bir konserde uçup gitmek kolaydır. Bu, kontrol edilmesi gereken bir kötülüktür. Gerçek nasıl belli değil.

 
Vladimir Pastushak :

Belki bir finansal enstrümanı programlı olarak nasıl seçeceğinizi ve yüzyıllarca takılıp kalmayacağınızı biliyorsunuzdur?

gösterge aracılığıyla

Особенности языка mql5, тонкости и приёмы работы
Особенности языка mql5, тонкости и приёмы работы
  • 2020.10.22
  • www.mql5.com
В данной теме будут обсуждаться недокументированные приёмы работы с языком mql5, примеры решения тех, или иных задач...
 

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

MT5 ve iş başında hız

Renat Fatkhullin , 2020.10.14 04:15

Kenelerle toplu çalışma için daha fazla bellek ayarlayın.

Analitik ve araştırma söz konusu olduğunda 4 GB (fiyatı 20 Euro) 2020'de iyi değil.

Market ürünleri için bu yaklaşım iyi değildir. Böyle bir koltuk değneği ile gereksiz verilerin 10 saniyelik bellekte tutulmasını atlamanız gerekir.

       while (! IsStopped () && :: TerminalInfoInteger ( TERMINAL_MEMORY_USED ) > inMaxMemory)
      {
         Alert (":: TerminalInfoInteger ( TERMINAL_MEMORY_USED ) = " + ( string ):: TerminalInfoInteger ( TERMINAL_MEMORY_USED ));
        
         Sleep ( 1000 );
      }

Önemsiz bir Market ürününü Market Screener şeklinde yapmak, aşırı bellek tüketimi nedeniyle aslında MT5 için uygun bir görev değildir.

 
fxsaber :

Önemsiz bir Market ürününü Market Screener şeklinde yapmak, aşırı bellek tüketimi nedeniyle aslında MT5 için uygun bir görev değildir.

Terminal, başlatıldıktan sonra çok fazla bellek tüketiyor.

Screener'ın çalıştırılmasından sonra 2 gigabayt yemeye başladı (TERMINAL_MEMORY_USED ve zamanla azalmadı). Bu, 5000 M1-çubuk için yalnızca bir açık grafikle.


Ekran görüntüsü kaydedilmedi. Ancak, Terminal'in aptalca olduğu yerde kendi belleğini tükettiğini gösteren bir örnek atmaya karar verdim.

 // Создание копий оригинальных символов из Обзора рынка в виде пользовательских.
#property script_show_inputs

input datetime inStartTime = D'2020.06.01' ; // С какого времени закачивать тики

void OnStart ()
{
   for ( int i = SymbolsTotal ( true ) - 1 ; ! IsStopped () && (i >= 0 ); i--)
  {
     const string Symb = SymbolName (i, true );
    
     if (! SymbolInfoInteger (Symb, SYMBOL_CUSTOM )) // Если символ не кастомный.
    {
       Alert (Symb + " - Start." );
      
       MqlTick Ticks[];
      
       if ( CopyTicksRange (Symb, Ticks, COPY_TICKS_ALL , ( long )inStartTime * 1000 ) > 0 ) // Взяли с него тики.
      {
         const string CustomSymb = "CUSTOM_" + Symb;
      
         if ( SymbolInfoInteger (CustomSymb, SYMBOL_EXIST ) || CustomSymbolCreate (CustomSymb, AccountInfoString ( ACCOUNT_SERVER ), Symb)) // Содали кастомный.
        {
           Alert (( string )i + ": " + Symb + " - " + ( string ) CustomTicksReplace (CustomSymb, 0 , LONG_MAX , Ticks)); // Поместили в него тики.
          
           SymbolSelect (CustomSymb, true );
        }
       }
    }
  }
}


Komut dosyası, Market Watch'tan orijinal sembollerin kopyalarını çıkarır. MQ-Demo'daki tüm sembolleri eklemem ve bu betiği ilk kez soğuk bir senaryoda ve ardından tekrar sıcak bir senaryoda çalıştırmam gerekiyordu.

Ve sıcak (keneler zaten SSD'de tkc dosyaları biçimindeyken) başlatıldıktan sonra, uygun uygulama ile hiç gerekli olmayan yerlerde vahşi bellek tüketimini gözlemleyeceğim.


Ancak scripti çalıştırırken MQ-Demo'da asılı kaldığı gerçeğiyle karşılaştım. Yalnızca Anormal sonlandırma yoluyla kaldırılır, bundan sonra Terminal 1 GB'den fazla bellek serbest bırakmaz.


Bu ekranı başlangıçtaki ekranla karşılaştırmak kolaydır.

 

Üzgünüz, bunun bir hata mı yoksa bir özellik mi olduğundan emin değilim. Cevabı kendim bulamadım. Ancak soru performansla ilgili ve bence bu soruyu burada sormak daha iyi.

Örneğin, boş bir göstergeye DRAW_SECTION türünde 22 arabellek eklenirse, böyle bir gösterge 1.000.000 çubuk veya daha fazla olan bir grafikte başlatıldığında, terminal oldukça yavaşlamaya başlar (ayrıca üzerinde gözle görülür bir yük vardır). CPU) ve gösterge hiçbir şey hesaplamasa bile gözle görülür miktarda RAM tüketin.

Benim ilgi alanım, diğer türlerle arabellek kullanırsanız, her şeyin sorunsuz çalışması ve böyle bir yavaşlama olmamasıydı.

Örneğin, aşağıdaki gösterge kodunu 1.000.000 çubuk içeren tek bir grafikte çalıştırdım ve terminal yaklaşık 500 MB yedi ve özellikle grafiğin kendisi olmak üzere gözle görülür şekilde gecikti.

 #property indicator_chart_window

#property indicator_buffers    22
#property indicator_plots      22

#property indicator_type1      DRAW_SECTION
#property indicator_type2      DRAW_SECTION
#property indicator_type3      DRAW_SECTION
#property indicator_type4      DRAW_SECTION
#property indicator_type5      DRAW_SECTION
#property indicator_type6      DRAW_SECTION
#property indicator_type7      DRAW_SECTION
#property indicator_type8      DRAW_SECTION
#property indicator_type9      DRAW_SECTION
#property indicator_type10      DRAW_SECTION
#property indicator_type11      DRAW_SECTION
#property indicator_type12      DRAW_SECTION
#property indicator_type13      DRAW_SECTION
#property indicator_type14      DRAW_SECTION
#property indicator_type15      DRAW_SECTION
#property indicator_type16      DRAW_SECTION
#property indicator_type17     DRAW_SECTION
#property indicator_type18     DRAW_SECTION
#property indicator_type19     DRAW_SECTION
#property indicator_type20     DRAW_SECTION
#property indicator_type21     DRAW_SECTION
#property indicator_type22     DRAW_SECTION

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit ()
{  
   return INIT_SUCCEEDED ;   
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
{
   return rates_total;
}

Ancak arabellek türünü örneğin DRAW_LINE olarak değiştirirseniz, işlemci üzerindeki yük keskin bir şekilde düşer, gecikme olmaz ve RAM 5 kat daha az tüketilir (yaklaşık 100 MB tüketilir).

 #property indicator_chart_window

#property indicator_buffers    22
#property indicator_plots      22

#property indicator_type1      DRAW_LINE
#property indicator_type2      DRAW_LINE
#property indicator_type3      DRAW_LINE
#property indicator_type4      DRAW_LINE
#property indicator_type5      DRAW_LINE
#property indicator_type6      DRAW_LINE
#property indicator_type7      DRAW_LINE
#property indicator_type8      DRAW_LINE
#property indicator_type9      DRAW_LINE
#property indicator_type10      DRAW_LINE
#property indicator_type11      DRAW_LINE
#property indicator_type12      DRAW_LINE
#property indicator_type13      DRAW_LINE
#property indicator_type14      DRAW_LINE
#property indicator_type15      DRAW_LINE
#property indicator_type16      DRAW_LINE
#property indicator_type17     DRAW_LINE
#property indicator_type18     DRAW_LINE
#property indicator_type19     DRAW_LINE
#property indicator_type20     DRAW_LINE
#property indicator_type21     DRAW_LINE
#property indicator_type22     DRAW_LINE

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit ()
{  
   return INIT_SUCCEEDED ;   
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
{
   return rates_total;
}   

2019 yapılarına kadar farklı yapılar üzerinde benzer testler yaptım ve durum aynı.

Bunun neyle bağlantılı olduğunu bilmekten minnettar olurum ve prensipte normal midir?
 
fxsaber :

Bireysel bir vatandaş aldı   geniş pantolonlardan   Aynı koşullar altında koltuk değneğinin standart işlevden daha hızlı çalıştığını gösteren paha biçilmez kargo MQL kodunun bir kopyası .

Çok basit test:

 //+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick ()
  {
   TestSymbolInfoTick();
   TestPositionSelectByTicket();
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void TestSymbolInfoTick()
  {
   MqlTick Tick;
//---
   ulong start,end,max_time= 0 ,avr_time= 0 ,counter= 0 ;
   int    count= 100000 ;
   for ( int i= 0 ; i<count; i++)
     {
      start= GetMicrosecondCount ();
       SymbolInfoTick ( _Symbol , Tick);
      end= GetMicrosecondCount ()-start;
       //---
       if (end>max_time)
         max_time=end;
       if (end> 100 )
        {
         avr_time+=end;
         counter++;
        }
     }
   Print ( "SymbolInfoTick max bad time: " , DoubleToString (max_time/ 1000.0 , 3 ), " ms; avr bad time: " ,counter ? DoubleToString (avr_time/ 1000.0 /counter, 3 ): "0" , " ms; bad iterations: " ,counter, " total iterations: " ,count);
  }  
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void TestPositionSelectByTicket()
  {
//---
   ulong start,end,max_time= 0 ,avr_time= 0 ,counter= 0 ;
   int    count= 100000 ;
   for ( int i= 0 ; i<count; i++)
     {
      start= GetMicrosecondCount ();
      GetBid();
      end= GetMicrosecondCount ()-start;
       //---
       if (end>max_time)
         max_time=end;
       if (end> 100 )
        {
         avr_time+=end;
         counter++;
        }
     }
   Print ( "GetBid max bad time: " , DoubleToString (max_time/ 1000.0 , 3 ), " ms; avr bad time: " ,counter ? DoubleToString (avr_time/ 1000.0 /counter, 3 ): "0" , " ms; bad iterations: " ,counter, " total iterations: " ,count);
  }

EURUSD'de 20 Uzman Danışman, yani. tüm OnTick'ler aynı anda işlenebilir. Terminal derleme 2664. Testi optimizasyon, derleme vb. olmadan çalıştırın. %100 işlemcide ekstra yükleme - böyle bir arka plana karşı gerçek bir "hft" ticareti yapmayacaksınız, değil mi?

Tipik test günlüğü:

 2020.10 . 29 11 : 10 : 49.133 SymbolInfoTick (EURUSD,M15)     GetBid max bad time: 28.004 ms; avr bad time: 0.393 ms; bad iterations: 1569 total iterations: 100000
2020.10 . 29 11 : 10 : 49.136 SymbolInfoTick (EURUSD,H1)      GetBid max bad time: 4.795 ms; avr bad time: 0.361 ms; bad iterations: 1783 total iterations: 100000
2020.10 . 29 11 : 10 : 49.137 SymbolInfoTick (EURUSD,M15)     GetBid max bad time: 25.367 ms; avr bad time: 0.425 ms; bad iterations: 1496 total iterations: 100000
2020.10 . 29 11 : 10 : 49.138 SymbolInfoTick (EURUSD,M15)     GetBid max bad time: 2.681 ms; avr bad time: 0.352 ms; bad iterations: 1804 total iterations: 100000
2020.10 . 29 11 : 10 : 49.139 SymbolInfoTick (EURUSD,M15)     GetBid max bad time: 4.264 ms; avr bad time: 0.370 ms; bad iterations: 1734 total iterations: 100000
2020.10 . 29 11 : 10 : 49.142 SymbolInfoTick (EURUSD,H1)      GetBid max bad time: 7.049 ms; avr bad time: 0.362 ms; bad iterations: 1803 total iterations: 100000
2020.10 . 29 11 : 10 : 49.142 SymbolInfoTick (EURUSD,M15)     GetBid max bad time: 13.376 ms; avr bad time: 0.365 ms; bad iterations: 1754 total iterations: 100000
2020.10 . 29 11 : 10 : 49.144 SymbolInfoTick (EURUSD,H1)      GetBid max bad time: 18.048 ms; avr bad time: 0.417 ms; bad iterations: 1516 total iterations: 100000
2020.10 . 29 11 : 10 : 49.144 SymbolInfoTick (EURUSD,M15)     GetBid max bad time: 21.280 ms; avr bad time: 0.372 ms; bad iterations: 1769 total iterations: 100000
2020.10 . 29 11 : 10 : 53.837 SymbolInfoTick (EURUSD,M15)     SymbolInfoTick max bad time: 0.631 ms; avr bad time: 0.143 ms; bad iterations: 205 total iterations: 100000
2020.10 . 29 11 : 10 : 53.837 SymbolInfoTick (EURUSD,M15)     SymbolInfoTick max bad time: 0.517 ms; avr bad time: 0.134 ms; bad iterations: 170 total iterations: 100000
2020.10 . 29 11 : 10 : 53.837 SymbolInfoTick (EURUSD,M15)     SymbolInfoTick max bad time: 0.483 ms; avr bad time: 0.144 ms; bad iterations: 178 total iterations: 100000
2020.10 . 29 11 : 10 : 53.838 SymbolInfoTick (EURUSD,M15)     SymbolInfoTick max bad time: 0.517 ms; avr bad time: 0.147 ms; bad iterations: 182 total iterations: 100000
2020.10 . 29 11 : 10 : 53.844 SymbolInfoTick (EURUSD,H1)       SymbolInfoTick max bad time: 0.582 ms; avr bad time: 0.134 ms; bad iterations: 165 total iterations: 100000
2020.10 . 29 11 : 10 : 53.845 SymbolInfoTick (EURUSD,H1)       SymbolInfoTick max bad time: 0.518 ms; avr bad time: 0.137 ms; bad iterations: 195 total iterations: 100000
2020.10 . 29 11 : 10 : 53.845 SymbolInfoTick (EURUSD,M15)     SymbolInfoTick max bad time: 0.530 ms; avr bad time: 0.139 ms; bad iterations: 160 total iterations: 100000
2020.10 . 29 11 : 10 : 53.846 SymbolInfoTick (EURUSD,M15)     SymbolInfoTick max bad time: 0.575 ms; avr bad time: 0.138 ms; bad iterations: 143 total iterations: 100000
2020.10 . 29 11 : 10 : 53.848 SymbolInfoTick (EURUSD,M15)     SymbolInfoTick max bad time: 0.593 ms; avr bad time: 0.143 ms; bad iterations: 206 total iterations: 100000
2020.10 . 29 11 : 10 : 53.849 SymbolInfoTick (EURUSD,M15)     SymbolInfoTick max bad time: 0.446 ms; avr bad time: 0.138 ms; bad iterations: 147 total iterations: 100000
2020.10 . 29 11 : 10 : 53.850 SymbolInfoTick (EURUSD,M15)     SymbolInfoTick max bad time: 0.661 ms; avr bad time: 0.146 ms; bad iterations: 191 total iterations: 100000
2020.10 . 29 11 : 10 : 53.850 SymbolInfoTick (EURUSD,H1)       SymbolInfoTick max bad time: 0.471 ms; avr bad time: 0.141 ms; bad iterations: 219 total iterations: 100000
2020.10 . 29 11 : 10 : 53.851 SymbolInfoTick (EURUSD,M15)     SymbolInfoTick max bad time: 0.442 ms; avr bad time: 0.137 ms; bad iterations: 198 total iterations: 100000
2020.10 . 29 11 : 10 : 53.851 SymbolInfoTick (EURUSD,M15)     SymbolInfoTick max bad time: 0.574 ms; avr bad time: 0.140 ms; bad iterations: 215 total iterations: 100000
2020.10 . 29 11 : 10 : 53.853 SymbolInfoTick (EURUSD,H1)       SymbolInfoTick max bad time: 0.507 ms; avr bad time: 0.140 ms; bad iterations: 222 total iterations: 100000
2020.10 . 29 11 : 10 : 53.857 SymbolInfoTick (EURUSD,H1)       SymbolInfoTick max bad time: 0.776 ms; avr bad time: 0.165 ms; bad iterations: 341 total iterations: 100000
2020.10 . 29 11 : 10 : 53.858 SymbolInfoTick (EURUSD,M15)     SymbolInfoTick max bad time: 0.568 ms; avr bad time: 0.156 ms; bad iterations: 381 total iterations: 100000
2020.10 . 29 11 : 10 : 53.860 SymbolInfoTick (EURUSD,M15)     SymbolInfoTick max bad time: 0.896 ms; avr bad time: 0.164 ms; bad iterations: 293 total iterations: 100000
2020.10 . 29 11 : 10 : 53.861 SymbolInfoTick (EURUSD,M15)     SymbolInfoTick max bad time: 6.124 ms; avr bad time: 0.178 ms; bad iterations: 219 total iterations: 100000
2020.10 . 29 11 : 10 : 53.862 SymbolInfoTick (EURUSD,M15)     SymbolInfoTick max bad time: 0.794 ms; avr bad time: 0.164 ms; bad iterations: 356 total iterations: 100000
2020.10 . 29 11 : 10 : 54.686 SymbolInfoTick (EURUSD,M15)     GetBid max bad time: 4.870 ms; avr bad time: 0.339 ms; bad iterations: 1575 total iterations: 100000
2020.10 . 29 11 : 10 : 54.728 SymbolInfoTick (EURUSD,M15)     GetBid max bad time: 6.442 ms; avr bad time: 0.343 ms; bad iterations: 1691 total iterations: 100000
2020.10 . 29 11 : 10 : 54.732 SymbolInfoTick (EURUSD,M15)     GetBid max bad time: 7.568 ms; avr bad time: 0.349 ms; bad iterations: 1671 total iterations: 100000
2020.10 . 29 11 : 10 : 54.755 SymbolInfoTick (EURUSD,M15)     GetBid max bad time: 13.354 ms; avr bad time: 0.365 ms; bad iterations: 1634 total iterations: 100000
2020.10 . 29 11 : 10 : 54.773 SymbolInfoTick (EURUSD,M15)     GetBid max bad time: 9.385 ms; avr bad time: 0.352 ms; bad iterations: 1734 total iterations: 100000
2020.10 . 29 11 : 10 : 54.778 SymbolInfoTick (EURUSD,M15)     GetBid max bad time: 2.526 ms; avr bad time: 0.342 ms; bad iterations: 1748 total iterations: 100000
2020.10 . 29 11 : 10 : 54.785 SymbolInfoTick (EURUSD,M15)     GetBid max bad time: 15.195 ms; avr bad time: 0.356 ms; bad iterations: 1708 total iterations: 100000
2020.10 . 29 11 : 10 : 54.790 SymbolInfoTick (EURUSD,H1)      GetBid max bad time: 5.180 ms; avr bad time: 0.347 ms; bad iterations: 1796 total iterations: 100000
 
Anton :

Çok basit test:

EURUSD'de 20 Uzman Danışman, yani. tüm OnTick'ler aynı anda işlenebilir. Terminal derleme 2664. Testi optimizasyon, derleme vb. olmadan çalıştırın. %100 işlemcide ekstra yükleme - böyle bir arka plana karşı gerçek bir "hft" ticareti yapmayacaksınız, değil mi?

Tipik test günlüğü:

Aynı tik üzerinde 1,5 saniye içerisinde 100K iterasyon yaparak sera koşulları yaratırsınız. Özellikle OnTick oluşturmayan keneleri bekledim.

Alım satım günlüklerime baktığımda, SymbolInfoTick'in birkaç milisaniye içinde yürütüldüğünü fark ettim. Aynı zamanda, o anda tam bir Boşta CPU olduğunu %100 biliyorum.


Her şey çok basit. Koşullu olarak günde 1 milyon kene. %0,01 tiklerde bile frenler - gecikmeli günde 100 tik. Bunun saçmalık olduğunu söyleyeceksin. Kötüyüm. Sipariş vermem gerektiğinde gecikme yaşarsam, bu potansiyel bir para kaybıdır.


Bu konunun gözden kaçmadığı için çok minnettarım ve özellikle bu özellik üzerinde hızlandırmak için çok çalışma yapılmıştır. Ancak, bazı durumlarda korkunç bir koltuk değneğinin normal işlevi geride bırakabilmesi benim için biraz beklenmedik bir şeydi. Ve belki de, bu birikimi çözer ve ortadan kaldırırsanız, o zaman günde 100 potansiyel gecikme 10'a dönüşür.


Şube başlangıcından çok daha iyi hale geldiğini söylüyorum. Ama gerçek şu ki - iyi olmadığı anlar var. Ve bunu anlamak istemediğinizi görüyorum. Seçiminize saygı duyuyorum.


Yukarıda güncel fiyatları almak için anlık görüntü seçeneği verdim. Boşta-CPU makinesinde milisaniyelik gecikmeler yakalamasaydı bana tamamen uyuyordu.

Ayrıca SymbolInfoTick'in sadece hızından değil, aynı zamanda verdiği fiyatların uygunluğundan da endişe duyuyorum. Bu konuyu gündeme getirmediğinizi görüyorum. Görünüşe göre, daha sonra bakmaya karar verdiler.

 
fxsaber :

Aynı tik üzerinde 1,5 saniye içerisinde 100K iterasyon yaparak sera koşulları yaratırsınız. Özellikle OnTick oluşturmayan keneleri bekledim.

Alım satım günlüklerime baktığımda, SymbolInfoTick'in birkaç milisaniye içinde yürütüldüğünü fark ettim. Aynı zamanda, o anda tam bir Boşta CPU olduğunu %100 biliyorum.

Her şey çok basit. Koşullu olarak günde 1 milyon kene. %0,01 tiklerde bile frenler - gecikmeli günde 100 tik. Bunun saçmalık olduğunu söyleyeceksin. Kötüyüm. Sipariş vermem gerektiğinde gecikme yaşarsam, bunlar potansiyel parasal kayıplardır.

Bu konunun gözden kaçmadığı için çok minnettarım ve özellikle bu özellik üzerinde hızlandırmak için çok çalışma yapılmıştır. Ancak, bazı durumlarda korkunç bir koltuk değneğinin normal işlevi geride bırakabilmesi benim için biraz beklenmedik bir şeydi. Ve belki de, bu birikimi çözüp ortadan kaldırırsanız, o zaman günde 100 potansiyel gecikme 10'a dönüşecektir.

Şube başlangıcından çok daha iyi hale geldiğini söylüyorum. Ama gerçek şu ki - iyi olmadığı anlar var. Ve bunu anlamak istemediğinizi görüyorum. Seçiminize saygı duyuyorum.

Yukarıda güncel fiyatları almak için anlık görüntü seçeneği verdim. Idle-CPU makinesinde milisaniyelik gecikmeleri yakalamasaydı bana çok yakışırdı.

Ayrıca SymbolInfoTick'in yalnızca hızıyla değil, aynı zamanda verdiği fiyatların uygunluğuyla da ilgileniyorum. Bu konuyu gündeme getirmediğinizi görüyorum. Görünüşe göre, daha sonra bakmaya karar verdiler.

Bunlar hiç de sıcak koşullar değil. Sleep() ve benzeri olmadan ve aynı anda 20 iş parçacığında 100.000 fiyat talebi için bir döngü, bariz bir stres testidir. Gerçek koşullarda böyle bir şey yakın bile olmamalıdır.

Diğer kenelerin 1,5 saniyede gelmediğini düşünüyorsanız - tamam, 10 milyon istekte bulunun, bu hiçbir şeyi değiştirmez, "koltuk değneğiniz" daha kötü çalışır:
NG       0        10 : 26 : 22.903      SymbolInfoTick (EURUSD,M15)     SymbolInfoTick max bad time: 2.223 ms; avr bad time: 0.146 ms; bad iterations: 22369 total iterations: 10000000
OK       0        10 : 26 : 22.934      SymbolInfoTick (EURUSD,M15)     SymbolInfoTick max bad time: 1.759 ms; avr bad time: 0.144 ms; bad iterations: 22462 total iterations: 10000000
KO       0        10 : 26 : 22.944      SymbolInfoTick (EURUSD,M15)     SymbolInfoTick max bad time: 4.587 ms; avr bad time: 0.145 ms; bad iterations: 22620 total iterations: 10000000
RS       0        10 : 26 : 23.443      SymbolInfoTick (EURUSD,M15)     SymbolInfoTick max bad time: 8.433 ms; avr bad time: 0.162 ms; bad iterations: 36242 total iterations: 10000000
LG       0        10 : 26 : 23.487      SymbolInfoTick (EURUSD,M15)     SymbolInfoTick max bad time: 9.660 ms; avr bad time: 0.163 ms; bad iterations: 36378 total iterations: 10000000
KH       0        10 : 26 : 23.492      SymbolInfoTick (EURUSD,H1)       SymbolInfoTick max bad time: 8.433 ms; avr bad time: 0.163 ms; bad iterations: 36208 total iterations: 10000000
HK       0        10 : 26 : 23.505      SymbolInfoTick (EURUSD,M15)     SymbolInfoTick max bad time: 14.355 ms; avr bad time: 0.164 ms; bad iterations: 36292 total iterations: 10000000
QN       0        10 : 27 : 26.728      SymbolInfoTick (EURUSD,M15)     GetBid max bad time: 18.589 ms; avr bad time: 0.373 ms; bad iterations: 122026 total iterations: 10000000
HQ       0        10 : 27 : 27.042      SymbolInfoTick (EURUSD,H1)      GetBid max bad time: 15.544 ms; avr bad time: 0.371 ms; bad iterations: 123026 total iterations: 10000000
RD       0        10 : 27 : 29.190      SymbolInfoTick (EURUSD,H1)      GetBid max bad time: 16.207 ms; avr bad time: 0.370 ms; bad iterations: 127228 total iterations: 10000000
QJ       0        10 : 27 : 32.661      SymbolInfoTick (EURUSD,M15)     SymbolInfoTick max bad time: 7.465 ms; avr bad time: 0.495 ms; bad iterations: 994 total iterations: 10000000
CL       0        10 : 27 : 32.799      SymbolInfoTick (EURUSD,H1)       SymbolInfoTick max bad time: 16.999 ms; avr bad time: 0.585 ms; bad iterations: 1081 total iterations: 10000000
EP       0        10 : 27 : 33.056      SymbolInfoTick (EURUSD,H1)       SymbolInfoTick max bad time: 11.774 ms; avr bad time: 0.515 ms; bad iterations: 1122 total iterations: 10000000
EE       0        10 : 27 : 33.555      SymbolInfoTick (EURUSD,M15)     GetBid max bad time: 17.385 ms; avr bad time: 0.368 ms; bad iterations: 134761 total iterations: 10000000
FG       0        10 : 27 : 35.581      SymbolInfoTick (EURUSD,M15)     SymbolInfoTick max bad time: 10.428 ms; avr bad time: 0.502 ms; bad iterations: 373 total iterations: 10000000
CJ       0        10 : 27 : 46.372      SymbolInfoTick (EURUSD,M15)     GetBid max bad time: 14.278 ms; avr bad time: 0.360 ms; bad iterations: 153668 total iterations: 10000000
QO       0        10 : 27 : 46.819      SymbolInfoTick (EURUSD,M15)     GetBid max bad time: 12.494 ms; avr bad time: 0.361 ms; bad iterations: 154170 total iterations: 10000000
KP       0        10 : 27 : 46.897      SymbolInfoTick (EURUSD,M15)     GetBid max bad time: 17.176 ms; avr bad time: 0.362 ms; bad iterations: 154258 total iterations: 10000000
PE       0        10 : 27 : 47.560      SymbolInfoTick (EURUSD,M15)     GetBid max bad time: 14.090 ms; avr bad time: 0.362 ms; bad iterations: 156325 total iterations: 10000000
LF       0        10 : 27 : 47.946      SymbolInfoTick (EURUSD,M15)     GetBid max bad time: 16.794 ms; avr bad time: 0.367 ms; bad iterations: 160557 total iterations: 10000000
IH       0        10 : 27 : 47.970      SymbolInfoTick (EURUSD,H1)      GetBid max bad time: 11.241 ms; avr bad time: 0.366 ms; bad iterations: 160307 total iterations: 10000000
KN       0        10 : 27 : 51.026      SymbolInfoTick (EURUSD,M15)     SymbolInfoTick max bad time: 4.961 ms; avr bad time: 0.333 ms; bad iterations: 687 total iterations: 10000000
FP       0        10 : 27 : 51.517      SymbolInfoTick (EURUSD,M15)     GetBid max bad time: 19.844 ms; avr bad time: 0.372 ms; bad iterations: 165266 total iterations: 10000000
LE       0        10 : 27 : 51.574      SymbolInfoTick (EURUSD,M15)     GetBid max bad time: 15.435 ms; avr bad time: 0.371 ms; bad iterations: 165785 total iterations: 10000000
QE       0        10 : 27 : 51.686      SymbolInfoTick (EURUSD,H1)      GetBid max bad time: 13.601 ms; avr bad time: 0.371 ms; bad iterations: 166278 total iterations: 10000000
CK       0        10 : 27 : 52.204      SymbolInfoTick (EURUSD,M15)     GetBid max bad time: 15.480 ms; avr bad time: 0.374 ms; bad iterations: 161441 total iterations: 10000000
FL       0        10 : 27 : 52.262      SymbolInfoTick (EURUSD,M15)     GetBid max bad time: 19.503 ms; avr bad time: 0.374 ms; bad iterations: 161363 total iterations: 10000000
FQ       0        10 : 27 : 52.504      SymbolInfoTick (EURUSD,M15)     GetBid max bad time: 15.440 ms; avr bad time: 0.375 ms; bad iterations: 161927 total iterations: 10000000
KQ       0        10 : 27 : 52.507      SymbolInfoTick (EURUSD,H1)      GetBid max bad time: 20.155 ms; avr bad time: 0.375 ms; bad iterations: 161670 total iterations: 10000000
EG       0        10 : 27 : 52.558      SymbolInfoTick (EURUSD,M15)     GetBid max bad time: 15.634 ms; avr bad time: 0.371 ms; bad iterations: 167511 total iterations: 10000000
OK       0        10 : 27 : 52.751      SymbolInfoTick (EURUSD,M15)     GetBid max bad time: 14.698 ms; avr bad time: 0.368 ms; bad iterations: 168482 total iterations: 10000000
LL       0        10 : 27 : 53.941      SymbolInfoTick (EURUSD,M15)     GetBid max bad time: 16.659 ms; avr bad time: 0.364 ms; bad iterations: 171194 total iterations: 10000000
JP       0        10 : 27 : 58.244      SymbolInfoTick (EURUSD,M15)     SymbolInfoTick max bad time: 12.019 ms; avr bad time: 0.308 ms; bad iterations: 970 total iterations: 10000000
OD       0        10 : 27 : 58.879      SymbolInfoTick (EURUSD,M15)     SymbolInfoTick max bad time: 7.972 ms; avr bad time: 0.299 ms; bad iterations: 1094 total iterations: 10000000
CE       0        10 : 28 : 06.402      SymbolInfoTick (EURUSD,M15)     GetBid max bad time: 14.140 ms; avr bad time: 0.342 ms; bad iterations: 56289 total iterations: 10000000
EK       0        10 : 28 : 06.860      SymbolInfoTick (EURUSD,H1)      GetBid max bad time: 14.013 ms; avr bad time: 0.344 ms; bad iterations: 56008 total iterations: 10000000
QL       0        10 : 28 : 06.922      SymbolInfoTick (EURUSD,H1)      GetBid max bad time: 11.626 ms; avr bad time: 0.343 ms; bad iterations: 56676 total iterations: 10000000
ER       0        10 : 28 : 07.010      SymbolInfoTick (EURUSD,M15)     GetBid max bad time: 13.021 ms; avr bad time: 0.340 ms; bad iterations: 51610 total iterations: 10000000
ER       0        10 : 28 : 08.708      SymbolInfoTick (EURUSD,M15)     GetBid max bad time: 2.970 ms; avr bad time: 0.317 ms; bad iterations: 24083 total iterations: 10000000

Bu ifadeniz %100 yanlıştır:

Просматривая логи своей торговли, замечаю исполнение SymbolInfoTick в течение нескольких миллисекунд. При этом на 100% знаю, что в этот момент был полный Idle CPU.

Daha önceki açıklamanız gibi:

Уверен, что могу доказать, что получение текущих цен у Вас реализовано очень медленно. И CPU-нагрузка создает такие тормоза только из-за неправильной реализации Вами самой главной функции в MQL5.

SymbolInfoTick aracılığıyla fiyatlara erişim artık çok hızlıdır ve tik akışı işlemeden tamamen ayrılmıştır. Çok ekonomik ve hızlı bir şekilde güncellenen hazır fiyat önbelleği ile çalışıyorsunuz.

Tüm "tiklerin %0,01'inde frenler" yalnızca stres testi koşulları altında görünür ve bu mükemmel bir sonuçtur. Normal koşullar altında, erişimin çok hızlı olması garanti edilir.

SymbolInfoTick'i "hızlandırmak için çok çalışma yapıldığını" kabul ediyorsanız, o zaman bana, PositionSelectByTicket üzerinden fiyat almanın "koltuk değneğinin" en iyi çözüm olmayabileceğine inanmalısınız.

Basit bir nedenden dolayı - PositionSelectByTicket'in uygulanması, SymbolInfoTick'in orijinal "yavaş" uygulanmasıyla tamamen aynıdır.

Yukarıda yazdığım gibi, bu uygulama kelimenin tam anlamıyla yavaş değildir, ancak yoğun CPU yükü altında, daha yüksek çalışma zamanı ani yükselme olasılığına sahiptir (ki bu, son testimde açıkça görülmektedir).

Burada, zamanlamalar yüksek oranda sistem görev zamanlayıcısının yük altındaki çalışmasına bağlıdır, yani. farklı işletim sistemlerinde ve hatta sürümlerinde farklılıklar olabilir.

Yük ne kadar büyükse, terminalin değil görev zamanlayıcının verimliliğini o kadar çok test edersiniz.

SymbolInfoTick'in bu performansı konusunu kapatıyorum.

Uzmanlarınız sentetik stres testleri düzeyinde bir yük oluşturuyorsa, o zaman tek bir çözüm var: "Donanım görevlere uygun olmalı."

 

SymbolInfoTick tarafından sağlanan kenelerin alaka düzeyi hakkında bir sorum var.

Durum:

1. TimeCurretn() yapın; 18:00:00 saatini al

2. Kötü tanımlanmış bir sembol üzerinde SymbolInfoTick yapıyoruz. Saat 17:58:00 olan bir tik alıyoruz.

3.Uyku(1)

4. Kötü tanımlanmış bir sembol üzerinde SymbolInfoTick yapmak. Saat 17:59:00 ile bir onay işareti alıyoruz.


Yani dördüncü paragrafta, TimeCurretn()'den bir dakika farklı olan yeni bir onay işareti aldık.

Bu durumda bir sorun görüyor musunuz?

Böyle bir duruma daha az nasıl girilir?

 
pivomoe :

SymbolInfoTick tarafından sağlanan kenelerin alaka düzeyi hakkında bir sorum var.

Durum:

1. TimeCurretn() yapın; 18:00:00 saatini al

2. Kötü tanımlanmış bir sembol üzerinde SymbolInfoTick yapmak. Saat 17:58:00 olan bir tik alıyoruz.

3.Uyku(1)

4. Kötü tanımlanmış bir sembol üzerinde SymbolInfoTick yapmak. Saat 17:59:00 ile bir onay işareti alıyoruz.


Yani dördüncü paragrafta, TimeCurretn()'den bir dakika farklı olan yeni bir onay işareti aldık.

Bu durumda bir sorun görüyor musunuz?

Böyle bir duruma daha az nasıl girilir?

SymbolInfoTick , aracının sunucusundan alınan verileri döndürür. Sunucunun gönderdiği şey, aldığınız şeydir.

Aracı kurumunuzun yayınladığı onay akışı hakkında sorularınız varsa, aracı kurumunuza başvurmalısınız.

Neden: