Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 2586

 
Roman Shiredchenko #:

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


типа этого на МТ 4 сделано

datetime thisDay=0;             // время начала текущего дня
datetime nextDay=0;             // время начала следующего дня
datetime tradeAllowedFrom=0;    // время с которого разрешена торговля
datetime tradeAllowedTo=0;      // время с которого торговля запрещена
bool tradeAllowed=true; // признак - разрешена/нет торговля прямо сейчас

// проверить время и выставить признак tradeAllowed
// вызывать начале OnTick, OnTimer, OnXXX...
void CheckTime() {
        datetime now=TimeCurrent();
        if (now==0) {
                // такое тоже бывает ;-)
                tradeAllowed=false;
                return;
        }
        if (now>=nextDay) {
                MqlDateTime dt; TimeToStruct(now,dt);
                dt.hour=dt.min=dt.sec=0;
                thisDay=StructToTime(dt);
                nextDay=thisDay+24*60*60;
                tradeAllowedFrom=thisDay+HourStart*60*60+MinStart*60;
                tradeAllowedTo=thisDay+HourEnd*60*60+MinEnd*60;
        }
        if (UseTime) {
                if (now>=tradeAllowedFrom && now<tradeAllowedTo) tradeAllowed=true;
                else tradeAllowed=false;        
        } else {
                tradeAllowed=true;
        }
}
 
Maxim Kuznetsov #:
dt.hour=dt.min=dt.sec=0;
А что, так можно было? )
 
Maxim Kuznetsov #:
спс большое - взял в работу
 
Aleksei Stepanenko #:
А что, так можно было? )

конечно можно, как в C/C++, все dt.hour dt.min dt.sec инты и можно присваивать константу всем сразу справа на лево.

Roman Shiredchenko #:
спс большое - взял в работу

только учти, это не "боевой код" - это с руки написано как демонстрация принципа..там есть что улучшить, уточнить и оптимизировать. По крайней мере чтобы отрабатывало только по смене секунд и в проверке условий сравнивать с Max(now,TimeTradeServer())

 
Maxim Kuznetsov #:

конечно можно, как в C/C++, все dt.hour dt.min dt.sec инты и можно присваивать константу всем сразу справа на лево.

круть

 
Roman Shiredchenko #:

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

вот в п.11 статьи переход с МТ 4 есть кое что - может есть что то поэлегантнее... )

https://www.mql5.com/ru/articles/81

типа этого на МТ 4 сделано

input string   StartTime   = "08:30"; // Start trade
input string   StopTime    = "22:40"; // Stop trade
datetime startTime,stopTime;
//+------------------------------------------------------------------+
bool TimeToTrade()
  {
   startTime=StringToTime(StartTime);
   if(StartTime=="") startTime=StringToTime("00:00");

   stopTime=StringToTime(StopTime);
   if(StopTime=="") stopTime=StringToTime("24:00");

   if(startTime<stopTime&&TimeCurrent()>=startTime&&TimeCurrent()<stopTime)
      return(true);
   if(startTime>stopTime&&(TimeCurrent()>=startTime||TimeCurrent()<stopTime))
      return(true);
   return(false);
  }
Я использую такой вариант. Если стартовое время больше, то торговля ночью.
 

Tretyakov Rostyslav #:
Я использую такой вариант. Если стартовое время больше, то торговля ночью.

StringToTime("24:00")

Не знал, что существует такое время.

[edit]

23 часа разницы между 00:00 и 24:00. Похоже, оно работает не совсем так, как вы ожидаете

void OnStart()
  {
   datetime t1 = StringToTime("24:00");
   datetime t2 = StringToTime("00:00");
   Print(long(t1 - t2)); // 82800
  }
 
Aleksei Stepanenko #:
А что, так можно было? )

в справке есть: 

Справочник MQL5 / Основы языка / Операторы / Оператор-выражение

Оператор присваивания:

Идентификатор = выражение;

  x=3;
  y=x=3; 
  bool equal=(x==y);


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

 
Tretyakov Rostyslav #:
Я использую такой вариант. Если стартовое время больше, то торговля ночью.
спасибо большое - взял к себе в робота, мне как раз и надо что в течение суток, у меня будет время начала меньше времени окончания типа с 11.30 час до 20.30 час - так котируется по времени бывает символ брокером
 
Roman Shiredchenko #:

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

вот в п.11 статьи переход с МТ 4 есть кое что - может есть что то поэлегантнее... )

https://www.mql5.com/ru/articles/81

типа этого на МТ 4 сделано

Вот этот код, хорошо тем, что его можно оптимизировать в тестере, в отличии от тех в которых время задаётся стринговой переменной.

input group               "-------------Торговое время-------------"
input int                 StartHour          = 7;               // час начала торговли
input int                 StartMin           = 0;               // минута начала торговли
input int                 EndHour            = 21;              // час окончания торговли
input int                 EndMin             = 30;              // минута окончания торговли
//+------------------------------------------------------------------+
bool TimeSession()
  {
   datetime TimeCur = TimeCurrent();
//--- время начала сессии
   int StartTime = 3600 * StartHour + 60 * StartMin;
//--- время окончания сессии
   int StopTime = 3600 * EndHour + 60 * EndMin;
//--- текущее время в секундах от начала дня
   TimeCur = TimeCur % 86400;
   if(StopTime < StartTime)
     {
      if(TimeCur >= StartTime || TimeCur < StopTime)      //--- переход через полночь
         return(true);
     }
   else
     {
      if(TimeCur >= StartTime && TimeCur < StopTime)      //--- внутри одного дня
         return(true);
     }
   return(false);
  }
//+------------------------------------------------------------------+