Я заметил похожую проблему с переводом времени из строки в цифру - еще более полгода назад. но всё думал, что это только на моей машине (мало ли что с виндой может быть)
Но раз у вас похожее, то напишите в сервисдеск.
кстати, чтоб выяснить для себя более подробно - перепроверьте в режиме debug.
Говорят, что МТ5 писался с нуля.
Сделал скрипт более понятным по выводу в лог:
//+------------------------------------------------------------------+ //| CheckConvert.mq5 | //| Copyright 2010, MetaQuotes Software Corp. | //| http://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "2010, Avatara" #property link "Avatara@bigmir.net" #property version "1.00" //+------------------------------------------------------------------+ //| Convert string date&time formated DD.MM.YYYY & HH:MM | //+------------------------------------------------------------------+ long SringtoTimeA(string fDate,string fTime) { string sDD=StringSubstr(fDate,0,2); // Day string sMM=StringSubstr(fDate,3,2); // Month string sYYYY=StringSubstr(fDate,6,4);// Year string sConcat=""; if(StringLen(fTime)<5) fTime="0"+fTime; int i=StringConcatenate(sConcat,sYYYY,".",sMM,".",sDD," ",fTime); PrintFormat("\r\n%s конвертируем строку: %s",__FUNCTION__,sConcat); PrintFormat("StringToTime(\"%s\")=%s",sConcat,TimeToString(StringToTime(sConcat))); return(StringToTime(sConcat)); } //+------------------------------------------------------------------+ //| String_to_Time.mq4 | //+------------------------------------------------------------------+ int OnStart() { datetime old_datetime=D'1970.01.01 00:00'; uint start=GetTickCount(); string fDate="17.11.2010"; string fTime="00:01"; datetime DateTimes=SringtoTimeA(fDate,fTime); long i_datetime=DateTimes; old_datetime=i_datetime; fTime="23:59"; DateTimes=SringtoTimeA(fDate,fTime); i_datetime=DateTimes; old_datetime=i_datetime; fDate="18.11.2010";fTime="00:00"; DateTimes=SringtoTimeA(fDate,fTime); i_datetime=DateTimes; old_datetime=i_datetime; fTime="23:59"; DateTimes=SringtoTimeA(fDate,fTime); i_datetime=DateTimes; fTime="24:00"; DateTimes=SringtoTimeA(fDate,fTime); i_datetime=DateTimes; old_datetime=i_datetime; fDate="19.11.2010";fTime="00:00"; DateTimes=SringtoTimeA(fDate,fTime); i_datetime=DateTimes; old_datetime=i_datetime; fTime="00:01"; DateTimes=SringtoTimeA(fDate,fTime); i_datetime=DateTimes; //---- return(0); } //+------------------------------------------------------------------+
Результат
2010.11.20 18:56:55 CheckConvert (EURUSD,H1) 2010.11.20 18:56:55 CheckConvert (EURUSD,H1) SringtoTimeA конвертируем строку: 2010.11.17 00:01 2010.11.20 18:56:55 CheckConvert (EURUSD,H1) StringToTime("2010.11.17 00:01")=2010.11.17 00:01 2010.11.20 18:56:55 CheckConvert (EURUSD,H1) 2010.11.20 18:56:55 CheckConvert (EURUSD,H1) SringtoTimeA конвертируем строку: 2010.11.17 23:59 2010.11.20 18:56:55 CheckConvert (EURUSD,H1) StringToTime("2010.11.17 23:59")=2010.11.17 23:59 2010.11.20 18:56:55 CheckConvert (EURUSD,H1) 2010.11.20 18:56:55 CheckConvert (EURUSD,H1) SringtoTimeA конвертируем строку: 2010.11.18 00:00 2010.11.20 18:56:55 CheckConvert (EURUSD,H1) StringToTime("2010.11.18 00:00")=2010.11.18 00:00 2010.11.20 18:56:55 CheckConvert (EURUSD,H1) 2010.11.20 18:56:55 CheckConvert (EURUSD,H1) SringtoTimeA конвертируем строку: 2010.11.18 23:59 2010.11.20 18:56:55 CheckConvert (EURUSD,H1) StringToTime("2010.11.18 23:59")=2010.11.18 23:59 2010.11.20 18:56:55 CheckConvert (EURUSD,H1) 2010.11.20 18:56:55 CheckConvert (EURUSD,H1) SringtoTimeA конвертируем строку: 2010.11.18 24:00 2010.11.20 18:56:55 CheckConvert (EURUSD,H1) StringToTime("2010.11.18 24:00")=2010.11.18 23:00 2010.11.20 18:56:55 CheckConvert (EURUSD,H1) 2010.11.20 18:56:55 CheckConvert (EURUSD,H1) SringtoTimeA конвертируем строку: 2010.11.19 00:00 2010.11.20 18:56:55 CheckConvert (EURUSD,H1) StringToTime("2010.11.19 00:00")=2010.11.19 00:00 2010.11.20 18:56:55 CheckConvert (EURUSD,H1) 2010.11.20 18:56:55 CheckConvert (EURUSD,H1) SringtoTimeA конвертируем строку: 2010.11.19 00:01 2010.11.20 18:56:55 CheckConvert (EURUSD,H1) StringToTime("2010.11.19 00:01")=2010.11.19 00:01
Действительно, в одном случае есть ошибка. Спасибо за сообщение, разберемся.
А в чём проблема? 24:00 - зто неправильное значение. Например, используется проверка if(hour>23) hour=23; Исследуйте дальше
А в чём проблема? 24:00 - зто неправильное значение. Например, используется проверка if(hour>23) hour=23; Исследуйте дальше
Может тогда какую-нибудь ошибку кидать в лог в рантайме?
GetLastError Вам в помощь
Свою ошибку увидел. Спасибо за помощь!
//+------------------------------------------------------------------+ //| Convert string date&time formated DD.MM.YYYY & HH:MM | //+------------------------------------------------------------------+ long SringtoTimeA(string fDate, string fTime) { string sDD=StringSubstr(fDate,0,2); // Day string sMM=StringSubstr(fDate,3,2); // Month string sYYYY=StringSubstr(fDate,6,4);// Year string sConcat=""; if (StringLen(fTime)<5) fTime="0"+fTime; int i=StringConcatenate(sConcat,sYYYY,".",sMM,".",sDD," ",fTime); return(StringToTime(sConcat)); }
Будет правильным.
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Говорят, что МТ5 писался с нуля.
Обнаружили странность в МТ4.
Решил проверить в МТ5 - давно сюда не заглядывал.
Кто из корифеев пояснит следующий лог?
2010.11.19 20:34:38 String_to_DateTime (EURUSD,H1) 19.11.2010 00:01= 2010.11.19 00:01:00 int=:1290124860 shift=60
2010.11.19 20:34:38 String_to_DateTime (EURUSD,H1) 19.11.2010 00:00= 2010.11.19 00:00:00 int=:1290124800 shift=-82800
2010.11.19 20:34:38 String_to_DateTime (EURUSD,H1) 18.11.2010 24:00= 2010.11.19 23:00:00 int=:1290207600 shift=-3540
2010.11.19 20:34:38 String_to_DateTime (EURUSD,H1) 18.11.2010 23:59= 2010.11.19 23:59:00 int=:1290211140 shift=86340
2010.11.19 20:34:38 String_to_DateTime (EURUSD,H1) 18.11.2010 00:00= 2010.11.19 00:00:00 int=:1290124800 shift=-86340
2010.11.19 20:34:38 String_to_DateTime (EURUSD,H1) 17.11.2010 23:59= 2010.11.19 23:59:00 int=:1290211140 shift=86280
2010.11.19 20:34:38 String_to_DateTime (EURUSD,H1) 17.11.2010 00:01= 2010.11.19 00:01:00 int=:1290124860 shift=1290124860
Текст проверочного скрипта -
#property link "Avatara@bigmir.net"
#property version "1.00"
//+------------------------------------------------------------------+
//| Convert string date&time formated DD.MM.YYYY & HH:MM |
//+------------------------------------------------------------------+
long SringtoTimeA(string fDate, string fTime)
{
string sDD=StringSubstr(fDate,0,2); // Day
string sMM=StringSubstr(fDate,3,2); // Month
string sYYYY=StringSubstr(fDate,6,4);// Year
string sConcat="";
if (StringLen(fTime)<5) fTime="0"+fTime;
int i=StringConcatenate(sConcat,sYYYY,sMM,sDD," ",fTime);
return(StringToTime(sConcat));
}
//+------------------------------------------------------------------+
//| String_to_Time.mq4 |
//+------------------------------------------------------------------+
int OnStart()
{
datetime old_datetime=D'1970.01.01 00:00';
string fDate="17.11.2010";
string fTime="00:01";
datetime DateTimes=SringtoTimeA( fDate, fTime);
long i_datetime=DateTimes;
Print (fDate+" "+fTime,"= ",DateTimes," int=:",i_datetime
," shift=",i_datetime-old_datetime);
old_datetime=i_datetime;
fTime="23:59";
DateTimes=SringtoTimeA( fDate, fTime);
i_datetime=DateTimes;
Print (fDate+" "+fTime,"= ",DateTimes," int=:",i_datetime
," shift=",i_datetime-old_datetime);
old_datetime=i_datetime;
fDate="18.11.2010";fTime="00:00";
DateTimes=SringtoTimeA( fDate, fTime);
i_datetime=DateTimes;
Print (fDate+" "+fTime,"= ",DateTimes," int=:",i_datetime
," shift=",i_datetime-old_datetime);
old_datetime=i_datetime;
fTime="23:59";
DateTimes=SringtoTimeA( fDate, fTime);
i_datetime=DateTimes;
Print (fDate+" "+fTime,"= ",DateTimes," int=:",i_datetime
," shift=",i_datetime-old_datetime);
old_datetime=i_datetime;
fTime="24:00";
DateTimes=SringtoTimeA( fDate, fTime);
i_datetime=DateTimes;
Print (fDate+" "+fTime,"= ",DateTimes," int=:",i_datetime
," shift=",i_datetime-old_datetime);
old_datetime=i_datetime;
fDate="19.11.2010";fTime="00:00";
DateTimes=SringtoTimeA( fDate, fTime);
i_datetime=DateTimes;
Print (fDate+" "+fTime,"= ",DateTimes," int=:",i_datetime
," shift=",i_datetime-old_datetime);
old_datetime=i_datetime;
fTime="00:01";
DateTimes=SringtoTimeA( fDate, fTime);
i_datetime=DateTimes;
Print (fDate+" "+fTime,"= ",DateTimes," int=:",i_datetime
," shift=",i_datetime-old_datetime);
//----
return(0);
}
//+------------------------------------------------------------------+