Самый быстрый способ определения даты начала дня по имеющейся дате.

 
Собственно задача в сабже.

При 7 986 200 итерациях, позаимствованная у И. Кима конструкция

dt1 = StrToTime(TimeToStr(dt1+86400, TIME_DATE)); // занимает ~12 сек Весь советник ~ 20.5 секунд (несколько тысяч строк)

Придумал свою

dt1 = dt1 + 86400 - TimeHour(dt1)*60*60 - TimeMinute(dt1)*60 - TimeSeconds(dt1); // занимает ~ 2 сек Весь советник ~ 10.3 секунд (несколько тысяч строк)

....................................

Я в немного шоке.
Можно подумать об оптимизации количества самих итераций,
но все таки,
есть ли способ более быстрый?
 
lasso:

есть ли способ более быстрый?
iTime(Symbol(), Period_D1);
 
Reshetov:
iTime(Symbol(), Period_D1);
ХЗ. Надо попробовать.
Использую для подсчета виртуального начисленного свопа, т.е. на входе две даты, требуется посчитать количества ночей между ними.
А так придется еще shift расчитывать, боюсь ещё дольше получится.
 
lasso:
на входе две даты, требуется посчитать количества ночей между ними

вроде так должно работать:

#property show_inputs
extern datetime D1 = D'2011.12.06 00:00';
extern datetime D2 = D'2011.12.08 00:00';

int start(){
   int date;
   date = MathFloor((D2 - D1)/86400); // ( 1440*60 )
   Print("date = ",date);
return(0);
}
 
Должно. Спасибо.
Только без перебора по дням не получится, ведь для расчета свопов надо фильтровать суб. и вск., и учитывать четверги.
.......... ...
С темы съехали...
Хотя на этой основе можно сделать упрощенную ф-цию, погрешность по расчету свопа у неё будет, думаю, не большой.