iBarShift'e benzer - sayfa 2

 
Burada iBarShift() analogunun iki çeşidi vardır: 5. gönderi ve 7. gönderi
 
Denis :

Çubuklar işlevi , çubukların sayısını döndürür. 9 indeksli çubuğun indeksini almamız gerektiğinde (totoloji için üzgünüm), 10 dönecektir, çünkü ilk çubuğun indeksi 0'dır.
Evet, teşekkürler. Genel olarak, doğru ekleme-açıklama budur. Doğru, gerçekten rahatsız etmiyorum, sadece bunun bir bar miktarı olduğunu biliyorum. Ve programın bir indekse ihtiyacı varsa, ancak o zaman bir tane çıkarırım.
 
Vasiliy Pushkaryov :
Burada iBarShift() analogunun iki çeşidi vardır: 5 numaralı gönderi ve 7 numaralı gönderi
Sadece bir seçenek:
 Bars ( NULL , 0 , t, 32000000000 )-1;

Mevcut sembol ve zaman çerçevesi için iBarShift analogu için en kısa ve en hızlı çözüm ve ek işlevler gerektirmez. Ancak, güncel olmayanlar için de sıfır yerine ilk iki parametreyi doldurmanız yeterlidir.
 
Nikolai Semko :
Sadece bir seçenek:

iBarShift analogu için mevcut sembol ve mevcut zaman çerçevesi için en kısa ve en hızlı çözüm ve ek işlevler gerektirmez.

Ancak her durumda düzgün çalışmayacaktır. fxsaber'dan GetBarShift() daha çok yönlüdür.

İşlevinize t yerine TimeCurrent() koymayı deneyin, sonucu kendiniz göreceksiniz.

 
Vasiliy Pushkaryov :

Ancak her durumda düzgün çalışmayacaktır. fxsaber'dan GetBarShift() daha çok yönlüdür.

İşlevinize t yerine TimeCurrent() koymayı deneyin, sonucu kendiniz göreceksiniz.

Sonuç aynı olacak
 
Nikolai Semko :
Sonuç aynı olacak
kontrol bile etmedin
 
Vasiliy Pushkaryov :
kontrol bile etmedin
Bundan önce birçok kez kontrol ettim ve bu yüzden sadece biliyorum. Ama kendin bile denemedin.
 
Nikolai Semko :
Daha önce birçok kez kontrol ettim ve bu yüzden biliyorum. Ama kendin bile denemedin.

İşte senaryo

 void OnStart ()
{
   int idShort = Bars ( NULL , 0 , TimeCurrent (), 32000000000 )- 1 ;
   int idUni = GetBarShift( _Symbol , 0 , TimeCurrent ());
   Print ( "idShort = " , idShort, " idUni=" , idUni);
}


//+------------------------------------------------------------------------------------------------------------------+
//| 
//+------------------------------------------------------------------------------------------------------------------+
int GetBarShift( const string symbol_name, const ENUM_TIMEFRAMES timeframe, const datetime time) 
{
   int res=- 1 ;
   datetime last_bar;
  
   // --- время открытия последнего бара по символу, периоду
   if ( SeriesInfoInteger (symbol_name, timeframe, SERIES_LASTBAR_DATE , last_bar)) 
  {
     if (time > last_bar) res = 0 ;
     else 
    {
       const int shift = Bars (symbol_name, timeframe, time, last_bar);
       if (shift > 0 ) res = shift- 1 ;
    }
  }
   return res;
}

Sadece asılı kalıyor. Tablodan zorla sildiğimde sonucu alıyorum.


Ben de denedim, sana tavsiyede bulundum. Ama kullandığın ve sana yakıştığı için seni ikna etmeyeceğim.

 

Eh, bu da mümkün

 int iBarShift ( string symbol, ENUM_TIMEFRAMES timeframe, datetime tm)
   {
        datetime tm0[ 1 ];      
         CopyTime (symbol,timeframe, 0 , 1 ,tm0);
        int res= Bars (symbol,timeframe,tm0[ 0 ],tm)- 1 ;
         return (res);
   }
 
iBarShift
iBarShift
  • oylar: 42
  • 2013.10.25
  • Alain Verleyen
  • www.mql5.com
Многие ищут функцию iBarShift, которая была в языке MQL4. В языке MQL5 ее нет, но есть все возможности для ее реализации в виде библиотеки.