iTime

Restituisce il tempo di apertura della barra (indicato dal parametro 'shift') sul chart corrispondente.

datetime  iTime(
   const string        symbol,          // Simbolo
   ENUM_TIMEFRAMES     timeframe,       // Periodo
   int                 shift            // Slittamento
   );

Parametri

symbol

[in] Il nome simbolico dello strumento finanziario. NULL significa il simbolo corrente.

timeframe

[in]  Periodo. Può essere uno dei valori dell'enumerazione ENUM_TIMEFRAMES. 0 significa il periodo del chart corrente.

shift

[in] L'indice del valore ricevuto dalla timeseries (spostamento all'indietro di un numero specificato di barre rispetto alla barra corrente).

Valore di ritorno

Il tempo di apertura della barra (indicato dal parametro 'shift') sul chart corrispondente o 0 in caso di errore. Per i dettagli dell'errore, chiamare la funzione GetLastError().

Nota

La funzione restituisce sempre i dati effettivi. A tale scopo esegue una richiesta alle timeseries per il simbolo/periodo specificato durante ogni chiamata. Ciò significa che se non ci sono dati pronti durante la prima chiamata di funzione, potrebbe essere necessario un po' di tempo per preparare il risultato.

La funzione non memorizza i risultati delle chiamate precedenti e non esiste una cache locale per il ritorno rapido dei valori.

Esempio:

//+------------------------------------------------------------------+
//| Funzione Start programma Script                                  |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- La data è domenica
   datetime time=D'2018.06.10 12:00';
   string symbol="GBPUSD";
   ENUM_TIMEFRAMES tf=PERIOD_H1;
   bool exact=false;
//--- non c'è una barra all'orario specificato, iBarShift restituirà l'indice della barra più vicina
   int bar_index=iBarShift(symbol,tf,time,exact);
   PrintFormat("1. %s %s %s(%s): l'indice della barra è %d (exact=%s)",
               symbol,EnumToString(tf),TimeToString(time),DayOfWeek(time),bar_index,string(exact));
   datetime bar_time=iTime(symbol,tf,bar_index);
   PrintFormat("L'orario della barra #%d è %s (%s)",
               bar_index,TimeToString(bar_time),DayOfWeek(bar_time));
//PrintFormat(iTime(symbol,tf,bar_index));
//--- Richiede l'indice della barra con il timeframe specificato; ma non c'è la barra, restituisce -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));
  }
//+------------------------------------------------------------------+
//| Restituisce il nome del giorno della settimana                   |
//+------------------------------------------------------------------+
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;
  }
/* Il risultato:
   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)
*/  

Guarda anche

CopyTime, CopyRates