Библиотеки: Work Time - страница 2

 
Vladimir Pastushak:

Время только в часах, а минуты и секунды ?

можно перейти на дробные часы (23,5=23:30), основу кода оставить прежней:

double    T1=OpenStartTimeH +OpenStartTimeM/60.0;

bool TimeToTrade()
{
 double h=TimeHour(TimeCurrent())+TimeMinute(TimeCurrent())/60.0;
 if(T2>T1) return((h> T1 && h<=T2));
 else      return((h>=T1 || h< T2));
}
 
Igor Zakharov:

можно перейти на дробные часы (23,5=23:30), основу кода оставить прежней:

а 23 часа 55 минут как задавать?

 
Igor Makanu:

а 23 часа 55 минут как задавать?

Зачем для Оптимизации это делать?

 
Igor Makanu:

а 23 часа 55 минут как задавать?

23+55/60 = 23,91666666667

 
fxsaber:

Зачем для Оптимизации это делать?

для оптимизации - чтобы быть ближе к реалу; а на реале, полезно не действовать в роловер либо за несколько минут до или после новостей; но секунды тоже считаю слишком мелкой единицей.

Другая задача - начинать работу через несколько минут после начала сессии.

 
Igor Zakharov:

23+55/60 = 23,91666666667


по моему очень не удобно и не информативно
fxsaber:

Зачем для Оптимизации это делать?

я хотел увидеть удобство использования

для минут я выкладывал свой пример, по скорости не увидел просадки, или вернее меня на данном этапе все устраивает, цели пока в анализе статистики тестера

PS: в Ваш пример бы заменить бы TimeCurrent() на datetime time = (datetime)SymbolInfoInteger(_Symbol, SYMBOL_TIME); 

должно быстрее в оптимизаторе работать

 
Igor Makanu:

по моему очень не удобно и не информативно

похоже, мы о разном говорили :) на уровне input это по прежнему int hours и int minutes. в дробь превращаем уже внутри кода, для операций сравнения.

мой первоначальный пост был в том контексте, что код fxsaber'а останется рабочим и с минутами/секундами, просто нужно привести к double по формуле

double    hours_double = hours + minutes/60.0 + seconds/3600.0;
 
Igor Zakharov:

похоже, мы о разном говорили :) на уровне input это по прежнему int hours и int minutes. в дробь превращаем уже внутри кода, для операций сравнения.

мой первоначальный пост был в том контексте, что код fxsaber'а останется рабочим и с минутами/секундами, просто нужно привести к double по формуле

ОК, понятно

но тогда нужно этот расчет выполнять один раз

 
Vladimir Pastushak:

Я сделал небольшие правки, особо не усердствовал!

Ваш вариант можно оптимизировать в оптимизаторе, но опять же 6 вариантов  6*24*60*60 = 518 400  проходов что мало имеет смысла и пользователь зря потратит время

Мой Вариант не может быть оптимизирован.

Зачем нужная функция, которую нельзя оптимизировать? Никто не заставляет оптимизировать все переменные, можно часами ограничиться.

 
Sergej Chukhista:

...

Время начала дня можно посчитать так: (TimeCurrent()/86400)*86400, и вовсе не нужны данные с дневного таймфрейма.