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

 


//+------------------------------------------------------------------+
extern double Start_Time_1 = 0.0;
extern double End_Time_1   = 0.0;
extern bool USE_TimeLocal = true;
datetime ST1;
datetime ET1;
//+------------------------------------------------------------------+
int init() {
//----
   ST1 = double_in_datatime(Start_Time_1);
   ET1 = double_in_datatime(End_Time_1);
   if(ET1 < ST1) {
         ST1 = ST1-24*3600;
   }
//----
  return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start() {
//--------------------------------------------------------------------
//-----------------
   if(USE_TimeLocal) datetime Cur_Time = TimeLocal();
   else Cur_Time = TimeCurrent();
//-----------------
   if(ET1 < Cur_Time){
      ST1 = ST1+24*3600;
      ET1 = ET1+24*3600;
   }
//-----------------
//-----------------
   if(ST1 < Cur_Time && Cur_Time < ET1) {
      // какие-то действия
   }
   else{
      // какие-то действия
   } 
//-----------------
   return(0);
}
//+------------------------------------------------------------------+
datetime double_in_datatime(double _Use_Time){
   datetime _Currently = iTime(NULL,1440,0);
   double _Hour = MathFloor(_Use_Time);
   double _Min = (_Use_Time - MathFloor(_Use_Time))*100;
   datetime _Sec_in_Hour = _Hour*3600;
   datetime _Sec_in_Min  = _Min*60;
   datetime _Ret = _Currently + _Sec_in_Hour + _Sec_in_Min;
//-----------------
   return(_Ret);
}

Используя данный алгоритм можно произвольно устанавливать время работы советника. Нет никакой сложности создать несколько различных, свободно пересекающихся, промежутков используя в конструкции if(ST1 < Cur_Time && Cur_Time < ET1) оператор "или".

 
))
 
valenok2003:

не совсем понял -- например, время 10:20 в типе double это сколько ? или 10:20:30 ?

 
abolk:

не совсем понял -- например, время 10:20 в типе double это сколько ? или 10:20:30 ?


параметры кратны 60сек, то-есть точность до минуты. Если вас что-то смущает. Можете сделать нормализацию

Start_Time_1  = NormalizeDouble( Start_Time_1,2);

и так для всех внешних переменных

10:20 = 10.20;

10:20:30 - смысла нет в такой точности

 
Осталось только узнать, что такое суточный переход.
 
Integer:
Осталось только узнать, что такое суточный переход.
И как он будет работать на следующий день. ))
 
Roger:
И как он будет работать на следующий день. ))

на следующий день, когда текущее время выйдет за пределы ET(EndTime)

стартовое ST1 и конечное ET1 время снова перебросятся на сутки вперёд - всё прекрасно будет работать )))

if(ET1 < Cur_Time){
      ST1 = ST1+24*3600;
      ET1 = ET1+24*3600;
   }
 
Извращенное безумие... или безумное извращение ?
 
FAQ:
Извращенное безумие... или безумное извращение ?

предложите решение проще
 
Integer:
Осталось только узнать, что такое суточный переход.

Интересное складывается впечатление, что некоторые ники, это как абонированные рабочие места неких заинтересованных субъектов. На форуме это отчетливо видно - пересменился дежурный на нике и четко видно, как изменяется его поведение - отношение к тем или иным вопросам, поведенческие реакции и т.д.

В отличие от множества других ников, у которых постоянная позиция и отношение в форуме.

 

valenok2003:

В отличие от множества других ников, у которых постоянная позиция и отношение в форуме.

да, вот у меня постоянная реакция на такие поделки. особенно c таким именем дефайна как AUTOR и дальнейшей бесполезности всего мероприятия.


// А все же что такое "суточный переход"?