iBarShift'e benzer - sayfa 9

 
Alain Verleyen :

Ne sorunu buldun?

İşte işlevinizin sahte yürütülmesine bir örnek - "BarShift1" adı altında çalışır


 
Aleksey Vyazmikin :

İşte işlevinizin sahte yürütülmesine bir örnek - "BarShift1" adı altında çalışır


Aslında sadece tam tersini gösteriyor, benim versiyonum doğru olan tek versiyon. (Ve bu koddaki orijinal iBarShift1 doğrudur).

Sürümüm, tıpkı mql4 iBarShift gibi bağımsız bir işlev olarak tasarlandı .

Birden çok istek için optimize edilmemiştir, bu nedenle zaman karşılaştırması önemli değildir. @nicholishen toplu arama için optimize edilmiş güzel bir kitaplık yayınladı.


Aslında tam tersini gösteriyor, benim versiyonum doğru olan tek versiyon. (Ayrıca bu koddaki orijinal iBarShift1 doğrudur).

Sürümüm, tam olarak mql4 iBarShift gibi bağımsız bir işlev olarak kullanılmak üzere tasarlandı .

Birden çok istek için optimize edilmemiştir, bu nedenle zaman karşılaştırması önemsizdir. @nicholishen toplu arama için optimize edilmiş iyi bir kitaplık yayınladı.

iBarShift
iBarShift
  • oylar: 46
  • 2013.10.25
  • Alain Verleyen
  • www.mql5.com
Многие ищут функцию iBarShift, которая была в языке MQL4 (например, 1,2,3). В языке MQL5 ее нет, но есть все возможности для ее реализации в виде библиотеки. В качестве альтернативы многие программисты предложили свои варианты реализации этой функции на MQL5. Обнаружилось, что все 4 версии содержат ошибки (не воспроизводят в точности работу...
 
Alain Verleyen :

Aslında sadece tam tersini gösteriyor, benim versiyonum doğru olan tek versiyon. (Ve bu koddaki orijinal iBarShift1 doğrudur).

Sürümüm, tıpkı mql4 iBarShift gibi bağımsız bir işlev olarak tasarlandı .

Birden çok sorgu için optimize edilmemiştir, bu nedenle zaman karşılaştırması önemli değildir. @nicholishen toplu arama için optimize edilmiş güzel bir kitaplık yayınladı.


Aslında tam tersini gösteriyor, benim versiyonum doğru olan tek versiyon. (Ayrıca bu koddaki orijinal iBarShift1 doğrudur).

Sürümüm, tam olarak mql4 iBarShift gibi bağımsız bir işlev olarak kullanılmak üzere tasarlandı .

Birden çok istek için optimize edilmemiştir, bu nedenle zaman karşılaştırması önemsizdir. @nicholishen toplu arama için optimize edilmiş iyi bir kitaplık yayınladı.

İşlem süresinden bahsetmiyorum, bar odasından bahsediyorum.

Resim, 8:37'de kodun, en yakın çubuğun bir önceki günün 23:00'deki çubuk olduğunu düşündüğünü, ancak aslında en yakın çubuğun 10:00 olduğunu gösteriyor. Hem matematikte hem de mantıkta daha yakındır.

 
Aleksey Vyazmikin :

İşlem süresinden bahsetmiyorum, bar numarasından bahsediyorum.

Resim, 8:37'de kodun, en yakın çubuğun bir önceki günün 23:00'deki çubuğu olduğunu düşündüğünü, ancak aslında en yakın çubuğun 10:00 olduğunu gösteriyor. Hem matematikte hem de mantıkta daha yakındır.

basitleştirelim.

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

iBarShift'e benzer

Alain Verleyen , 2018.04.05 00:18

Aslında sadece tam tersini gösteriyor, benim versiyonum doğru olan tek versiyon. (Ve bu koddaki orijinal iBarShift1 doğrudur).

Sürümüm, tıpkı mql4 iBarShift gibi bağımsız bir işlev olarak tasarlandı .

mql4, karşılaştır, aynı şeyi deneyin.
 
Alain Verleyen :
basitleştirelim.
mql4, karşılaştır, aynı şeyi deneyin.

Argümanınızı anladım. kontrol etmeyeceğim. Görünüşe göre, bu benim görevim genel kabul görmüş mantıktan farklı.

 
Alain Verleyen :

Ne sorunu buldun?

Bunu yazmayalı uzun zaman oldu. Hatırlamıyorum ama bir şey beni rahatsız etti.
Her durumda, şimdi sadece bir acil durum buldum.
Sembol üzerindeki veriler henüz yüklenmediğinde -1 döndürebilir, ancak 0 olmalıdır.

Bu, eklediğim MQL4 komut dosyası kullanılarak doğrulanabilir.

Bu komut dosyası rastgele bir zaman ve rastgele bir zaman aralığı alır. iBarShiftX değeri varsayılan iBarShift işleviyle eşleşmiyorsa , Yazdır yoluyla mesaj.

Bu betiği yeni açılan bir sembol üzerinde çalıştırırsanız, hatalar görürsünüz. Komut dosyasını aynı sembol üzerinde yeniden başlatmak hata vermez.

Ama bu önemsiz bir şey. Benim versiyonumda da aynı sorun var.

Sürümünüzle ilgili tek bir şikayetim var: çok karmaşık ve yavaş.

İşte seçeneğiniz:

 int iBarShift2( 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)
       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 );
  }

Ve işte aynı şeyi yapan, ancak basit bir algoritma ile ve çok daha hızlı olan işlevim:

   int iBarShift1( const string Symb, const ENUM_TIMEFRAMES TimeFrame, datetime time)
  {
   return ( Bars (Symb,TimeFrame,time+ 1 , UINT_MAX ));
  }

Bir işlev olmadan daha da kısa kullanılabilir:

 Bars (Symb,TimeFrame,time+ 1 , UINT_MAX );

Aksini kanıtlamaya çalışın. Sizin ve benimki farklı değerler gösterdiğinde en az bir parametre kombinasyonu bulun.

Sadece içindeki son kesin parametreyi uygulamadım, çünkü neden gerekli olduğunu anlamıyorum. Şahsen, buna hiç ihtiyacım olmadı.

Ancak birinin gerçekten ihtiyacı varsa, uygulayabilirsiniz.

iBarShift3 seçeneğini bıraktım çünkü. tarihteki boşlukları yanlış bir şekilde yerine getirir. Düzeltebilirsin, ama noktayı göremiyorum çünkü. yukarıdakiler yeterlidir.

Dosyalar:
 
Nikolai Semko :


iBarShift3 seçeneğini bıraktım çünkü. tarihteki boşlukları yanlış bir şekilde yerine getirir. Düzeltebilirsin, ama noktayı göremiyorum çünkü. yukarıdakiler yeterlidir.

Barda veya diğerlerinde ticaret olmaması nedeniyle delikler? Ve yanlışlık nedir?

 
Aleksey Vyazmikin :

Barda veya diğerlerinde ticaret olmaması nedeniyle delikler? Ve yanlışlık nedir?

Pazar gününü ticaretin olmadığı herhangi bir zamanda ele alalım:

 Print ( "iBarShift  = " + IntegerToString ( iBarShift ( _Symbol , PERIOD_H1 , D'01.04.2018 10:00:00' )));  
Print ( "iBarShift3 = " + IntegerToString (iBarShift3( _Symbol , PERIOD_H1 , D'01.04.2018 10:00:00' ))); // показывает на единицу меньше
 
Nikolai Semko :

Pazar gününü ticaretin olmadığı herhangi bir zamanda ele alalım:

Onlar. Pazartesi gösterir? İşte buna ihtiyacım var... :)

 
Benim işlevimi denemeyeceksin. Orada zamanla barların başlangıcını ve bitişini ortadan kaldıran bir çözüm uygulandı. Görünüşe göre her şey doğru. Ve zaman açısından, 3. sürüm en hızlınızdır. Yoksa şube mi daha önemli?))) Yoksa hatalar da mı var?) Uzun zamandır kullanıyorum....