iBarShift

Zamana göre bar arama. İşlev, belirtilen zamana karşılık gelen çubuğun dizinini döndürür.

int  iBarShift(
   const string        symbol,          // Sembol
   ENUM_TIMEFRAMES     timeframe,       // Periyot
   datetime            time,            // Zaman
   bool                exact=false      // Mod
   );

Parametreler

symbol

[in]  Finansal enstrümanın sembol ismi. NULL şimdiki sembol anlamına gelir.

timeframe

[in]  Periyot. ENUM_TIMEFRAMES  sayısının değerlerinden biri olabilir. PERIOD_CURRENT şimdiki grafik periyodu anlamına gelir.

time

[in]  Arama için zaman değeri.

exact=false

[in]  Belirtilen zamana sahip çubuğun bulunmaması durumunda bir dönüş değeri. Eğer exact=false, iBarShift en yakın barın indeksini döndürür, Açık kalma süresi belirtilen süreden daha azsa (time_open<time). Böyle bir çubuk bulunmazsa (belirtilen zamandan önce geçmiş mevcut değil), işlev -1 döndürür. Eğer exact=true, iBarShift en yakın çubuğu aramaz ancak hemen -1 döndürür.

Return Value

Belirtilen zamana karşılık gelen çubuğun indeksi. Belirtilen zamana karşılık gelen çubuk bulunmazsa (tarihte bir boşluk vardır), işlev -1 değerini veya en yakın çubuğun indisini ( 'exact' değerine bağlı olarak döndürür.

Örnek:

//+------------------------------------------------------------------+
//| Script programı başlatma fonksiyonu                              |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- Tarih Pazardır.
   datetime time=D'2002.04.25 12:00';
   string symbol="GBPUSD";
   ENUM_TIMEFRAMES tf=PERIOD_H1;
   bool exact=false;
//--- Belirtilen zamanda herhangi bir çubuk yoksa, iBarShift en yakın çubuğun dizinini döndürür
   int bar_index=iBarShift(symbol,tf,time,exact);
//--- IBarShift() çağrısından sonra hata kodunu kontrol edin
   int error=GetLastError();
   if(error!=0)
     {
      PrintFormat("iBarShift(): GetLastError=%d - The requested date %s "+
                  "for %s %s is not found in the available history",
                  error,TimeToString(time),symbol,EnumToString(tf));
      return;
     }
//--- IBarShift() işlevi başarılı bir şekilde yürütüldü, exact=false için bir sonuç döndürdü
   PrintFormat("1. %s %s %s(%s): bar index is %d (exact=%s)",
               symbol,EnumToString(tf),TimeToString(time),
               DayOfWeek(time),bar_index,string(exact));
   datetime bar_time=iTime(symbol,tf,bar_index);
   PrintFormat("Time of bar #%d is %s (%s)",
               bar_index,TimeToString(bar_time),DayOfWeek(bar_time));
//--- Çubuğun endeksini belirtilen süre ile isteyin; bar yoksa -1 iade edilir
   exact=true;
   bar_index=iBarShift(symbol,tf,time,exact);
//--- IBarShift() işlevi başarıyla yürütüldü, exact=true için bir sonuç döner
   PrintFormat("2. %s %s %s (%s):bar index is %d (exact=%s)",
               symbol,EnumToString(tf),TimeToString(time)
               ,DayOfWeek(time),bar_index,string(exact));
  }
//+------------------------------------------------------------------+
//| Haftanın gününün ismini döndürme                                 |
//+------------------------------------------------------------------+
string DayOfWeek(const datetime time)
  {
   MqlDateTime dt;
   string day="";
   TimeToStruct(time,dt);
   switch(dt.day_of_week)
     {
      case 0: day=EnumToString(SUNDAY);
      break;
      case 1: day=EnumToString(MONDAY);
      break;
      case 2: day=EnumToString(TUESDAY);
      break;
      case 3: day=EnumToString(WEDNESDAY);
      break;
      case 4: day=EnumToString(THURSDAY);
      break;
      case 5: day=EnumToString(FRIDAY);
      break;
      default:day=EnumToString(SATURDAY);
      break;
     }
//---
   return day;
  }
//+------------------------------------------------------------------+
/* Yürütme sonucu
   1. GBPUSD PERIOD_H1 2018.06.10 12:00(SUNDAY): bar indeks 64 tür(exact=false)
   Time of bar #64 is 2018.06.08 23:00 (FRIDAY)
   2. GBPUSD PERIOD_H1 2018.06.10 12:00 (SUNDAY):bar indeks -1 (exact=true)
*/