Всем привет!
Подскажите начинающему.
Есть условие, чтобы советник открывал сделки в определенное время:
Работает только если минута старта меньше минуты окончания (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) { // ... }
Пока писал, уже двое человек ответили )
Всем спасибо, друзья!
Не надо ничего пересчитывать в минуты, месяцы и эры )) Время в МТ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); } } };
функцию не нашел. Это по мотивам Д.Федосеева из учебника)

- www.mql5.com
//+------------------------------------------------------------------+ //| 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 ---
Рабочее решение для контроля времени торговли эксперта

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Подскажите начинающему.
Есть условие, чтобы советник открывал сделки в определенное время:
Работает только если минута старта меньше минуты окончания (7:30-8:40)
Как сделать, чтобы работало и когда минута старта больше минуты окончания (7:40-8:30)