МQL5'te Aç,Düşük,Yüksek,Kapat parametreleri nasıl alınır? - sayfa 9

 
Renat Akhtyamov :

4-rke'ye alışkınım, ayak bezleri daha kompakt ve daha okunaklı

;)

ilk sayfada benim kompakt örneğim var .. prensipte her şey onunla başladı)))

 
Igor Makanu :

hmm, bence bitleri baytlara dönüştürmek istemiyorsunuz... prensipte başka seçenek yok! ))))

konu moderatörün gözetimi altındaysa, bir şeyler yapılması gerekiyor ... "yedek parça için" makroyu kaldırdım,

Artem, işe yarıyor mu?

2019.07.30 19:42:16.639 tst_iXXX_Kopya (EURUSD,H1) 1 numaralı testi başlat...

2019.07.30 19:42:40.199 tst_iXXX_Kopya (EURUSD,H1) CopyClose : döngüler=500000000 , ms=23422

2019.07.30 19:42:40.199 tst_iXXX_Kopya (EURUSD,H1) 2. testi başlat...

2019.07.30 19:43:26.953 tst_iXXX_Kopya (EURUSD,H1) iClose : döngüler=500000000 , ms=46609

2019.07.30 19:43:26.953 tst_iXXX_Kopya (EURUSD,H1) 3 numaralı testi başlat...

2019.07.30 19:44:12.274 tst_iXXX_Kopya (EURUSD,H1) Kapat[i] : döngüler=500000000 , ms=45156

2019.07.30 19:44:12.274 tst_iXXX_Kopya (EURUSD,H1) 4 numaralı testi başlat...

2019.07.30 19:44:42.080 tst_iXXX_Kopya (EURUSD,H1) CopyRates : döngüler=500000000 , ms=29656

2019.07.30 19:44:42.080 tst_iXXX_Kopya (EURUSD,H1) son komut dosyası

Evet, şu şekilde çalışır:

 2019.07 . 31 00 : 38 : 01.936 Start test № 1 ...
2019.07 . 31 00 : 38 : 31.097 CopyClose : loops= 500000000 , ms= 29015
2019.07 . 31 00 : 38 : 31.097 Start test № 2 ...
2019.07 . 31 00 : 41 : 25.095 iClose : loops= 500000000 , ms= 173875
2019.07 . 31 00 : 41 : 25.095 Start test № 3 ...
2019.07 . 31 00 : 44 : 29.777 Close[i] : loops= 500000000 , ms= 184547
2019.07 . 31 00 : 44 : 29.777 Start test № 4 ...
2019.07 . 31 00 : 45 : 01.074 CopyRates : loops= 500000000 , ms= 31172
2019.07 . 31 00 : 45 : 01.074 End script

Sonuçta:

  • 29 saniye
  • 173 saniye iClose()
  • 184 saniye
  • 31 saniye

Sorun nedir? Neden altı kattan fazla bir farkım var?

ZY, D1'de piyasaya sürüldü

 
Artyom Trishkin :

Sorun nedir? Neden altı kattan fazla bir farkım var?


Igor Makanu :

hmm, bence bitleri baytlara dönüştürmek istemiyorsunuz ... prensipte başka seçenek yok! ))))

)))

 

Igor Makanu :

hmm, bence bitleri baytlara dönüştürmek istemiyorsunuz ... prensipte başka seçenek yok! ))))

)))

H1 için test ettim, gözle görülür bir fark yok:

 2019.07 . 31 00 : 55 : 30.290 Start test № 1 ...
2019.07 . 31 00 : 55 : 58.234 CopyClose : loops= 500000000 , ms= 27812
2019.07 . 31 00 : 55 : 58.234 Start test № 2 ...
2019.07 . 31 00 : 58 : 59.095 iClose : loops= 500000000 , ms= 180734
2019.07 . 31 00 : 58 : 59.095 Start test № 3 ...
2019.07 . 31 01 : 02 : 06.834 Close[i] : loops= 500000000 , ms= 187610
2019.07 . 31 01 : 02 : 06.834 Start test № 4 ...
2019.07 . 31 01 : 02 : 38.365 CopyRates : loops= 500000000 , ms= 31406
2019.07 . 31 01 : 02 : 38.365 End script

ve baytlı bitler burada ne tarafta?

 
Artyom Trishkin :

ve baytlı bitler burada ne tarafta?

Peki, bilgisayarınızın muhtemelen aptal olduğunu söylemeyeceğim?

Birkaç kez test ettim, Roman test etti - sonuçlar orantılı

bu test için, sabit sürücünün hızı kritik olmamalıdır, fazla bir şey kalmamıştır: OS ve donanım = bellek + CPU, bir şeyin yavaşladığı yerde,

elbette bazı "iç dünya" core i3'te bir seçenek var, Core ™ i3-4170 gibi bir işlemcim var

 
Igor Makanu :

Peki, bilgisayarınızın muhtemelen aptal olduğunu söylemeyeceğim?

Birkaç kez test ettim, Roman test etti - sonuçlar orantılı

bu test için, sabit sürücünün hızı kritik olmamalıdır, fazla bir şey kalmamıştır: OS ve donanım = bellek + CPU, bir şeyin yavaşladığı yerde,

elbette bazı "iç dünya" core i3'te bir seçenek var, Core ™ i3-4170 gibi bir işlemcim var

Zamanlayıcıdaki olay kontrolünün sabit olduğu ikinci sembolde bir test danışmanım var. Bunun bir şekilde etkilediği varsayılabilir. Ve yalnızca -CopyXXX olmayan işlevlerde. Onu henüz listeden çıkarmak için bir neden yok - varlığı, şu anki işlerim için bu testten daha önemli.

 
Artyom Trishkin :

H1 için test ettim, somut bir fark yok:

Geliştiriciler bir keresinde, ilk beşteki yeni iXXX işlevlerinin, CopyXXX işlevleri için yalnızca bir sarmalayıcı olduğunu söyledi.

Bu nedenle, tek sorgulardaki fark beklenmemelidir.

 
Renat Akhtyamov :
İşlevlerin hızına ilişkin karar nedir - hangisi daha hızlı?
 //+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
int Count= 5000000 ; // кол-во проходов
//---
void OnStart ( void )
  {
   Print ( "Bench_1: " ,Bench_1(Count), " msc" );
   Print ( "Bench_2: " ,Bench_2(Count), " msc" );
  }
//+------------------------------------------------------------------+
//| Bench_1                                                                 |
//+------------------------------------------------------------------+
ulong Bench_1( const int _count)
  {
   const ulong   StartTime= GetMicrosecondCount ();
//---
   for ( int i= 0 ; i<Count;i++)
     {
       datetime time  = iTime ( Symbol (), Period (), 0 );
       double    open  = iOpen ( Symbol (), Period (), 0 );
       double    high  = iHigh ( Symbol (), Period (), 0 );
       double    low   = iLow ( Symbol (), Period (), 0 );
       double    close = iClose ( NULL , PERIOD_CURRENT , 0 );
       long      volume= iVolume ( Symbol (), 0 , 0 );
     }
//---
   return ( GetMicrosecondCount () - StartTime);
  }
//+------------------------------------------------------------------+
//| Bench_2                                                                 |
//+------------------------------------------------------------------+
ulong Bench_2( const int _count)
  {
   datetime   time[];
   double     open[];   // Open (цены открытия бара)
   double     high[];   // High (цены максимума бара)
   double     low[];     // Open (цены минимума бара)
   double     close[];     // Open (цены минимума бара)
   long       volume[]; // Close (цены закрытия бара)

   const ulong   StartTime= GetMicrosecondCount ();
//---
   for ( int i= 0 ; i<Count;i++)
     {
       CopyTime ( Symbol (), Period (), 1 , 1 ,time);
       CopyOpen ( Symbol (), Period (), 1 , 1 ,open);
       CopyHigh ( Symbol (), Period (), 1 , 1 ,high);
       CopyLow ( Symbol (), Period (), 1 , 1 ,low);
       CopyClose ( Symbol (), Period (), 1 , 1 ,close);
       CopyTickVolume ( Symbol (), Period (), 1 , 1 ,volume);
//---
       datetime _time  = time[ 0 ];
       double    _open  = open[ 0 ];
       double    _high  = high[ 0 ];
       double    _low   = low[ 0 ];
       double    _close = close[ 0 ];
       long      _volume= volume[ 0 ];
     
}
//---
   return ( GetMicrosecondCount () - StartTime);
  }
//+------------------------------------------------------------------+
Senaryoyu kimin yazdığını hatırlamıyorum
 
Igor Makanu :

Evet, aynı şekilde çalışıyorlar, deneyler için IMHO deneyleri ... işte yarım milyar kez son test çağrısı, peki, farkı görebilirsiniz, bir dakikada kaç kene olduğunu bulmak için kalır (~ 60) , saatte kaç tıklama (~ 3600) ve günde kaç tane (~ 86400) ve bu 23 saniyenin kaç tanesi yarım milyar çağrıya dönüşecek ...

5.787 gün = 23 saniye kâr? her tikte en hızlı işlevi kullanırsak ! ))))))

IMHO, uygun olanı kullan ve kimseyi dinleme

Test etmeyi ve optimizasyonu unuttum, Igor. Hız orada.

 
Andrey Khatimlianskii :

Test etmeyi ve optimizasyonu unuttum, Igor. Hız orada.

peki, evet ... sadece ekip bu konuyu tartışırken ciddi değil, bu yüzden tüm bunlar neden kafamdan tamamen uçtu)))

Haklısın! - ancak bunu yapmak için CopyOpen() işlevlerini uygun bir şekilde kullanmanız gerekir ... ve CopyOpen() çağrısını ek bir işleve sararsanız, performans kazancı kaybedilebilir\

Not: IMHO, genel olarak, her yerde olduğu gibi - montajcıda yazıyorsunuz, uzun bir gelişme elde ediyorsunuz ve son performansın 15 dakikada yazdığım C ++ kullanmaktan daha yüksek olacağı bir gerçek değil - yapmanız gerekiyor Kontrol