работа советника в определенные часы - страница 2

 
Igor Makanu:

вот мой пример https://www.mql5.com/ru/forum/160683/page861#comment_11840254

но  у меня как раз была задача с точностью до минут время работы советника получать, можно убрать минуты, да и проще только часы проверять, - где то было, поищу как только с часами делал

ЗЫ: но модератор сказал, что негоже такие простые классы писать, ибо класс это дело великое и класс должен уметь и то, и сё и ... "Я еще и вышивать могу, и на машинке... тоже." (С)

)))

Вот может не нужно этого приписывать? Если вам не был понятен посыл, то не перекладывайте свои проблемы понимания на злых всезапрещающих "модераторов". Не превращайтесь из нормального участника форума в склочную женщину пожалуйста.

Был о вас несколько иного мнения.

 

Где то видел под МТ что можно в свойствах советника нажимать на квадратик и он меняет свой цвет. И таких квадратиков - 24. 
так же само сделано в настройках предоставления агентов для оптимизации. 


Вот типа такого бы можно было использовать , Пусть даже с применением DLL

 
Igor Makanu:

плюсы то какие у структур? - не нашел

https://www.mql5.com/ru/forum/170952/page137#comment_12349325

Особенности языка mql5, тонкости и приёмы работы
Особенности языка mql5, тонкости и приёмы работы
  • 2019.06.09
  • www.mql5.com
В данной теме будут обсуждаться недокументированные приёмы работы с языком mql5, примеры решения тех, или иных задач...
 
Artyom Trishkin:

Вот может не нужно этого приписывать? Если вам не был понятен посыл, то не перекладывайте свои проблемы понимания на злых всезапрещающих "модераторов". Не превращайтесь из нормального участника форума в склочную женщину пожалуйста.

Был о вас несколько иного мнения.

Если Вам было не понятное мое сообщение, то не превращайтесь в в склочную женщину пожалуйста, в конце моего сообщения были смайлики и я потрудился найти известную фразу из кота Матроскина, чтобы подчеркнуть не серьезность моего сообщения

Был о Вас несколько другого мнения.

Не имею ничего против модерации моих сообщений, возможно я, что то не вижу .... время сейчас такое, то защитников "ПротивБАБ" обидел, то чувства инакомыслящих, то упаси обидеть - есть еще верующие...


Dmitiry Ananiev:

Где то видел под МТ что можно в свойствах советника нажимать на квадратик и он меняет свой цвет. И таких квадратиков - 24. 
так же само сделано в настройках предоставления агентов для оптимизации. 


Вот типа такого бы можно было использовать , Пусть даже с применением DLL

Вы противоречите своему первому сообщению 

Dmitiry Ananiev:

Нажимать кнопки на графике - тоже не выход. Вообще кнопки на чарте не нужны.  

 Вам предлагали варианты которые будут работать в тестере и в оптимизаторе

? цель использования какая? 

 
Dmitiry Ananiev:

Где то видел под МТ что можно в свойствах советника нажимать на квадратик и он меняет свой цвет. И таких квадратиков - 24. 
так же само сделано в настройках предоставления агентов для оптимизации. 


Вот типа такого бы можно было использовать , Пусть даже с применением DLL

Это для агента так время задается, функция терминала.

 
Ilnur Khasanov:

Мне очень понравилось как сделано здесь https://www.mql5.com/ru/articles/2166

А в каком месте? То красивое с квадратиками, это же окно агента.

 
Igor Makanu:

Если Вам было не понятное мое сообщение, то не превращайтесь в в склочную женщину пожалуйста, в конце моего сообщения были смайлики и я потрудился найти известную фразу из кота Матроскина, чтобы подчеркнуть не серьезность моего сообщения

Был о Вас несколько другого мнения.

Не имею ничего против модерации моих сообщений, возможно я, что то не вижу .... время сейчас такое, то защитников "ПротивБАБ" обидел, то чувства инакомыслящих, то упаси обидеть - есть еще верующие...


Вы противоречите своему первому сообщению 

 Вам предлагали варианты которые будут работать в тестере и в оптимизаторе

? цель использования какая? 

удобство выбора часов торговли в окне свойств советника. 
Придется через стринг реализовать. Так получится более-менее читабельно и комфортно. 

 
Dmitiry Ananiev:

удобство выбора часов торговли в окне свойств советника. 
Придется через стринг реализовать. Так получится более-менее читабельно и комфортно. 

ну так бы и написали, что работа в оптимизаторе не важна, нужен только удобный интерфейс

@Dmitry Fedoseev  опубликовал код, как раз под Ваши задачи ;)


ЗЫ: наверное вряд ли найду у себя исходник, но можно с помощью enum сделать выпадающие списки в окне настроек, довольно прикольно, и в оптимизаторе будет работать

 
Igor Makanu:

мощью enum сделать выпадающие списки в окне настроек, довольно прикольно, и в оптимизаторе будет работать

странно, но нашлось, вот о таком виде настроек советника я говорил:


вот исходник:

#property copyright "IgorM"
#property link      "https://www.mql5.com/ru/users/igorm"
#property version   "1.00"
#property strict
#property indicator_chart_window
//+------------------------------------------------------------------+
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*/
  };
struct TIMESESSION{int start_hour,stop_hour; datetime duration;};

sinput string  s1="Session Time :";//----------------------------
input HOUR     StartHourSession1       =  h22;
input HOUR     StopHourSession1        =  h07;
input HOUR     StartHourSession2       =  h07;
input HOUR     StopHourSession2        =  h12;
input HOUR     StartHourSession3       =  h12;
input HOUR     StopHourSession3        =  h22;
//+------------------------------------------------------------------+
class CSession
  {
private:
   int               StartHour,StopHour;
   bool              intraday;
public:
   void              CSession(HOUR hstart,HOUR hstop);
   void              ~CSession(void){};
   bool              CheckSession(datetime t);
  };
//+------------------------------------------------------------------+
void CSession::CSession(HOUR hstart,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(StartHourSession1,StopHourSession1);
CSession session2(StartHourSession2,StopHourSession2);
CSession session3(StartHourSession3,StopHourSession3);
int LastSession,HistoryHandle=-1;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int i,NowSession=0;
   datetime timecurrent=TimeCurrent();
   if(session1.CheckSession(timecurrent)) NowSession=1;
   if(session2.CheckSession(timecurrent)) NowSession=2;
   if(session3.CheckSession(timecurrent)) NowSession=3;
   if(NowSession!=LastSession)
     {
     }
//--- return value of prev_calculated for next call
   return(rates_total);

  }
//+------------------------------------------------------------------+

используется 3 временных интервала ( торговые сессии)

 
Igor Makanu:

странно, но нашлось, вот о таком виде настроек советника я говорил:


вот исходник:

используется 3 временных интервала ( торговые сессии)

НУ во первых - проще вбить значения, чем выискивать и выбрать нужное. ВО-вторых, Я с самого начала указал что надо по МТ4. И в третьих я написал, что что торговое время будет в 3 в 5 в 7 15 16 17 18 19 часов. Как видите интервала уже 4. И ваш код тут не поможет. Но все равно спасибо за участие. 

Для себя сделал вот так: 

input string               WorkHours = "1 3 5 12 14 18 20 ";

bool WorkHour()
  {
   if (WorkHours == "" || WorkHours==" " || WorkHours==NULL) return true;
   bool hh[24]={false};
   string wh=WorkHours;
   while(true)
     {
      if(StringReplace(wh,"  "," ")==0) break;
     }

   int sp=0;
   while(true)
     {
      int i=StringFind(wh," ",sp);
      if(i==-1) break;
      string num= StringSubstr(wh,sp,i-sp);
      int n = (int)StringToInteger(num);
      hh[n] = true;
      sp = i+1;
     }
   datetime tc = TimeCurrent();
   return hh[TimeHour(tc)];
 }


Приму любую критику для улучшения работы кода. 
Кому надо - пользуйтесь.

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