Советник по времени

 
Sergey Ponomarev:

Подскажите как внедрить в советник время по которому он будет торговать. 

допустим с 22 до 16 итд 

Поздравляем вас - вы задали этот вопрос в 100500 раз и получаете приз зрительских симпатий!

extern string   StartTimeOpen     = "08:00";
extern string   StopTimeOpen      = "21:30"; 

// функция проверяет вхождение серверного времени в заданный диапазон
// если есть вхождение есть, возвращает true, иначе false 
bool CheckForWorkTime(string tStart, string tStop)
{
    if(TimeCurrent() >= StringToTime(tStart) && TimeCurrent() <= StrToTime(tStop))
        return(true);
    return (false);        
}

 **

 
Alexey Volchanskiy:

Поздравляем вас - вы задали этот вопрос в 100500 раз и получаете приз зрительских симпатий!

 **

cCпасибо) 

 
Alexey Volchanskiy:

Поздравляем вас - вы задали этот вопрос в 100500 раз и получаете приз зрительских симпатий!

 **

Алексей! Смотрите, вы выложили код, который работает внутри одних суток, а вопрос звучал при переходе работы между сутками (с)" с 22 до 16 

 
Vitaly Muzichenko:

Алексей! Смотрите, вы выложили код, который работает внутри одних суток, а вопрос звучал при переходе работы между сутками (с)" с 22 до 16 

Да, действительно! Взял из своего робота, а я ночью не торгую. Надо переделать..
 
Только "Полезные функции от KimIV". (Yuriy Tokman) - MQL4 форум - Страница 9
Только "Полезные функции от KimIV". (Yuriy Tokman) - MQL4 форум - Страница 9
  • www.mql5.com
Только "Полезные функции от KimIV". (Yuriy Tokman) - MQL4 форум - Страница 9
 
bool CСyTrade::WorkTime()
  {
   datetime dt=TimeCurrent();
   datetime Time_Start= StrToTime(pTimeBeg);
   datetime Time_Stop = StrToTime(pTimeEnd);
   bool codreturn=false;
   if(((( dt>=Time_Start && dt<=StrToTime("23:59:59")) || (dt>=StrToTime("00:00:00") && dt<Time_Stop)) && Time_Start>Time_Stop) || (((dt>=Time_Start) && (dt<=Time_Stop) && Time_Start<Time_Stop)))
     {
      codreturn=true;
     }
   return(codreturn);
  }

но так будет более   красивей

Функция isTradeTimeInt().

Данная функция возвращает флаг разрешения торговли по времени. Возвращаемое значение - истина или ложь. Функция isTradeTimeInt() 
по принципу распознавания временного интервала аналогична функции isTradeTimeString(),
 то есть время начала торговли может быть как больше (временной отрезок внутри суток) времени окончания, так и меньше (временной отрезок в разных сутках).
 Функция isTradeTimeInt() принимает следующие необязательные параметры:

    hb - Число, задаёт часы времени начала торговли. Значение по умолчанию - 0.
    mb - Число, задаёт минуты времени начала торговли. Значение по умолчанию - 0.
    he - Число, задаёт часы времени окончания торговли. Значение по умолчанию - 0.
    me - Число, задаёт минуты времени окончания торговли. Значение по умолчанию - 0.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 30.04.2009                                                     |
//|  Описание : Возвращает флаг разрешения торговли по времени.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    hb - часы времени начала торговли                                       |
//|    mb - минуты времени начала торговли                                     |
//|    he - часы времени окончания торговли                                    |
//|    me - минуты времени окончания торговли                                  |
//+----------------------------------------------------------------------------+
bool isTradeTimeInt(int hb=0, int mb=0, int he=0, int me=0) {
  datetime db, de;           // Время начала и окончания работы
  int      hc;               // Часы текущего времени торгового сервера

  db=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+hb+":"+mb);
  de=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+he+":"+me);
  hc=TimeHour(TimeCurrent());
  if (db>=de) {
    if (hc>=he) de+=24*60*60; else db-=24*60*60;
  }

  if (TimeCurrent()>=db && TimeCurrent()<=de) return(True);
  else return(False);
}
 
bool time_check(string start,string end)
     {
      int h_start=string_hour(start);
      int h_end=string_hour(end);
      int m_start=string_minute(start);
      int m_end=string_minute(end);
      int s_start=string_seconds(start);
      int s_end=string_seconds(end);

      datetime dtm_start=0,dtm_end=0;

      if(h_end<h_start && Hour()>=0 && Hour()<h_start)
        {
         //если у нас время начала больше (фактически с прошлого дня), то надо это учесть
         dtm_start=iTime(NULL,PERIOD_D1,1)+h_start*3600+m_start*60+s_start;
         dtm_end=iTime(NULL,PERIOD_D1,0)+h_end*3600+m_end*60+s_end;
        }

      if(h_end<h_start && Hour()>=h_start && Hour()>0)
        {
         //если у нас время начала больше (фактически с прошлого дня), то надо это учесть
         dtm_start=iTime(NULL,PERIOD_D1,0)+h_start*3600+m_start*60+s_start;
         dtm_end=iTime(NULL,PERIOD_D1,0)+h_end*3600+m_end*60+24*3600+s_end;
        }

      if(h_end>=h_start)
        {
         //если у нас время начала больше (фактически с прошлого дня), то надо это учесть
         dtm_start=iTime(NULL,PERIOD_D1,0)+h_start*3600+m_start*60+s_start;
         dtm_end=iTime(NULL,PERIOD_D1,0)+h_end*3600+m_end*60+s_end;
        }

      if(TimeCurrent()>=dtm_start && TimeCurrent()<=dtm_end) return (true);

      return (false);
     }

start, end задается время в любом формате

 

ЧЧ-ЧЧ

ЧЧ:ММ-ЧЧ:ММ

ЧЧ:ММ:СС-ЧЧ:ММ:СС

ЧЧ - часы

ММ - минуты

СС - секунды 

 

на комментарии не обращайте  внимания)

 

Вот допустим я хочу сделать выключение (включение) определенного часа в сутках. Что тогда делать?)

На примере хотя бы 5 часов.

extern int 0h = true;
extern int 1h = true;
extern int 2h = false;
extern int 3h = false;
extern int 4h = true;
extern int 5h = false;
//...........и так то 24h
 
Хелп
 
Guaro:

Вот допустим я хочу сделать выключение (включение) определенного часа в сутках. Что тогда делать?)

На примере хотя бы 5 часов.

Для начала, имена переменных не могут называться с цифры )) Можно поставить в начале подчеркивание

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