Как найти бар, открывающий новый час? - страница 2

 
Посмотрев на все это я сделал так.
day=TimeDayOfWeek(Time[0]); 
i=0;
tempday=0;
while (foundstart==false)
   {
   if(day != TimeDayOfWeek(Time[i]))
      {
      tempday++;
      day=TimeDayOfWeek(Time[i]);
      }
   if (tempday==DrawForHowLong+1)  {startcycle=i-1;break;}
   i++;
   }
В итоге я получил, бар под номером startcycle, который является первым для дня, который отстоит от текущего дня на переменную DrawForHowLong.
DrawForHowLong дается значение количества дней вглубь истории исключая текущий.
 
И вроде работает так как надо.
А можно ли дав время  найти бар которому оно принадлежит?
 
KING:
И вроде работает так как надо.
А можно ли дав время найти бар которому оно принадлежит?

Можно

int iBarShift( string symbol, int timeframe, datetime time, bool exact=false) 
Поиск бара по времени. Функция возвращает смещение бара, которому принадлежит указанное время. Если для указанного времени бар отсутствует ("дыра" в истории), то функция возвращает, в зависимости от параметра exact, -1 или смещение ближайшего бара.

Параметры:
symbol   -   Символьное имя инструмента. NULL означает текущий символ. 
timeframe   -   Период. Может быть одним из периодов графика. 0 означает период текущего графика. 
time   -   Значение времени для поиска. 
exact   -   Возвращаемое значение если бар не найден. FALSE - iBarShift возвращает ближайший. TRUE - iBarShift возвращает -1. 

Пример:
  datetime some_time=D'2004.03.21 12:00';
  int      shift=iBarShift("EUROUSD",PERIOD_M1,some_time);
  Print("shift of bar with open time ",TimeToStr(some_time)," is ",shift);
 
Спасибо всем.
goldtrader:
KING:
И вроде работает так как надо.
А можно ли дав время найти бар которому оно принадлежит?

Можно

int iBarShift( string symbol, int timeframe, datetime time, bool exact=false) 
Поиск бара по времени. Функция возвращает смещение бара, которому принадлежит указанное время. Если для указанного времени бар отсутствует ("дыра" в истории), то функция возвращает, в зависимости от параметра exact, -1 или смещение ближайшего бара.

Параметры:
symbol   -   Символьное имя инструмента. NULL означает текущий символ. 
timeframe   -   Период. Может быть одним из периодов графика. 0 означает период текущего графика. 
time   -   Значение времени для поиска. 
exact   -   Возвращаемое значение если бар не найден. FALSE - iBarShift возвращает ближайший. TRUE - iBarShift возвращает -1. 

Пример:
  datetime some_time=D'2004.03.21 12:00';
  int      shift=iBarShift("EUROUSD",PERIOD_M1,some_time);
  Print("shift of bar with open time ",TimeToStr(some_time)," is ",shift);

Спасибо, сделал так. Встречный вопрос: "При отстутствии бара (ночью), какое значение вернет функция? Что подразумевается под ближайшим значением? И каким образом научить чтобы возвращала последний известный?"


Теперь вопрос, такой, и скорее к разработчикам: "Если алгоритм производит расчет по барам, а превязка по времени идет взависимости от количества баров, то при отсутствии тика->как следствие бара(например ночью) образуется разрыв. Следовательно при таком расчете происходит сдвиг по оси времени, и сбиваются счетчики в индикаторе. Возможно ли заполнять такие бары последней известной ценой?" 
Предложения открывать график автономно, цеплять скрипт, заполняющий пробелы и обновляющий его через основной поток данных, не является удобным. Однако если другого варианта нет, то как сделать так?

Очень признателен за ответы, спасибо за терпение.