Библиотеки: Work Time

 

Work Time:

Функция предназначена для ограничения времени работы эксперта или скрипта.

Work Time

Автор: Sergej Chukhista

 

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

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

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

enum ONOFFTIME
  {
   ONOFF_ON  = 1, // On
   ONOFF_OFF = 0, // Off
  };
sinput string           iT_Note                 = " --== Work Time ==-- ";
input ONOFFTIME         iWorkTimeIntraday       = ONOFF_OFF;               // Work Time (On/Off)
input string            iTradeStart             = "hh:mm:ss";              // Stop trading stop at
input string            iTradeFinish            = "hh:mm:ss";              // Renew the trading at
//+------------------------------------------------------------------+
//| Work Time function                                               |
//+------------------------------------------------------------------+
bool WorkTime()
  {
   if(iWorkTimeIntraday == ONOFF_OFF)
      return true;

   datetime TimeStart  = 0;
   datetime TimeFinish = 0;
   datetime Timecurrent = TimeCurrent();
   datetime Today      = iTime(_Symbol, PERIOD_D1, 0);
   datetime Yesterday  = iTime(_Symbol, PERIOD_D1, 1);
   string   sep        = ":";
   string   StartTimeMass[], FinishTimeMass[];
   ushort   u_sep      = StringGetCharacter(sep, 0);

   StringSplit(iTradeStart,  u_sep, StartTimeMass);
   StringSplit(iTradeFinish, u_sep, FinishTimeMass);

   int  iHourStart    = (int)StringToInteger(StartTimeMass[0]);
   int  iMinuteStart  = (int)StringToInteger(StartTimeMass[1]);
   int  iSecondStart  = (int)StringToInteger(StartTimeMass[2]);

   int  iHourFinish   = (int)StringToInteger(FinishTimeMass[0]);
   int  iMinuteFinish = (int)StringToInteger(FinishTimeMass[1]);
   int  iSecondFinish = (int)StringToInteger(FinishTimeMass[2]);

   if(iHourStart > 23 || iMinuteStart > 59 || iSecondStart > 59 || iHourFinish > 23 || iMinuteFinish > 59 || iSecondFinish > 59)
      return false;

   if(iHourStart * 60 * 60 + iMinuteStart * 60 + iSecondStart < iHourFinish * 60 * 60 + iMinuteFinish * 60 + iSecondFinish)
     {
      TimeStart = Today + iHourStart * 60 * 60 + iMinuteStart * 60 + iSecondStart;
      TimeFinish = Today + iHourFinish * 60 * 60 + iMinuteFinish * 60 + iSecondFinish;
     }
   else
     {
      TimeStart = Today + iHourStart * 60 * 60 + iMinuteStart * 60 + iSecondStart;
      TimeFinish = Today + iHourFinish * 60 * 60 + iMinuteFinish * 60 + iSecondFinish;

      if(Timecurrent < TimeFinish)
         TimeStart = Yesterday + iHourStart * 60 * 60 + iMinuteStart * 60 + iSecondStart;

      if(Timecurrent > TimeStart)
         TimeFinish = Today + (iHourFinish + 24) * 60 * 60 + iMinuteFinish * 60 + iSecondFinish;
     }

   if(TimeStart <= Timecurrent && Timecurrent < TimeFinish)
      return(true);
   else
      return(false);

   return(false);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
 

Ваш вариант реализации данной функции уже есть в кодобазе.

Задача состояла в использовании списка значений для настройки времени и в поддержке оптимизации.

 
Sergej Chukhista:

Ваш вариант реализации данной функции уже есть в кодобазе.

Задача состояла в использовании списка значений для настройки времени и в поддержке оптимизации.

Ну и хорошо!

 
Безумно дорого!
 
fxsaber:
Безумно дорого!

Согласен, представьте свой вариант, с удовольствием поучусь..

 
Vladimir Pastushak:

Согласен, представьте свой вариант, с удовольствием поучусь..

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Обсуждение статьи "Исследование сезонных характеристик финансовых временных рядов при помощи диаграмм Boxplot"

fxsaber, 2019.12.08 23:34

Советник

input int inStartHour = 0;
input int inCountHours = 23;

const int EndHour = inStartHour + inCountHours;

bool SystemON()
{
  int CurrentHour = (int)(TimeCurrent() / 3600) % 24;

  if ((EndHour >= 24) && (CurrentHour < inStartHour))
    CurrentHour += 24;
             
  return((inStartHour <= CurrentHour) && (CurrentHour <= EndHour));
}

Оптимизация

inStartHour=0||0||1||23||Y
inCountHours=23||0||1||23||Y

Ну и BestInterval совсем порвет все решения, если нужна оптимизация.

 
fxsaber:

Ну и BestInterval совсем порвет все решения, если нужна оптимизация.

Вы любите все усложнять, почему нельзя просто приложить код по тому примеру как это сделал я ?  Просто код, бес ссылок, бес кучи другого кода ? Просто решение задачи ...

BestInterval  я посмотрел, там гора лишнего кода, да и я не слишком высокого уровня программист что бы разобрать весь тот код...

 
Vladimir Pastushak:

Вы любите все усложнять, почему нельзя просто приложить код по тому примеру как это сделал я ?  Просто код, бес ссылок, бес кучи другого кода ? Просто решение задачи ...

BestInterval  я посмотрел, там гора лишнего кода, да и я не слишком высокого уровня программист что бы разобрать весь тот код...

Прикалываетесь что ли? Посчитайте количество строк в функции SystemON.

Что касается BestInterval. То он написан так, что любой новичок сможет применить. Нужно только прочитать описание.

 
fxsaber:

Прикалываетесь что ли? Посчитайте количество строк в функции SystemON.

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

 
Vladimir Pastushak:

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

Только в часах. Минуты, а тем более секунды, - пустое занятие для практических задач. Особенно, когда речь идет об Оптимизации.