Нужно чтобы с 1 до 12 вел торговлю.
я сделал так. Правильно?
да
так он торгует каждый час по часу.
а чтобы с 2 до 12 как?
bool isTradingTime( const int startHour, const int startMinute, const int endHour, const int endMinute) { MqlDateTime date = {0}; TimeCurrent(date); return date.hour >= startHour && date.min >= startMinute && date.hour <= endHour && date.min <= endMinute; } OnTick() { if (isTradingTime(13, 0, 23, 59)) // from 13:00 to 23:59 { // trading } }
С таким подходом встает традиционный вопрос - что делать, если диапазон переходит на другие сутки? Например 22:10-03:45
1. не пытался делать метод универсальным, главное чтобы были циферки, которые можно вынести в параметры тестера
2. если нужно тестировать разрыв между днями, то можно два условия
if (23:00 - 23:59) or if (00:01 - 01:00)
ранее выкладывал такой вариант, но он привязан к формату времени, поэтому не нравится
если сильно встряла ночная торговля между днями, и вместо двух условий хочется сделать универсальный метод, то можно к условию проверки времени добавить проверку дня недели, но мне это не надо
bool IsTradingTime(const string shours = "0:30-23:30", const string sdays = "0-6") { string days[]; string hours[]; StringSplit(sdays, '-', days); StringSplit(shours, '-', hours); MqlDateTime o = {0}; datetime now = TimeCurrent(o); string day = string(o.year) + "." + string(o.mon) + "." + string(o.day); datetime H1 = StringToTime(day + " " + hours[0]); if (hours[0] > hours[1]) { day = string(o.year) + "." + string(o.mon) + "." + string(o.day + 1); } datetime H2 = StringToTime(day + " " + hours[1]); int D1 = int(days[0]); int D2 = int(days[ArraySize(hours) - 1]); if (now >= H1 && now <= H2 && o.day_of_week >= D1 && o.day_of_week <= D2) return true; return false; }
1. не пытался делать метод универсальным, главное чтобы были циферки, которые можно вынести в параметры тестера
2. если нужно тестировать разрыв между днями, то можно два условия
if (23:00 - 23:59) or if (00:01 - 01:00)
ранее выкладывал такой вариант, но он привязан к формату времени, поэтому не нравится
если сильно встряла ночная торговля между днями, и вместо двух условий хочется сделать универсальный метод, то можно к условию проверки времени добавить проверку дня недели, но мне это не надо
Мне тоже разрывы не нужны, а вот насчет оптимизации по времени как-то не думал, сделал по простому
input string StartTimeOpen = "02:00"; //Time of the start of trading operations input string StopTimeOpen = "23:00"; //Time of the stop of trading operations // функция проверяет вхождение серверного времени в заданный диапазон // если есть вхождение есть, возвращает true, иначе false bool CheckForWorkTime(string startT, string stopT) { if (TimeCurrent() > StringToTime(startT) && TimeCurrent() < StrToTime(stopT)) return(true); return (false); }
если время старт больше чем время стоп
ко времени стоп просто добавить 24 часа
С таким подходом встает традиционный вопрос - что делать, если диапазон переходит на другие сутки? Например 22:10-03:45
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Не для разработчиков МТ! Чем заменить INIT_PARAMETERS_INCORRECT ?
fxsaber, 2018.07.10 16:39
Нужно немного уметь задавать входные параметры.
Очень распространенный пример можно привести. Когда оптимизируют суточный интервал торговли, то чаще всего задают суточное время старта и конца интервала - два входных параметра.
Но это много хуже для ГА, чем, например, задать время старта и длительность. Казалось бы, одно и то же, но не для ГА. Во втором случае ГА справится лучше. Хотя "лучше" - довольно субъективная оценка.
bool isTradeTime(string TimeBegin="00:00", string TimeEnd="00:00") { datetime dtBegin, dtEnd, TimeCur=TimeCurrent(); dtBegin=StringToTime(TimeToString(TimeCur, TIME_DATE)+" "+TimeBegin); dtEnd =StringToTime(TimeToString(TimeCur, TIME_DATE)+" "+TimeEnd); if(dtBegin>=dtEnd) { if(TimeCur>=dtEnd) dtEnd+=24*60*60; else dtBegin-=24*60*60; } return(TimeCur>=dtBegin && TimeCur<=dtEnd); }
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Нужно чтобы с 1 до 12 вел торговлю.
я сделал так. Правильно?