Разработчикам.Формат времени в терминале МТ5 - страница 5

 
avoitenko:


Чтобы его дать, нужно чтобы тип datetime стал 10 байтным, и структура MqlDateTime пожирнела.

эка вас понесло :)

long - достаточно. 8 байт.


а про структуры вообще никто не говорит. все должно остаться как сейчас.

 
avoitenko:

Прочел ветку и понял что миллисекунды нужны только для спортивного интереса. Чтобы с точностью до мс замерять забег цены на 100 м.

Чтобы его дать, нужно чтобы тип datetime стал 10 байтным, и структура MqlDateTime пожирнела.

Дождитесь MQL6, там будет вам и миллисекундный таймер и тиковая история и много других вкусностей. А сейчас не вижу смысла это добавлять. ИМХО.



читать и понимать разные вещи.

Но спасибо, что посчитал сколько байт будет занимать MqlDateTime, это серьезно ударит по моим 12 гигам, уже вижу как MT5 лезет в своп. 

 

Сереев озвчул то, что мне кажется изначально и так было понятно, но я забыл на каком форуме я нахожусь. Миллисекунды нужны не для синхронизации с сервером, а для понятия последовательности событий ! 

 

 

sergeev:

long - достаточно. 8 байт.

Вы дальше предлагайте...

Как преобразовывать ваш long во время и извлекать миллисекунды.

Для этого потребуются дополнительные структуры, типы данных и пара тройка новых функций для конвертации туда - обратно.

Зачем? если есть datetime с уже готовой обвязкой.

 
avoitenko:

Вы дальше предлагайте...

Как преобразовывать ваш long во время и извлекать миллисекунды.

Для этого потребуются дополнительные структуры, типы данных и пара тройка новых функций для конвертации туда - обратно.

Зачем? если есть datetime с уже готовой обвязкой.

Андрей, при всем уважении, но вы не задумались над вашим ответом.

Время в миллисекундах - это время в секундах умноженное на 1000 + число тех самых мс.

итого

я беру время в миллисекундах, делю на 1000. получаю наш старый любимый datetime со всеми возможностями. ПЛЮС остаток от деления - число миллисекунд.

Всё.

 

sergeev:

я беру время в миллисекундах, делю на 1000. получаю наш старый любимый datetime со всеми возможностями. ПЛЮС остаток от деления - число миллисекунд.

Т.е. чтобы узнать время я должен буду что-то на что-то поделить? А ошибка округления? Может можно как-то обойтись без деления?

 
avoitenko:

Т.е. чтобы узнать время я должен буду что-то на что-то поделить? А ошибка округления? Может можно как-то обойтись без деления?

так числа ведь целые :)

не хочешь делить - возьми просто три последних цифры - это и есть миллисекунды.

 
sergeev:

не хочешь делить - возьми просто три последних цифры - это и есть миллисекунды.

Как мне их взять без деления? Преобразовать в строку и правые три символа преобразовать обратно в целое? Меня это не вдохновляет.

А дополнительные операции получения остатка от деления, умножения и прочие операции, ради получения миллисекунд - это какая-то дикость. ИМХО. Они, если уж на то пошло, должны быть доступны в готовом виде.

Интересно не это, а то, почему изначально разработчики выбрали UNIX формат хранения времени, а не тот, за который сейчас идет речь т.е. с миллисекундами ?

Наверное, они, что-то знают.

 

Тип datetime:

Тип datetime предназначен для хранения даты и времени в виде количества секунд, прошедших с 01 января 1970 года. Занимает в памяти 8 байт.

Надо было всего лишь сделать так:

 Тип datetime предназначен для хранения даты и времени в виде количества миллисекунд, прошедших с 01 января 1970 года. Занимает в памяти 8 байт. 

И причем тут вообще деления и прочая дребедень?! Время может храниться в любых единицах (хоть в терциях). Преобразовывать же его можно хоть в Земные часы/секунды, хоть в Марсианские. От этого количество вычислительных ресурсов, затраченных на преобразование, больше или меньше не станет. Преобразование же нужно только для простого понимания Человеком, не машиной.

Возможно, решили сэкономить и сделать более сильное сжатие исторических баз данных. Уважаемые разработчики, ответьте для истории, почему выбрали именно секунды? Думаю, просто посчитали бОльшую точность лишней, т.к. даже сейчас не понимают, зачем нужны эти миллисекунды.

 
papaklass:

 Зайду с другого боку.

1. Bid = 1.30245 объем 50 лотов. Этот уровень просуществова 30 мс.

2. Bid = 1.30244 объем 75 лотов. Этот уровень просуществовал 25 мс.

3. Bid = 1.30243 объем 300 лотов. Существует в данный момент уже 2 сек.

Вам такая информация поможет в торговле. 

,,,возможно для пипсаторов да...,но только где такой брокер который с нулевой задержкой введёт в рынок ваши 50 лотов?¿?

 
avoitenko:

Как мне их взять без деления? Преобразовать в строку и правые три символа преобразовать обратно в целое? Меня это не вдохновляет.

а вы не задумывались как datetime в структуру преобразовывается?  не делением и остатком?

или думаете оно как то иначе получается ?  http://msdn.microsoft.com/ru-RU/library/windows/desktop/ms724284%28v=vs.85%29.aspx

Они, если уж на то пошло, должны быть доступны в готовом виде.

блииин :)  ну в каком таком готовом? вам дали 8 байт - что еще надо от разрабов?

Интересно не это, а то, почему изначально разработчики выбрали UNIX формат хранения времени, а не тот, за который сейчас идет речь т.е. с миллисекундами ?

похоже вы все время говорите про какой то формат времени. ну ок. какие вы знаете?

я лично знаю 3.

- 4 байтовое - число секунд с эпохи юникс 1970 до 2038 (INT)

- 8 байтовой - число 100 наносекунд с 1601 года до 30828  (FILETIME)

- 8 байтовое  - число милисекунд с эпохи юникс 1970 до надцать-дофига-года (INT64)

есть еще структура хранения 8 байтового времени SYSTEMTIME но она производная. и т д.


я ж и предлагаю дать то, что уже и так есть в МТ сервере - 8 байтовое с эпохи юникс.

чего скрывать то? :)

FILETIME structure (Windows)
  • msdn.microsoft.com
Contains a 64-bit value representing the number of 100-nanosecond intervals since January 1, 1601 (UTC). Syntax Members dwLowDateTime The low-order part of the file time. dwHighDateTime The high-order part of the file time. Remarks To convert a FILETIME structure into a time that is easy to display to a user, use the FileTimeToSystemTime...
Причина обращения: