Библиотеки: CTimeSession

 

CTimeSession:

Универсальный класс для проверки разрешенного для торговли времени

Автор: Dmitry Fedoseev

 

Хорошая билиотека.


Alert(ses.CheckTime(StringToTime("2019.01.17 17:15")));

Можно так

Alert(ses.CheckTime(D'2019.01.17 17:15'));
 
Вот только как оптимизировать советника? Не понимаю, зачем городить огород.
 
lsv107:
Вот только как оптимизировать советника? Не понимаю, зачем городить огород.

Вот то-то и оно)

 

Появилась идея. Если надо оптимизировать, сделать в окне свойств переменные int, в ините собрать их в строку и отправить в класс. Дело за малым.

Дело в том, что весь мир делится на две категории людей, тех кто любит пенку в молоке и тех, кто ее ненавидит предпочитает строковые переменные и тех кто предпочитает возможности оптимизации, примирение между этими категориями невозможно.

 
Перед тем, как думать об оптимизации, нужно определиться, что хочется получить.
 
Dmitry Fedoseev:

Появилась идея. Если надо оптимизировать, сделать в окне свойств переменные int, в ините собрать их в строку и отправить в класс. Дело за малым.

Дело в том, что весь мир делится на две категории людей, тех кто любит пенку в молоке и тех, кто ее ненавидит предпочитает строковые переменные и тех кто предпочитает возможности оптимизации, примирение между этими категориями невозможно.

Да я все понимаю, даже приветствую. Чем больше кода в кодобазе, тем лучше. Но стоило ли тратить силы и время на такую задачу. Библиотеки, классы... Не знаю...

Я пользуюсь всего одной своей функцией. Тут два варианта:

input  bool    TimeAllow               = false;                                               // Ограничивать работу советника по времени
input  int     OpenHour                = 22;                                                  // Час начала торговли
input  int     OpenMinute              = 0;                                                   // Минута начала торговли
input  int     CloseHour               = 7;                                                   // Час завершения торговли
input  int     CloseMinute             = 0;                                                   // Минута завершения торговли


// вызов только с часами
if(TimeAllow && !IsTimeAllow(OpenHour,CloseHour)) return;

// вызов с часами и минутами
if(TimeAllow && !IsTimeAllow(OpenHour,OpenMinute,CloseHour,CloseMinute)) return;


//+——————————————————————————————————————————————————————————————————+
//| Возвращает true, если текущее серверное время больше времени     |
//| начала торговли советника и меньше времени завершения торговли   |
//+——————————————————————————————————————————————————————————————————+
bool IsTimeAllow(int openHour,int openMinute,int closeHour,int closeMinute)
  {
   MqlDateTime dt;
   TimeToStruct(TimeCurrent(),dt);
   int openTimeCode=StrToInteger("1"+IntegerToString(openHour,2,'0')+IntegerToString(openMinute,2,'0'));
   int closeTimeCode=StrToInteger("1"+IntegerToString(closeHour,2,'0')+IntegerToString(closeMinute,2,'0'));
   int currentTimeCode=StrToInteger("1"+IntegerToString(dt.hour,2,'0')+IntegerToString(dt.min,2,'0'));
   return(currentTimeCode>openTimeCode && currentTimeCode<=closeTimeCode);
  }

//+——————————————————————————————————————————————————————————————————+
//| Возвращает true, если текущее серверное время больше времени     |
//| начала торговли советника и меньше времени завершения торговли   |
//+——————————————————————————————————————————————————————————————————+
bool IsTimeAllow(int openHour,int closeHour)
  {
   datetime dtHour=TimeHour(TimeCurrent());
   return((openHour < closeHour && dtHour >= openHour && dtHour < closeHour) ||
          (openHour>closeHour && ((dtHour>=openHour && openHour<=23) || (dtHour<closeHour && closeHour>=0))));
  }
 
lsv107:

Да я все понимаю, даже приветствую. Чем больше кода в кодобазе, тем лучше. Но стоило ли тратить силы и время на такую задачу. Библиотеки, классы... Не знаю...

Я пользуюсь всего одной своей функцией. Тут два варианта:

Если внимательно рассмотреть, то в этом классе все еще проще делается. Основной код - подготовка разных данных для предоставления вариантов пользователю. 

Причина обращения: