Ограничить торговлю в советнике в указанный период времени...

 
Нужно решить задачу 
останавливать открытие ордеров в указанный период времени
это может быть как с 16 00 до 21 00 так и с 22 00 до 03 00 
никак не могу сообразить, голова совсем не варит 
Есть мысли или примеры кода ?
 
Vladimir Pastushak:
Нужно решить задачу 
останавливать открытие ордеров в указанный период времени
это может быть как с 16 00 до 21 00 так и с 22 00 до 03 00 
никак не могу сообразить, голова совсем не варит 

Есть мысли или примеры кода ?

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

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

Aleksey Panfilov, 2018.10.18 15:13

         if(
            ..... 
           && ((New_Time[0]-3600*    Start_Hour)        % 86400    < 3600*Period_Hour)         // обусловлено интервалом внутри суток
           && ((New_Time[0]-3600*(96+Start_Weekly_Hour))%(86400*7) < 3600*Period_Weekly_Hour)  // обусловлено интервалом внутри недели (неделя 168 часов)

           )

Предложенные выше подходят 

Start_Hour =22
Period_Hour =4
В данном виде функция на разрешение торговать в течении Period_Hour, чтобы сделать запрет нужно знак поменять  с "<"  на ">" .
 
Vladimir Pastushak:
Нужно решить задачу 
останавливать открытие ордеров в указанный период времени
это может быть как с 16 00 до 21 00 так и с 22 00 до 03 00 
никак не могу сообразить, голова совсем не варит 
Есть мысли или примеры кода ?
Я ж в личку кинул функции. Что не так?
 
Artyom Trishkin:
Я ж в личку кинул функции. Что не так?

Артем, мне нужно остановить советника с 22 00 до 02 00 

Функции что ты дал не подходят...

 
Vladimir Pastushak:

Артем, мне нужно остановить советника с 22 00 до 02 00 

Функции что ты дал не подходят...

Проверяешь время и делаешь выводы - торговать или нет.
 
Artyom Trishkin:
Проверяешь время и делаешь выводы - торговать или нет.

Вот как раз эта проверка мне и нужна

Не могу сообразить как остановить именно с 22 00 до 02 00 ...

Условие типа Hour() > 22 && Hour()<2   не прокатит

 
Vladimir Pastushak:

Вот как раз эта проверка мне и нужна

Отправляешь в функции текущее время. Они вернут часы и минуты. Сравниваешь с заданными и делаешь выводы.
 
Artyom Trishkin:
Отправляешь в функции текущее время. Они вернут часы и минуты. Сравниваешь с заданными и делаешь выводы.

Я то же поначалу думал что так просто 

 
Vladimir Pastushak:

Я то же поначалу думал что так просто 

Это не просто, а очень просто :)
 
Artyom Trishkin:
Это не просто, а очень просто :)

Так кажется

 
#property copyright "IgorM"
#property link      "https://www.mql5.com/ru/users/igorm"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
enum ENUM_HOUR
  {
   h00,/*00*/ h01,/*01*/ h02,/*02*/ h03,/*03*/ h04,/*04*/ h05,/*05*/ h06,/*06*/ h07,/*07*/ h08,/*08*/ h09,/*09*/ h10,/*10*/
   h11,/*11*/ h12,/*12*/ h13,/*13*/ h14,/*14*/ h15,/*15*/ h16,/*16*/ h17,/*17*/ h18,/*18*/ h19,/*19*/ h20,/*20*/ h21,/*21*/
   h22,/*22*/ h23,/*23*/
  };
sinput string  sinput1="1.Установка границ работы по времени:";//----------------------------
input ENUM_HOUR      StartHourSession1          =  h22;
input ENUM_HOUR      StopHourSession1           =  h03;
input ENUM_HOUR      StartHourSession2          =  h07;
input ENUM_HOUR      StopHourSession2           =  h12;
//+------------------------------------------------------------------+
//| class CSession                                                   |
//+------------------------------------------------------------------+
class CSession
  {
private:
   int               StartHour,StopHour;
   bool              intraday;
public:
   void              CSession(ENUM_HOUR hstart,ENUM_HOUR hstop);
   void              ~CSession(void){};
   bool              CheckSession(datetime t);
  };
//+------------------------------------------------------------------+
void CSession::CSession(ENUM_HOUR hstart,ENUM_HOUR hstop)
  {
   StartHour=hstart;
   StopHour=hstop;
   if(StopHour>StartHour) intraday=true; else intraday=false;
  }
//+------------------------------------------------------------------+
bool CSession::CheckSession(datetime t)
  {
   int h=TimeHour(t);
   bool result;
   if(intraday)
     {
      if(h>=StartHour && h<StopHour) result=true; else result=false;
        }else{
      if(h>=StopHour && h<StartHour) result=false; else result=true;
     }
   return(result);
  }
//+------------------------------------------------------------------+
CSession *session1,*session2;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   session1 = new CSession(StartHourSession1,StopHourSession1);
   session2 = new CSession(StartHourSession2,StopHourSession2);
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   delete session1;
   delete session2;
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   datetime nowtime;
   nowtime=TimeCurrent();
   if(session1.CheckSession(nowtime))
     {
      // Сессия 1
     }
   if(session2.CheckSession(nowtime))
     {
      // Сессия 2
     }
  }
//+------------------------------------------------------------------+
Причина обращения: