Подскажите функцию, сам не могу найти. - страница 2

 
хм.... не хочу перебирать весь массив когда нужен только последний день.
я сделал так:
year = TimeYear(TimeCurrent());
month = TimeMonth(TimeCurrent()); 
day = TimeDay(TimeCurrent());
datetime daystart=D'year,month,day 00:00';
i=iBarShift(NULL,0,daystart,0);
Alert (i);
результат выдаёт. Одно в журнале появляется запись при компиляции 
'year,month,day 00:00' - date literal string is incomplete (90, 19)

Спасибо за ссылку на ветку. Надо осмыслить, а то я не совсем понял что по чем. А надо переделывать алгоритм, когда числа все целые, как у меня?
 
Чегой-то ты намудрил, особенно когда daystart творил. Так низзя. Почитай о строках, как их делать надо. И еще: можно и через iBarShift(), но там все сложнее, а последний параметр функции как раз нехороший тут, т.е. неточное соответствие бару. Гораздо проще пробежаться циклом - всего за день. ТФ-то какой?
 
Mathemat:
Чегой-то ты намудрил, особенно когда daystart творил. Так низзя. Почитай о строках, как их делать надо. И еще: можно и через iBarShift(), но там все сложнее, а последний параметр функции как раз нехороший тут, т.е. неточное соответствие бару. Гораздо проще пробежаться циклом - всего за день. ТФ-то какой?

Таймфрейм любой из стандартного набора.

Каким образом пробежаться за день? Это нужно цикл в цикле делать ...... Чо-то мудрено получается.... А никто не встречал готовых решений?

 
if ( Period() >= PERIOD_D1 ) return(-1);
 
int curDay = DayOfWeek();
for ( int i = 0; i < Bars; i ++ )
{
  if ( TimeDayOfWeek( Time[i] ) != curDay )
  {
     i --;
     break;
  }
}
Print( "Первый бар текущего дня имеет индекс ", i );
 

или так, чтоб не мудрить

  datetime daybegin_time = StrToTime(Year()+"."+Month()+"."+Day());
  int      shift=iBarShift(NULL,0,daybegin_time);
 

embezz, это неточное решение. Четвертый параметр функции iBarShift() ты не изменял, т.е. там стоит false. Поиск бара идет от текущего нулевого влево. Если при таком 4-м параметре функция не найдет на текущем ТФ бар с таким временем открытия, она возвращает ближайший, который левее, т.е. уже не текущий день. Пример - золотишко на М1. Вот код:

int start()
{
   datetime daybegin_time = StrToTime(Year()+"."+Month()+"."+Day());
   int shift = iBarShift(NULL,0,daybegin_time);
   datetime dt = iTime( NULL, 0, shift );
   Print( TimeToStr( dt, TIME_DATE | TIME_MINUTES ) );
   return( 0 );
}

Посмотри на дату, которая получилась. У меня - Альпари. Время последней минутки 12 мая - 23:15, а первой минутки 13 мая - 00:01. Так что вариант от komposter правильнее.

Разумеется, на более крупных ТФ вероятность неверного результата ниже.

P.S. Можно модифицировать твой код вот так (захочешь проверить - раскомментируй обе строки):

datetime daybegin_time = StrToTime(Year()+"."+Month()+"."+Day());
int shift = iBarShift(NULL,0,daybegin_time);
datetime dt = iTime( NULL, 0, shift );
//Print( TimeToStr( dt, TIME_DATE | TIME_MINUTES ) );
if( dt < daybegin_time ) shift --;
//Print( TimeToStr( iTime( NULL, 0, shift ), TIME_DATE | TIME_MINUTES ) );
Причина обращения: