Минусы:
* не предназначено для оптимизации в тестере
Да, точно. Спасибо. Сейчас допишу.
datetime StringToTime2( const string Str ) { const int Pos = StringFind(Str, ":"); return(((int)StringSubstr(Str, 0, Pos) * 60 + (int)StringSubstr(Str, Pos + 1)) * 60); } void OnStart() { Print(TimeToString(StringToTime("1:02"), TIME_MINUTES)); Print(TimeToString(StringToTime2("1:02"), TIME_MINUTES)); }
К сожалению, это только для самого "тепличного" случая, когда пользователь дисциплинирован. Здесь нет ни одной проверки на корректность ввода. О чём и была речь в первом посте: то что просто и наглядно для пользователя, в программе занимает "тону" кода.
К сожалению, это только для самого "тепличного" случая, когда пользователь дисциплинирован. Здесь нет ни одной проверки на корректность ввода. О чём и была речь в первом посте: то что просто и наглядно для пользователя, в программе занимает "тону" кода.
Штатная (и кастомная) функция со всем справляется.
- www.mql5.com
Штатная функция со всем справляется.
Всё штатное рассчитано для "тепличного" случая - когда пользователь сознательно вводит КОРРЕКТНЫЕ данные. Но мы то живём в реальном мире :) и знаем чего могут пользователи наворотить. Поэтому "штатное" для способа ввода вида
//--- input parameters input string CloseTime = "20:50"; // Время закрытия позиции
совсем не подходит.
Минусы:
* не предназначено для оптимизации в тестере.
Может участвовать косвенно в Оптимизации. Например, задаете такую строку "02:10 - 14:15, 0:15" (с 02:10 до 14:15 с шагом 15 минут) и получаете соответствующую оптимизацию.
- www.mql5.com
совсем не подходит.
Проверьте.
Когда встаёт задача задать во входных параметрах время в формате ЧЧ:ММ, приходится решать дилему: удобство пользователя при вводе значений или удобство программирования. Самый известный способ ввода:
Плюсы:
* "человеческий" внешний вид значения:
Минусы:
* довольно много проверок, для того, чтобы корректно перевести эту строку в целый тип или в datetime.
* не предназначено для оптимизации в тестере.
Самая первая проверка (которая уже ставит пользователя в ограничительные рамки) - требование придерживаться формата именно ЧЧ:ММ (например 04:09), а не Ч:ММ (например 4:09) или Ч:М (например 4:9).
И даже здесь уже распутье: а может разрешить пользователю ввод в формате Ч:ММ (например 4:09) или Ч:М (например 4:9)?
...
Первую проверку можно переиначить - ввести первичную проверку на длину текста: не более пяти символов (для варианта вида 04:09) и не менее трёх символов (для варианта вида 4:09)
//+------------------------------------------------------------------+ //| Check HH:MM To Time | //+------------------------------------------------------------------+ bool CheckHHMMToTime(const string text) { bool result=true; //--- step 1: the number of characters must be at least 3 and not more than 5 if(StringLen(text)<3 || StringLen(text)>5) return(false); //--- return(result); }
Первую проверку можно переиначить - ввести первичную проверку на длину текста: не более пяти символов (для варианта вида 04:09) и не менее трёх символов (для варианта вида 4:09)
На входе надо зачистить от пробелов и бонусом можно добавить замену тире (2 типа) на двоеточие
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Когда встаёт задача задать во входных параметрах время в формате ЧЧ:ММ, приходится решать дилему: удобство пользователя при вводе значений или удобство программирования.
Вариант 1:
Самый известный способ ввода:
Плюсы:
Минусы:
Самая первая проверка (которая уже ставит пользователя в ограничительные рамки) - требование придерживаться формата именно ЧЧ:ММ (например 04:09), а не Ч:ММ (например 4:09) или Ч:М (например 4:9).
И даже здесь уже распутье: а может разрешить пользователю ввод в формате Ч:ММ (например 4:09) или Ч:М (например 4:9)?
...