Оптимальный Алгоритм для решения вопроса суточного перехода. - страница 3

 
TheXpert:


Красиво, но работать не будет. Если задать рабочий промежуток 13:00 - 12:00, ваша функция интерпретирует его как с 12:00 до 13:00.

К тому же весь объем вычислений на каждом тике.

 
valenok2003:

Красиво, но работать не будет. Если задать рабочий промежуток 13:00 - 12:00, ваша функция интерпретирует его как с 12:00 до 13:00.

Вы невнимательны.

Будет.

 
PapaYozh:

Вы невнимательны.

Будет.

Покажите, что я пропустил? В функции не учтено, что если рабочий период переходит через 00:00, то нужно добавить сутки к времени закрытия. Я этого не вижу. Возможно, не по глазам ))) Не берусь категорически утверждать в беседе с корифеями.

extern int        TimeTrade         =  1;
extern int        StartHour         =  18;
extern int        StartMinute       =  0;
extern int        EndHour           =  6;
extern int        EndMinute         =  0;
extern int        StrictClose       =  1;

bool IsTimeToTrade()
{
   if (TimeTrade == 0) return (true);
   
   double now = Hour() + Minute()/60.0;            // вычисляем текущее время на суточной шкале, 
                                                   // без учета полной шкалы времени 
   double tmpStart = StartHour + StartMinute/60.0; // вычисляем время старта в часовой размерности на суточной шкале

   double tmpEnd = EndHour + EndMinute/60.0;       // вычисляем время окончания в часовой размерности на суточной шкал

   double start = MathMin(tmpEnd, tmpStart);       // берём минимальное значение и определяем его как время старта
                                                   // в моём примере это 12:00
   double end = MathMax(tmpEnd, tmpStart);         // берём максимальное значение и определяем его как время окончания
                                                   // в моём примере это 13:00
   bool isTime = (now >= start && now < end);      // сравниваем текущее время без учета полной шкалы
                                                   // под полной шкалой понимаю количество секунд после 00:00 1 января 1970 года 
                                                   // суточная шкала - с начала суток
   if (tmpStart > tmpEnd)     return (!isTime);
   else                       return (isTime);
}
функция работает неправильно
 

Вот тут фишка

 if (tmpStart > tmpEnd)     return (!isTime);
   else                       return (isTime);
Тут значение переворачивается, если время начала больше времени конца.
 
Roger:

Вот тут фишка

Тут значение переворачивается, если время начала больше времени конца.

супер!
 

Вообще-то функция выдрана прямо из рабочего советника и багов честно говоря я пока не видел.

 
Roger:

Вот тут фишка

Тут значение переворачивается, если время начала больше времени конца.

Фишку можно несколько укоротить

 if (tmpStart > tmpEnd)     return (!isTime);
   else                       return (isTime);

заменить на

 return ((tmpStart > tmpEnd) ^ isTime);

с тем же результатом.

--

Вапче топикстартера надо отправить в ссылку: https://www.mql5.com/ru/articles/599

 
MetaDriver:

Вапче топикстартера надо отправить в ссылку: https://www.mql5.com/ru/articles/599


Где же вы раньше были? Всё, ееперь поздно... Ухожу... из программистов, пойду овощами торговать... или дворником в крайнем случае...

Эх, никчёмный я человек

 
valenok2003:

Где же вы раньше были? Всё, ееперь поздно... Ухожу... из программистов, пойду овощами торговать... или дворником в крайнем случае...Эх, никчёмный я человек

:)

Тэкс.. Истерику прекратить...Основные идеи из статьи усвоить... На самооценку насрать... И жениться, жени.... учиться, учиться, учиться...

--

Да, можно ещё ник поменять.

;)

 
MetaDriver:

...

Да, можно ещё ник поменять.

;)

Да, точно. А то уже 2013 год на дворе, поэтому нужно valenok2013. )))
Причина обращения: