Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Не знаете MQL5, но хорошо продаете? Партнерская программа для вас!
maia666
73
maia666 2015.06.18 12:35 

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

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

 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 позавчера и т.п.

maia666
73
maia666 2015.06.18 12:36  
т.е. час искомого бара вчерашнего дня должен совпадать с началом текущего часа по терминалу
maia666
73
maia666 2015.06.18 14:20  

решила

 datetime a = TimeCurrent();

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

 Alert (c);

Victor Nikolaev
Модератор
14081
Victor Nikolaev 2015.06.19 00:39  

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

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);
 

 
maia666
73
maia666 2015.06.20 04:08  
Огромное спасибо! Эту функцию и искала)
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий