Не отбрасывают они, а округляют.
Смысл round в том, что параметр только 1.
Вот фрагмент кода
datetime web_time = get_web_time(); time_shift = int(NormalizeDouble((web_time-TimeCurrent())/100, 0)*100); Print("new time synchronization. web time: ",TimeToString(web_time,TIME_SECONDS)," tick time: ",TimeToString(TimeCurrent(),TIME_SECONDS)," shift: ",string(time_shift));
Вот результат
CG 0 12:20:52.884 ARM Scalper v1.0 (EURUSD,M1) new time synchronization. web time: 09:20:49 tick time: 11:20:49 shift: -7200 QE 0 12:21:02.957 ARM Scalper v1.0 (EURUSD,M1) 2 IM 0 12:21:51.991 ARM Scalper v1.0 (EURUSD,M1) new time synchronization. web time: 09:21:48 tick time: 11:21:49 shift: -7200 KS 0 12:22:03.096 ARM Scalper v1.0 (EURUSD,M1) 2 GK 0 12:22:52.130 ARM Scalper v1.0 (EURUSD,M1) new time synchronization. web time: 09:22:48 tick time: 11:22:48 shift: -7200 II 0 12:23:03.055 ARM Scalper v1.0 (EURUSD,M1) 2 NQ 0 12:24:40.140 ARM Scalper v1.0 (EURUSD,M1) new time synchronization. web time: 09:24:39 tick time: 11:24:37 shift: -7100 FG 0 12:24:40.140 ARM Scalper v1.0 (EURUSD,M1) 2 MO 0 12:25:00.379 ARM Scalper v1.0 (EURUSD,M1) new time synchronization. web time: 09:24:56 tick time: 11:24:57 shift: -7200 KM 0 12:25:03.190 ARM Scalper v1.0 (EURUSD,M1) 2
Такой же результат и с функцией round
datetime web_time = get_web_time(); time_shift = int(round((web_time-TimeCurrent())/100)*100); Print("new time synchronization. web time: ",TimeToString(web_time,TIME_SECONDS)," tick time: ",TimeToString(TimeCurrent(),TIME_SECONDS)," shift: ",string(time_shift));
Арифметического округления не происходит.
Вот так нагляднее
GH 0 13:08:51.502 ARM Scalper v1.0 (EURUSD,M1) new time synchronization. web time: 10:08:48 tick time: 12:08:48 shift: -7200 EI 0 13:09:03.054 ARM Scalper v1.0 (EURUSD,M1) 2 DF 0 13:09:51.560 ARM Scalper v1.0 (EURUSD,M1) new time synchronization. web time: 10:09:48 tick time: 12:09:48 shift: -7200 IG 0 13:10:02.905 ARM Scalper v1.0 (EURUSD,M1) 2 KL 0 13:10:52.746 ARM Scalper v1.0 (EURUSD,M1) new time synchronization. web time: 1646215850 tick time: 1646223049 shift: -7100 DM 0 13:11:03.470 ARM Scalper v1.0 (EURUSD,M1) 2 OJ 0 13:11:53.255 ARM Scalper v1.0 (EURUSD,M1) new time synchronization. web time: 1646215910 tick time: 1646223110 shift: -7200 RD 0 13:12:02.968 ARM Scalper v1.0 (EURUSD,M1) 2
Вот фрагмент кода
Вот результат
Такой же результат и с функцией round
Арифметического округления не происходит.
По порядку:
1. Переменная web_time типа datatime. Это целочисленный тип.
2. TimeCurrent() тоже возвращает datatime, т.е. целое.
3. Соответственно, тип результата операции web_time-TimeCurrent() - целый.
4. В результате деления целого на целое получается целое число, при этом округления не происходит (дробная часть просто отбрасывается).
5. Потом идёт умножение на 100 и преобразование datatime в int.
PS. Меня опередили, но оставлю комментарий для новичков.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
В MQL функция NormalizeDouble так же как и round возвращают число, просто отбрасывая конечные дробные символы.
Почему бы одну из них не сделать для арифметического округления числа. Или добавить флаг арифметическое округление/отсечение дробной части.