Yeni bir çubuk nasıl tespit edilir - sayfa 2

 
Ian Harris :

Merhaba oneillj,

Zaten cevap verdiğimi sanıyordum, ama görünüşe göre internet eterinde kayboldu.

Sağladığınız kod parçası, hemen hemen ilk başta şikayet ettiğim kod parçası. Neden bu kadar karmaşık? Sadece daha kolay bir yolu olması gerektiğini düşündüm. İşe yaramış gibi görünen bununla geldim. Yanılıyorsam lütfen beni düzeltin. (Ayrıca BarsCalculated kullanmayı denedim , ancak her zaman Bars'a eşitti, bu nedenle test her zaman false olarak değerlendirildi.)

statik int LastBarCount = 0;
if (Barlar(_Symbol, _Period) > LastBarCount)
LastBarCount = Çubuklar(_Symbol, _Period);
başka
dönüş;

;-) Ian

Mümkün olduğunca basit bir şeye ihtiyacımız olduğuna tamamen katılıyorum.

Ne yazık ki bu kod benim için MQL5'te çalışmıyor gibi görünüyor.

 
RoboSpider :
Ne yazık ki bu MQL5'te çalışmıyor gibi görünüyor.

Çubuklar zaten yeni bir çubuğu tespit etmenin kötü bir yolu olurdu.

Yeni bir çubuğu kontrol etmenin tek güvenilir yolu zamanı kullanmaktır. Hacim değil, fiyatlar değil, çubuklar değil.

static datetime LastBar =  0 ;
datetime  ThisBar = ( datetime ) SeriesInfoInteger ( _Symbol , PERIOD_CURRENT , SERIES_LASTBAR_DATE );
if (LastBar != ThisBar)
  {
    printf ( "New bar: %s" , TimeToString (ThisBar));
   LastBar = ThisBar;
  }
 
honest_knave :

Çubuklar zaten yeni bir çubuğu tespit etmenin kötü bir yolu olurdu.

Yeni bir çubuğu kontrol etmenin tek güvenilir yolu zamanı kullanmaktır. Hacim değil, fiyatlar değil, çubuklar değil.

static datetime LastBar =  0 ;
datetime  ThisBar = ( datetime ) SeriesInfoInteger ( _Symbol , PERIOD_CURRENT , SERIES_LASTBAR_DATE );
if (LastBar != ThisBar)
  {
    printf ( "New bar: %s" , TimeToString (ThisBar));
   LastBar = ThisBar;
  }
Sen benim kahramanımsın!
 
honest_knave Çubuklar zaten yeni bir çubuğu tespit etmenin kötü bir yolu olurdu. Yeni bir çubuğu kontrol etmenin tek güvenilir yolu zamanı kullanmaktır. Hacim değil, fiyatlar değil, çubuklar değil.
  1. Çubuklar güvenilmezdir (yenileme/yeniden bağlanma, grafikteki çubukların sayısını değiştirebilir), hacim güvenilmezdir (kayıp tikler,) Fiyat güvenilmezdir (yinelenen fiyatlar ve == işlenen. - MQL4 forumu .) Daima zamanı kullanın. Yeni mum - MQL4 forumu
 
honest_knave :

Çubuklar zaten yeni bir çubuğu tespit etmenin kötü bir yolu olurdu.

Yeni bir çubuğu kontrol etmenin tek güvenilir yolu zamanı kullanmaktır. Hacim değil, fiyatlar değil, çubuklar değil.

static datetime LastBar =  0 ;
datetime  ThisBar = ( datetime ) SeriesInfoInteger ( _Symbol , PERIOD_CURRENT , SERIES_LASTBAR_DATE );
if (LastBar != ThisBar)
  {
    printf ( "New bar: %s" , TimeToString (ThisBar));
   LastBar = ThisBar;
  }

Sadece bilgi amaçlı, referanslarımda şu not var:

//-- Bazen SERIES_LASTBAR_DATE ile SeriesInfoInteger bir hata döndürür,

Bu uzun zaman önceydi ve bu işlevi yıllardır kullanmıyorum/test etmiyorum, bu yüzden belki de durum böyle değil. Ancak yeni bir çubuğu algılamak için kullanmak istiyorsanız, muhtemelen kontrol etmek daha iyidir ;-)

 
Alain Verleyen :

Sadece bilgi amaçlı, referanslarımda şu not var:

//-- Bazen SERIES_LASTBAR_DATE ile SeriesInfoInteger bir hata döndürür,

Bu uzun zaman önceydi ve bu işlevi yıllardır kullanmıyorum/test etmiyorum, bu yüzden belki de durum böyle değil. Ancak yeni bir çubuğu algılamak için kullanmak istiyorsanız, muhtemelen kontrol etmek daha iyidir ;-)

Bu çok gizemli Alain! Ne tür hatalar?

Bu durumda, kemerler ve kuşaklar için ya aramadan önce SeriesInfoInteger >0 ve/veya ResetLastError'ı, ardından çağrıdan sonra _LastError'ı kontrol edin.

Veya başka bir yer için zaman kaynağını alın, örneğin OnCalculate'de ise time[] veya CopyTime vb.

 

Neden basitçe böyle bir şey kullanmıyorsunuz:

   static datetime prevTime= 0 ;
           datetime lastTime[ 1 ];
           if ( CopyTime ( _Symbol , _Period , 0 , 1 ,lastTime)== 1 && prevTime!=lastTime[ 0 ])
          {
               prevTime=lastTime[ 0 ];
              
               // ...
          }
Her durumda çalışması gerekir (CopyTime() ile bir hata olsa bile, bir tuzaktan kaçınır)
 
honest_knave :

Bu çok gizemli Alain! Ne tür hatalar?

Bu durumda, kemerler ve kuşaklar için ya aramadan önce SeriesInfoInteger >0 ve/veya ResetLastError'ı, ardından çağrıdan sonra _LastError'ı kontrol edin.

Veya başka bir yer için zaman kaynağını alın, örneğin OnCalculate'de ise time[] veya CopyTime vb.

Ben sadece bunu yıllar önce kullandığımda SeriesInfoInteger()'in gerçekten güvenilir olmadığını söylüyorum. Bu bilgilerle ne yapacağınızı görmek size kalmış :-D
 
Alain Verleyen :
Ben sadece bunu yıllar önce kullandığımda SeriesInfoInteger()'in gerçekten güvenilir olmadığını söylüyorum. Bu bilgilerle ne yapacağınızı görmek size kalmış :-D

Çok fazla TBH değil - MT5'te yeni bir çubuk tespit etmem gerekmiyor Ama paylaşım için teşekkürler - Gelecek için aklımda tutacağım.

İnsanların aşırı derecede karmaşık hale getirdiği bir şeyi basitleştirmeye çalışıyordum.

Bununla birlikte, ilke kalır: zamanı kullanın. Uyarı: Alain'in eksik tarihsel notlarını göz önünde bulundurarak kendi tehlikenizde zaman kazanma yönteminizi seçin (bu arada XP Service Pack 1 nasıl görünüyor?)

 
honest_knave :

Çok değil TBH - MT5'te yeni bir çubuk tespit etmem gerekmiyor Ama paylaşım için teşekkürler - Gelecek için aklımda olacak.

İnsanların aşırı derecede karmaşık hale getirdiği bir şeyi basitleştirmeye çalışıyordum.

Bununla birlikte, ilke kalır: zamanı kullanın. Uyarı: Alain'in eksik tarihsel notlarını göz önünde bulundurarak kendi tehlikenizde zaman kazanma yönteminizi seçin (bu arada XP Service Pack 1 nasıl görünüyor?)

Neden: