iBarShift'e benzer - sayfa 7

 

İşte tüm TF'lerde en hızlı, doğru çalışma seçeneği:

 int iBarShift3( const string Symb, const ENUM_TIMEFRAMES TimeFrame, datetime time)
  {
   static int Res=- 1 ;
   static string LastSymb= NULL ;
   static ENUM_TIMEFRAMES LastTimeFrame= 0 ;
   static datetime LastTime= 0 ;
   static int PerSec=:: PeriodSeconds (LastTimeFrame);

   if (LastTimeFrame!=TimeFrame) PerSec=:: PeriodSeconds (TimeFrame);
   if (TimeFrame< PERIOD_D1 ) time-=time%PerSec;

   if ((time!=LastTime) || (Symb!=LastSymb) || (TimeFrame!=LastTimeFrame))
     {
      Res=:: Bars (Symb,TimeFrame,time, UINT_MAX );
       if (TimeFrame< PERIOD_D1 ) Res--;
       if (Res< 0 ) Res= 0 ;

      LastTime = time;
      LastSymb = Symb;
      LastTimeFrame=TimeFrame;
     }

   return (Res);
  }

TF D1, W1 ve MN1 için hız yavaşlıyor

Ve burada, farklı sürümlerin gelişimini ve hızlarını açıkça gösteren bir test göstergesi (ikinci basamak. Sayı ne kadar küçükse, işlev o kadar hızlı)


Seçenek 3 ve 4'ü doğru bir şekilde çalışın. Ama 3 daha hızlı.

CopyTime ile seçenekler en yavaş olanlardır.

Bu, MQL4'te kontrol edilebilir (gösterge ekli)

Farklı seçeneklerin yazarlığını belirtmiyorum, çünkü zaten karıştı.
Ancak üçüncü, en çok çalışan seçenek, @fxsaber gibi %80'dir. Sadece biraz geliştirdim.

Dosyalar:
 
Nikolai Semko :

Seçenek 3 ve 4'ü doğru bir şekilde çalışın. Ama 3 daha hızlı. CopyTime ile seçenekler en yavaş olanlardır.

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

"Bir tüccar için LifeHack: Tanımlar üzerinde ForEach yoğurmak (#define)" makalesinin tartışılması

fxsaber , 2018.02.14 11:58

ZY Fonksiyonların hızının ölçülmesi, performansın önemli olduğu bir ortamda ölçülmelidir - Test Cihazı.

 
fxsaber :

Evet, burada ölçümler özellikle önemli değil. Ve böylece mantığın en hızlı olduğu açıktır.

 
Nikolai Semko :

İşte tüm TF'lerde en hızlı, doğru çalışma seçeneği:

TF D1, W1 ve MN1 için hız yavaşlıyor

Ve burada, farklı sürümlerin gelişimini ve hızlarını açıkça gösteren bir test göstergesi (ikinci basamak. Sayı ne kadar küçükse, işlev o kadar hızlı)


Seçenek 3 ve 4'ü doğru bir şekilde çalışın. Ama 3 daha hızlı.

CopyTime ile seçenekler en yavaş olanlardır.

Bu, MQL4'te kontrol edilebilir (gösterge ekli)

Farklı seçeneklerin yazarlığını belirtmiyorum, çünkü zaten karıştı.
Ancak üçüncü, en çok çalışan seçenek, @fxsaber gibi %80'dir. Sadece biraz geliştirdim.

Göstergenize TF eklendi - ilk iki algoritma genellikle kullanılamaz..

Rakamlarda, mevcut TF H1'dir ve hesaplama günlüktür.



 
Renat Akhtyamov :
Evet (vurgulanmış)

-1 eksi (belirtilecek) olan bir birimdir, fonksiyon tarafından döndürülen hata böyle bir çubuk olmadığını gösterir

bu benim işlevim

ayrıca iyileştirmeye ihtiyacı var

rağmen...

Belgeler:

" not

Bars() işlevi çağrılırken belirtilen parametrelere sahip zaman serisi verileri henüz terminalde oluşturulmamışsa veya zaman serisi verileri, işlev çağrısı sırasında ticaret sunucusuyla senkronize edilmemişse, o zaman işlev null döndürür. "

====

res==0 ise, fonksiyondan -1 yakalarız.

===

Yani her şey çalışıyor, sağlığınız için kullanın!

Yukarıdaki göstergede, bu yöntemin nasıl yalan söylediğini açıkça görebilirsiniz.

 
Nikolai Semko :

İşte tüm TF'lerde en hızlı, doğru çalışma seçeneği:

TF D1, W1 ve MN1 için hız yavaşlıyor

Ve burada, farklı sürümlerin gelişimini ve hızlarını açıkça gösteren bir test göstergesi (ikinci basamak. Sayı ne kadar küçükse, işlev o kadar hızlı)


Seçenek 3 ve 4'ü doğru bir şekilde çalışın. Ama 3 daha hızlı.

CopyTime ile seçenekler en yavaş olanlardır.

Bu, MQL4'te kontrol edilebilir (gösterge ekli)

Farklı seçeneklerin yazarlığını belirtmiyorum, çünkü zaten karıştı.
Ancak üçüncü, en çok çalışan seçenek, @fxsaber gibi %80'dir. Sadece biraz geliştirdim.

iBarShift3 seçeneği düzgün çalışmıyor.

 

Seçimimi koru. Hem genç hem de kıdemli çerçevelerle çalışıyor gibi görünüyor. Hız, ibarshift3'ten biraz daha yüksektir.


int iBarShift(dize sembolü, ENUM_TIMEFRAMES zaman çerçevesi, tarihsaat saat){

tarihsaat t1 = TimeCurrent()+10000000;

int ps = PeriodSeconds(zaman aralığı);

double div = zaman/(double)ps;

çift mant = div - MathFloor(div);

int ret = Çubuklar(sembol, zaman çerçevesi, (tarihsaat)(zaman-(ps*mant))), t1)-1;

dönüş(ret);

}

 
Vitaly Muzichenko :

iBarShift3 seçeneği düzgün çalışmıyor.

Çalışmayan bir şeye örnek verebilir misiniz?

Yani sadece dördüncü seçenek mi kalıyor?

 
Vitaly Muzichenko :

iBarShift3 seçeneği düzgün çalışmıyor.

Kelime hazinesi bizim her şeyimizdir.

 
Nikolai Semko :

Kelime hazinesi bizim her şeyimizdir.

Hemen kontrol ettim: Bir günden fazla süredir çalışan bir fonksiyon var, onun yerine iBarShift3'ü değiştirdim ve EA'nın yanlış çalışmasını sağladım. Bundan şu sonuca vardı.

İşte benim kullandığım

 int iBarShift ( string symbol, ENUM_TIMEFRAMES timeframe, datetime time, bool exact= false ) {
 datetime LastBAR;
   if (! SeriesInfoInteger (symbol,timeframe, SERIES_LASTBAR_DATE ,LastBAR)) {
   datetime opentimelastbar[ 1 ];
     if ( CopyTime (symbol,timeframe, 0 , 1 ,opentimelastbar)== 1 )
      LastBAR=opentimelastbar[ 0 ];
     else
       return (- 1 );
  }
//--- if time > LastBar we always return 0
   if (time>LastBAR)
     return ( 0 );
//---
 int shift= Bars (symbol,timeframe,time,LastBAR);
 datetime checkcandle[ 1 ];

   if ( CopyTime (symbol,timeframe,time, 1 ,checkcandle)== 1 ) {
   if (checkcandle[ 0 ]==time)
     return (shift- 1 );
   else if (exact && time>checkcandle[ 0 ]+ PeriodSeconds (timeframe))
     return (- 1 );
   else
     return (shift);
  }
   return (- 1 );
 }
Neden: