double(Time[i])
Ничего не теряется
Я понимаю, что можно как-то создать тип double, и присваивать в данный будет значение datetime, но это не совсем корректно, т.к. нет уверенности, что не будет потери данных.
Потери данных не будет. У double диапазон значений намного больше, чем у datetime. Вот при обратном преобразовании (doubel -> datetime) могут быть проблемы.
Да тоже никаких проблем не может возникать. Ведь тип double не обязательно должен содержать дробную часть больше нуля, а тип datetime "равнозначен" типу int. Потом, если в массив или переменную типа double засунули тип datetime, то обратно это значение ну никак не должно быть больше допустимого для типа datetime.
Вот и получается, что если написать
double _datetime = Time[0];
а потом перевести обратно, или даже в другой тип
double _double = (double)_datetime; int _int = (int)_datetime;
и не будет никаких предупреждений.
Теоретически потери точности нет. Я это понимаю, судя по количеству байт в типе. Но тем не менее, значение выводится после приведени, да и без приведения какое то "левое".
Вот например код:
//+-------------------------------------------------------------------------------------+ //| Проверка равенства типов datitime и double | //+-------------------------------------------------------------------------------------+ void DatetimeToDouble() { double d[10]; datetime dt[10]; for (int i = 0; i < 10; i++) { d[i] = (double) Time[i]; Print ("d[", i, "] = ", d[i]); } for (int i = 0; i < 10; i++) { dt[i] = Time[i]; Print ("dt[", i, "] = ", dt[i]); } }
В журнале вижу:
2016.02.20 21:17:37.645 2016.01.27 00:01 Tester: stop button pressed 2016.02.20 21:17:35.994 2016.01.27 00:00 Q EURUSD,M1: dt[9] = 2016.01.26 23:51:00 2016.02.20 21:17:35.994 2016.01.27 00:00 Q EURUSD,M1: dt[8] = 2016.01.26 23:52:00 2016.02.20 21:17:35.994 2016.01.27 00:00 Q EURUSD,M1: dt[7] = 2016.01.26 23:53:00 2016.02.20 21:17:35.994 2016.01.27 00:00 Q EURUSD,M1: dt[6] = 2016.01.26 23:54:00 2016.02.20 21:17:35.994 2016.01.27 00:00 Q EURUSD,M1: dt[5] = 2016.01.26 23:55:00 2016.02.20 21:17:35.994 2016.01.27 00:00 Q EURUSD,M1: dt[4] = 2016.01.26 23:56:00 2016.02.20 21:17:35.994 2016.01.27 00:00 Q EURUSD,M1: dt[3] = 2016.01.26 23:57:00 2016.02.20 21:17:35.994 2016.01.27 00:00 Q EURUSD,M1: dt[2] = 2016.01.26 23:58:00 2016.02.20 21:17:35.994 2016.01.27 00:00 Q EURUSD,M1: dt[1] = 2016.01.26 23:59:00 2016.02.20 21:17:35.994 2016.01.27 00:00 Q EURUSD,M1: dt[0] = 2016.01.27 00:00:00 2016.02.20 21:17:35.994 2016.01.27 00:00 Q EURUSD,M1: d[9] = 1453852260.0 2016.02.20 21:17:35.994 2016.01.27 00:00 Q EURUSD,M1: d[8] = 1453852320.0 2016.02.20 21:17:35.994 2016.01.27 00:00 Q EURUSD,M1: d[7] = 1453852380.0 2016.02.20 21:17:35.994 2016.01.27 00:00 Q EURUSD,M1: d[6] = 1453852440.0 2016.02.20 21:17:35.994 2016.01.27 00:00 Q EURUSD,M1: d[5] = 1453852500.0 2016.02.20 21:17:35.994 2016.01.27 00:00 Q EURUSD,M1: d[4] = 1453852560.0 2016.02.20 21:17:35.994 2016.01.27 00:00 Q EURUSD,M1: d[3] = 1453852620.0 2016.02.20 21:17:35.994 2016.01.27 00:00 Q EURUSD,M1: d[2] = 1453852680.0 2016.02.20 21:17:35.994 2016.01.27 00:00 Q EURUSD,M1: d[1] = 1453852740.0 2016.02.20 21:17:35.994 2016.01.27 00:00 Q EURUSD,M1: d[0] = 1453852800.0 2016.02.20 21:17:35.987 2016.01.27 00:00 Q test started
Очевидно, что значения на каждом баре типов datetime и double различны. Почему ?
Теоретически потери точности нет. Я это понимаю, судя по количеству байт в типе. Но тем не менее, значение выводится после приведени, да и без приведения какое то "левое".
Вот например код:
В журнале вижу:
Очевидно, что значения на каждом баре типов datetime и double различны. Почему ?
Столкнулся я недавно с невозможностью создать буфера типа datetime. Сразу забил, думал реализую задачу иначе, но всё-таки иначе выходит ещё более не вариантово.
Как это можно реализовать вообще? Я понимаю, что можно как-то создать тип double, и присваивать в данный будет значение datetime, но это не совсем корректно, т.к. нет уверенности, что не будет потери данных.
Например, вот сделал простой пример:
При компиляции вижу в журнале:
Получается, что не вариант так писал. Какие другие варианты имеются?
Да создайте Вы хоть какой-нибудь буфер и воспользуйтесь им. По секрету скажу, что datetime реализуется легко.
Да тоже никаких проблем не может возникать. Ведь тип double не обязательно должен содержать дробную часть больше нуля, а тип datetime "равнозначен" типу int. Потом, если в массив или переменную типа double засунули тип datetime, то обратно это значение ну никак не должно быть больше допустимого для типа datetime.
Вот и получается, что если написать
а потом перевести обратно, или даже в другой тип
и не будет никаких предупреждений.
Поправочка. Тип int имеет размер 4 байта. Тип datetime 8 байт.
Да я не задумываясь написал об этом потому, что не так давно компилятор вообще не реагировал на замену типа datetime на int.
А если из моего текста выкинуть всё что связано с типом int то будет вообще без проблем. Как datetime 8 байт так и double те-же 8 байт и ничего нигде не потеряется.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Столкнулся я недавно с невозможностью создать буфера типа datetime. Сразу забил, думал реализую задачу иначе, но всё-таки иначе выходит ещё более не вариантово.
Как это можно реализовать вообще? Я понимаю, что можно как-то создать тип double, и присваивать в данный будет значение datetime, но это не совсем корректно, т.к. нет уверенности, что не будет потери данных.
Например, вот сделал простой пример:
При компиляции вижу в журнале:
Получается, что не вариант так писал. Какие другие варианты имеются?