iTime

返回对应的图表上柱形图的开盘时间(通过'shift'参数表示)。

datetime  iTime(
   const string        symbol,          // 交易品种
   ENUM_TIMEFRAMES     timeframe,       // 周期
   int                 shift            // 转移
   );

参数

交易品种

[in]  金融工具的交易品种名称。NULL表示当前交易品种。

timeframe

[in]  周期。它可以是ENUM_TIMEFRAMES其中一个枚举值。0表示当前图表周期。

shift

[in]  来自时间序列返回值的指数(相对于当前柱形图的指定柱形图数量的向后偏移)。

返回值

对应的图表上柱形图的开盘时间(通过'shift'参数表示)或者错误情况下为0。错误详情,请调用GetLastError()函数。

注意

这个函数始终返回实际数据。为此,它对每次调用期间指定交易品种/周期的时间序列执行请求。这意味着如果第一次函数调用时没有准备好的数据,则可能需要一些时间来准备结果。

这个函数不会存储之前的调用结果,也没有快速返回值的本地缓存。

例如:

//+------------------------------------------------------------------+
//| 脚本程序起始函数                                                   |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- 日期为星期日
   datetime time=D'2018.06.10 12:00';
   string symbol="GBPUSD";
   ENUM_TIMEFRAMES tf=PERIOD_H1;
   bool exact=false;
//--- 在指定时间没有柱形图,那么iBarShift将返回最近柱形图的指数
   int bar_index=iBarShift(symbol,tf,time,exact);
   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));
//PrintFormat(iTime(symbol,tf,bar_index));
//--- 请求指定时间的柱形图指数;但如果没有柱形图则将返回-1
   exact=true;
   bar_index=iBarShift(symbol,tf,time,exact);
   PrintFormat("2. %s %s %s (%s):bar index is %d (exact=%s)",
               symbol,EnumToString(tf),TimeToString(time),DayOfWeek(time),bar_index,string(exact));
  }
//+------------------------------------------------------------------+
//| 返回一周的每日名称                         |
//+------------------------------------------------------------------+
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;
  }
/* The result:
   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)
*/  

另见

CopyTime, CopyRates