Проблема с time

 

Доброго времени суток!

Подскажите, пожалуйста, почему возвращается не верный результат следующего кода:

 datetime x = Time[1440];
 datetime z = TimeCurrent();
 Alert(x, " - сутки назад, текущее время: " ,z);


Суть вот в чем - мне необходимо получить open, close, high, low за аналогичный текущему час, сутки (двое, трое и т.д.) назад... но на М1 путем логических умозаключений и калькулятора получается 1440 свечей в сутки.. проверяю время 1440-ой свечи сутки назад на М1 - выходит далеко не искомое время, причем разница постоянно меняется (с отрисовкой новых баров, но все равно не совпадает очень сильно).

Как такой ошибки можно избежать, может кто подскажет функцию, которая позволит вычислить, например, номера искомых баров по нужному интервалу времени, чтобы уже с него получить искомые данные (open,close и т.д.)? Или может укажете на ошибку?

т.е. задача получить номер бара сутки назад, номер бара 2 суток назад, 3 суток назад и т.д. на текущий час.

Другие ТФ не подходят, т.к. по ним high & low не корректно читаются.. мне нужен интервал, например, с 10 до 11 часов вчера, с 10 до 11 позавчера и т.п.

 
т.е. час искомого бара вчерашнего дня должен совпадать с началом текущего часа по терминалу
 

решила

 datetime a = TimeCurrent();

 datetime b = 86400; //24часа*60минут*60секунд
 datetime c = a-b;

 Alert (c);

 

Попробуйте использовать функцию 

iBarShift

Поиск бара по времени. Функция возвращает индекс бара, в который попадает указанное время.



int  iBarShift(
   string           symbol,          // символ
   int              timeframe,       // период
   datetime         time,            // время
   bool             exact=false      // режим
   );
 

Параметры

symbol

[in]  Символьное имя инструмента. NULL означает текущий символ.

timeframe

[in]  Период. Может быть одним из значений перечисления ENUM_TIMEFRAMES. 0 означает период текущего графика.

time

[in]  Значение времени для поиска.

exact=false

[in]  Возвращаемое значение, если бар не найден. Если exact=false, iBarShift возвращает ближайший, если exact=true, iBarShift возвращает -1.

Возвращаемое значение

Индекс бара, в который попадает указанное время. Если для указанного времени бар отсутствует ("дыра" в истории), то функция возвращает -1 или индекс ближайшего бара (в зависимости от параметра exact).

Пример:



  datetime some_time=D'2004.03.21 12:00';
  int      shift=iBarShift("EURUSD",PERIOD_M1,some_time);
  Print("index of the bar for the time ",TimeToStr(some_time)," is ",shift);
 

 
 
Огромное спасибо! Эту функцию и искала)