Открытие сделок по времени

 
Всем привет!
Подскажите начинающему.
Есть условие, чтобы советник открывал сделки в определенное время:
if(hour_trade && (Hour()>=start_hour     && Hour()<=end_hour)     && session_1)
if(hour_trade && (Minute()>=start_minute && Minute()<=end_minute) && session_1)

Работает только если минута старта меньше минуты окончания (7:30-8:40)
Как сделать, чтобы работало и когда минута старта больше минуты окончания (7:40-8:30)

 
Перевести часы и минуты в минуты.
 
psihodelit:
Всем привет!
Подскажите начинающему.
Есть условие, чтобы советник открывал сделки в определенное время:

Работает только если минута старта меньше минуты окончания (7:30-8:40)
Как сделать, чтобы работало и когда минута старта больше минуты окончания (7:40-8:30)

пересчитайте время в минуты:

tmStart = 7:40 = 7*60+40

tmStop = 8:30 = 8*60+30

так будет удобнее и все получится

 

Можно, например, так

int start_time, end_time, current_time;

start_time = start_hour * 60 + start_minute;
end_time = end_hour * 60 + end_minute;

current_time = Hour() * 60 + Minute();

if(start_time <= current_time && current_time <= end_time && session_1) {
// ...
}

Пока писал, уже двое человек ответили )

 
Всем спасибо, друзья!
 
psihodelit #:
Всем спасибо, друзья!

Не надо ничего пересчитывать в минуты, месяцы и эры )) Время в МТ4/5 выражается в формате datetime, а это секунды. Значит...

input string    StartTimeOpen   = "07:12";  //Время старта торг. операций
input string    StopTimeOpen    = "08:05";  //Время запрета торг. операций

    // функция проверяет вхождение серверного времени в заданный диапазон
    // если есть вхождение есть, возвращает true, иначе false 

    bool CheckForWorkTime(string startT, string stopT)
    {

        if (TimeCurrent() > StringToTime(startT) && TimeCurrent() < StringToTime(stopT))

            return true;

        return false;

    }


    // функция проверяет вхождение серверного времени в заданный диапазон
    // если есть вхождение есть, возвращает true, иначе false 

    bool CheckForWorkTime(datetime startT, datetime stopT)

    {

        if (TimeCurrent() > startT && TimeCurrent() < stopT)

            return true ;

        return false;

    }

Тем же макаром можно и с датой в строке задавать, компилятор скушает.


 

Хорошая статья)))

class CTradeTimeGMT{
protected:
int StartTime;
int EndTime;
int GMTShiftTest;
int GMTShiftCur;
public:
void Init(int StartHour, int StartMinute, int EndHour, int EndMinute, int GMTshift){
StartTime=3600*StartHour+60*StartMinute;
EndTime=3600*EndHour+60*EndMinute;
GMTShiftCur=GMTshift;
GMTShiftTest=GMTshift+int((TimeGMTOffset())/3600);
//Alert(TimeGMTOffset()); 
if(MQLInfoInteger( MQL_TESTER))GMTShiftCur=GMTShiftTest;
}
bool Check(int GMTshift){
int CurTime=(int)((TimeGMT()+(GMTShiftCur*3600))%86400);
if(StartTime<EndTime){
return(CurTime>=StartTime && CurTime<EndTime);
}
else{
return(CurTime>=StartTime || CurTime<EndTime);
}
}
};

функцию не нашел. Это по мотивам Д.Федосеева из учебника)

Основы программирования на MQL5 - Время
Основы программирования на MQL5 - Время
  • www.mql5.com
В статье рассматриваются стандартные функции MQL5 для работы со временем, приемы программирования и практически полезные функции для работы со временем, которые необходимы при создании экспертов и индикаторов. Значительное внимание уделено общей теории времяисчисления. В первую очередь статья должна быть интересна новичкам, приступившим к изучению программирования на MQL5.
 
//+------------------------------------------------------------------+
//|                                                   Trade Time.mq4 |
//|                        Copyright 2024, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property strict
//+------------------------------------------------------------------+
//| Main Menu     variables                                          |
//+------------------------------------------------------------------+
input string            MySessionBegin    = "02:00";        // Opening My session
input string            MySessionEnd      = "22:00";        // Closing My session
//---
int      EA_TradingTime=0;
int      EAStartHour;
int      EAStartMinute=0;
int      EAEndHour;
int      EAEndMinute=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create timer
   EventSetTimer(60);
//---
//--- перевод времени из текста в цифру ---
   EAStartHour = StrToInteger(MySessionBegin);
   EAEndHour = StrToInteger(MySessionEnd);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer
   EventKillTimer();

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---
//--- Проверяем разрешенное время торговли ---
   if(isTradeTimeInt(EAStartHour,EAStartMinute,EAEndHour,EAEndMinute)==1)
     {
      EA_TradingTime=1;// Торговое время
     }
   else
     {
      EA_TradingTime=0;// НЕ Торговое время
     }
//---
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Expert Works function                                            |
//+------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//|  Описание : Возвращает флаг разрешения торговли по времени.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    hb - часы времени начала торговли                                       |
//|    mb - минуты времени начала торговли                                     |
//|    he - часы времени окончания торговли                                    |
//|    me - минуты времени окончания торговли                                  |
//+----------------------------------------------------------------------------+
int isTradeTimeInt(int hb=0, int mb=0, int he=0, int me=0)
  {
   datetime db, de;           // Время начала и окончания работы
   int      hc;               // Часы текущего времени торгового сервера

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

   if(TimeCurrent()>=db && TimeCurrent()<=de)
      return(1);
   else
      return(0);
  }
//--- End ---

Рабочее решение для контроля времени торговли эксперта