iBarShift

Suche nach Balken nach Zeit. Die Funktion gibt den Index des Balkens zurück, der der angegebenen Zeit entspricht.

int  iBarShift(
   const string        symbol,          // Symbol
   ENUM_TIMEFRAMES     timeframe,       // Zeitrahmen
   datetime            time,            // Zeit 
   bool                exact=false      // Modus
   );

Parameter

symbol

[in]  Name des Finanzinstruments. NULL bedeutet das aktuelle Symbol.

timeframe

[in]  Zeitrahmen. Der Wert kann einer der Werte der Aufzählung ENUM_TIMEFRAMES sein. PERIOD_CURRENT bedeutet den Zeitrahmen des aktuellen Charts.

time

[in]  Zeit für die Suche.

exact=false

[in]  Rückgabewert, wenn kein Balken entsprechend der angegebenen Zeit gefunden wurde. Wenn exact=false gibt iBarShift den Index des nächsten Balkens zurück, dessen Eröffnungszeit kleiner als die angegebene Zeit ist (time_open<time). Wenn solcher Balken nicht gefunden wurde (keine Historie vor dem angegebenen Zeitpunkt), gibt die Funktion -1 zurück. Wenn exact=true, wird es nicht nach dem nächsten Balken gesucht, die Funktion iBarShift gibt sofort -1 zurück.

Rückgabewert

Index des Balkens, der der angegebenen Zeit entspricht. Wenn kein Balken für die angegebene Zeit vorhanden ist (eine Kurslücke in der Historie), gibt die Funktion -1 oder den Index des nächsten Balkens (je nach dem Parameter exact) zurück.

Beispiel:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
 { 
//--- das Datum fällt auf einen Sonntag
   datetime time=D'2002.04.25 12:00';
   string symbol="GBPUSD";
   ENUM_TIMEFRAMES tf=PERIOD_H1;
   bool exact=false;
//--- wenn es keinen Balken für die angegebene Zeit gibt, gibt iBarShift den Index des angegebenen Balkens zurück
   int bar_index=iBarShift(symbol,tf,time,exact);
//--- überprüfen wir den Fehlercode nach dem Aufruf von iBarShift()
   int error=GetLastError();
   if(error!=0)
    { 
      PrintFormat("iBarShift(): GetLastError=%d - das abgefragte Datum %s "+
                  "für %s %s in der verfügbaren Historie nicht gefunden",
                  error,TimeToString(time),symbol,EnumToString(tf));
      return;
     }
//--- die Funktion iBarShift() wurde erfolgreich ausgeführt, Ergebnisse für exact=false ausgeben
   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));
//--- Abfrage des Index des Balkens mit der angegebenen Zeit, wenn es keinen Balken gibt, wird -1 zurückgegeben
   exact=true;
   bar_index=iBarShift(symbol,tf,time,exact);
//--- die Funktion iBarShift() wurde erfolgreich ausgeführt, Ergebnisse für exact=true ausgeben
   PrintFormat("2. %s %s %s (%s):bar index is %d (exact=%s)",
               symbol,EnumToString(tf),TimeToString(time)
               ,DayOfWeek(time),bar_index,string(exact));
  }
//+------------------------------------------------------------------+
//| Gibt den Wochentag zurück                                   |
//+------------------------------------------------------------------+
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;
  }
//+------------------------------------------------------------------+
/* Das Ergebnis
   1. GBPUSD PERIOD_H1 2018.06.10 12:00(SUNDAY): bar index is 64 (exact=false)
   Time of bar #64 is 2018.06.08 23:00 (FRIDAY)
   2. GBPUSD PERIOD_H1 2018.06.10 12:00 (SUNDAY):bar index is -1 (exact=true)
*/