iTime

Retorna o valor do tempo de abertura da barra (indicado pelo parâmetro shift) do gráfico correspondente.

datetime  iTime(
   const string        symbol,          // símbolo
   ENUM_TIMEFRAMES     timeframe,       // período
   int                 shift            // deslocamento
   );

Parâmetros

symbol

[in]  Nome simbólico do instrumento. NULL significa o símbolo atual.

timeframe

[in]  Período. Pode ser um dos valores da enumeração ENUM_TIMEFRAMES. 0 significa o período do gráfico atual.

shift

[in]  Índice do valor recebido do timeseries (deslocamento - número especificado de barras atrás - em relação à barra atual).

Valor de retorno

Valor do tempo de abertura da barra (indicado pelo parâmetro shift) do gráfico correspondente ou 0 no caso de erro. Para mais informações sobre o erro, deve-se chamar a função GetLastError().

Observação

A função sempre retorna dados relevantes, para isso, a cada chamada, faz uma solicitação aos timeseries para o símbolo/período especificado. Isso significa que, se não houver dados prontos na primeira chamada de função, preparar o resultado poderá levar algum tempo.

A função não armazena os resultados de chamadas anteriores, pois não há cache local para retorno rápido do valor.

Exemplo:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- data é no domingo
   datetime time=D'2018.06.10 12:00';
   string symbol="GBPUSD";
   ENUM_TIMEFRAMES tf=PERIOD_H1;
   bool exact=false;
//--- se não houver barra para o tempo especificado, iBarShift retornará o índice da barra mais próxima
   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));
//--- precisamos encontrar o índice da barra para o tempo especificado, se ele não existir, retornaremos -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));
  }
//+------------------------------------------------------------------+
//| Retorna o nome do dia da semana                                   |
//+------------------------------------------------------------------+
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;
  }
/* Resultado:
   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)
*/  

Veja também

CopyTime, CopyRates