Если на ваши сервера приходят данные с Unix-временем , то предлагаю сделать доступным такой формат тоже во избежание излишних трансляций на каждом трейде для автоматизированных систем, коль скоро QLua тут для этого.
Там где возможно. Спасибо.
Пользователь
Сообщений: Регистрация: 27.08.2018
21.11.2019 05:57:30
те : нужен long чтобы собрать число формата yyddmmhhmmsszzz но лучше сразу unix-время на каждом трейде с минимумом преобразований
QUIK clients support
Сообщений: Регистрация: 27.01.2015
21.11.2019 14:00:58
Добрый день. Правильно понимаем, что вы хотите, чтобы мы добавили новое поле unix_datetime, (например, на сделках или заявках) т.к. Вам не удобен формат Lua таблицы?
Пользователь
Сообщений: Регистрация: 27.08.2018
21.11.2019 14:20:11
Цитата
Egor Zaytsev написал: Правильно понимаем, что вы хотите, чтобы мы добавили новое поле unix_datetime, (например, на сделках или заявках)
да, а вы пропатчили 5.1 для long?
Цитата
Egor Zaytsev написал: т.к. Вам не удобен формат Lua таблицы?
дело не в удобстве - пара строк не проблема, а в лишних временных затратах на преобразование или сборку своих полей из таблицы для массовых скоплений можете сами проверить затраты на сотне тысяч записей: передернуть времена в long отжирает как быстрая сортировка
Если, как я понял, речь о целых числах в луа, так они как intptr_t определяются и на 64 битах должны быть 64-битные из коробки, а вот если заменить в заголовке на long, то получим внезапно 32 бита, ибо на винде long 32-битный. Или о другом чем-то?
Если, как я понял, речь о целых числах в луа, так они как intptr_t определяются и на 64 битах должны быть 64-битные из коробки, а вот если заменить в заголовке на long, то получим внезапно 32 бита, ибо на винде long 32-битный. Или о другом чем-то?
лично у меня нет таких вопросов - есть и более прямой способ
здесь предложение реализовать то, как это должно быть зачем плоскую инфу загонять в табличный вид который все равно потом нужно обратно в плоский вид ну пусть с сервера дают пока что в double чтобы обходиться без преобразования типов и структур потом в 5.3 это будет более просто в long
собсно моё дело - предложить
Пользователь
Сообщений: Регистрация: 21.08.2015
21.11.2019 19:42:30
Цитата
новичок написал: зачем плоскую инфу загонять в табличный вид
С этим-то согласен. Правда, есть сомнения, что едет оно в плоском виде, как бы не в текстовом. До сервера-то по фиксу точно в текстовом, дальше надо у арки (конфиденциальную инфу) выспрашивать, где оно у них в число превращается и превращается ли вообще.
Пользователь
Сообщений: Регистрация: 27.08.2018
21.11.2019 20:19:21
Цитата
Anton написал: где оно у них в число превращается и превращается ли вообще
не просто превращается, а в dat файлах оно у них уже в FILETIME формате те считай всё уже тут, а потом бац и ... /* ... во вторую смену ... (с) */ ... в табличку
ткчт и делать то особенно ничего не нужно - нужно просто кое-чего НЕ делать
уточним для любопытствующих, что речь конечно не про символы, а про по-байтовую передачу :)
Пользователь
Сообщений: Регистрация: 21.08.2015
22.11.2019 05:46:18
Цитата
новичок написал: не просто превращается, а в dat файлах оно у них уже в FILETIME формате
Можно тогда предположить, что едет в этом же формате. Это, так сказать, хорошая новость. А плохая - в дабл файлтайм как есть не полезет, там мантисса всего 52 бита, если ее всю заполнить единицами, будет 1615-04-10 11:59:22.737, что как бы малость не хватает. То есть конвертить все равно придется, либо в офисный формат, который в дабле (но парсить будет удовольствие то еще, плюс цель избежать сложной конвертации не достигается), либо урезать до микросекунд (делить файлтайм на 100), тогда максимум будет 3028-02-19 22:57:53.704, либо, как изначально предлагалось, в unix time, что по сути то же самое обрезание, только уже до секунд, вопросы и пожелания "отдайте микросекунды" гарантированы.
В фиксе как раз они самые, поле UTCTimestamp выглядит типа
Код
60=YYYYMMDD-HH:MM:SS.sssssssssSOH
Пользователь
Сообщений: Регистрация: 21.08.2015
22.11.2019 06:27:54
FIX: неправду выше написал. До микросекунд это делить файлтайм на 10, и максимум получится 1743-09-18 23:53:47.370, т.е. опять не хватает. Если предположить, что "время в десятках микросекунд" не удовлетворяет из-за "странности" единиц, придется резать до миллисекунд, т.е. делить на 10000.
Пользователь
Сообщений: Регистрация: 02.07.2015
22.11.2019 07:55:19
Цитата
новичок написал: не просто превращается, а в dat файлах оно у них уже в FILETIME формате
ну тогда всеравно в time_t конвертить нужно. а) откуда уверенность что FILETIME б) тогда уж лутше в луа отдавать FILETIME (ежели прям без конверсий)
не?
Пользователь
Сообщений: Регистрация: 21.08.2015
22.11.2019 08:08:15
Цитата
Imersio Arrigo написал: тогда уж лутше в луа отдавать FILETIME (ежели прям без конверсий)
Выше написал, почему не получится. У луа 5.1 нет целого типа как такового, есть LUA_NUMBER, который double. А в double файлтайм не полезет.
Поразмышлял на эту тему и решил, что лучшим форматом был бы unixtime с микросекундами. Он лезет в double без потери точности и вычисляется из файлтайма достаточно легко:
Код
static int hibit(unsigned long long ull) throw () // нужно только для ассерта в отладочном режиме
{
int result = 0;
while((ull >>= 1) != 0)
++result;
return result;
}
double filetime_to_unix_time_with_microseconds(const ::FILETIME * pft) throw ()
{
assert(pft);
const unsigned long long uoffset = 116444736000000000ULL;
const unsigned long long ftime =
(static_cast<unsigned long long>(pft->dwHighDateTime) << 32) | pft->dwLowDateTime;
const unsigned long long utime = (ftime - uoffset) / 10;
assert(::hibit(utime) < 52);
return static_cast<double>(utime);
}
Пользователь
Сообщений: Регистрация: 02.07.2015
22.11.2019 08:15:29
Цитата
Anton написал: что лучшим форматом был бы unixtime с микросекундами.
Какой смысл, если все равно нужно конвертить? Ничем не лучше существующей схемы. А больше форматов - больше конвертаций. Если только для удобства получателя.
И еще, мне кажется, что полный "unixtime с микросекундами" в дабл не влезет. Можно раздельно сунуть unixtime, и отдельно микросекунды.
Пользователь
Сообщений: Регистрация: 21.08.2015
22.11.2019 08:30:07
Цитата
Imersio Arrigo написал: мне кажется, что полный "unixtime с микросекундами" в дабл не влезет.
Лезет в ближайшие 200 лет, а там, глядишь, и квик переписывать пора.
Цитата
Imersio Arrigo написал: Ничем не лучше существующей схемы.
Это конверт на сишной стороне, можно считать бесплатный. Распихивание по таблице луа и потом вытаскивание из нее на порядки тяжелее.
Пользователь
Сообщений: Регистрация: 02.07.2015
22.11.2019 08:34:37
Цитата
Anton написал: Лезет в ближайшие 200 лет, а там, глядишь, и квик переписывать пора.
Проверил. В дабл входит вплоть до 2241 года. Потом начинаются проблемы с точностью :)
Пользователь
Сообщений: Регистрация: 21.08.2015
22.11.2019 09:38:54
Цитата
Imersio Arrigo написал: Проверил. В дабл входит вплоть до 2241 года. Потом начинаются проблемы с точностью :)
Ага, сам точную границу не искал, посмотрел только, что лет 200 влезает. Кстати, в моем коде надо в ассерте < заменить на <=, а то он уже на 52 битах сигналит, рановато.
С другой стороны, подумал о варианте с микросекундами отдельно. Тоже свои плюсы есть, часть с секундной точностью совпадает с форматом времени луа, что может быть удобно для кого-то, ну и в случае чего умножить на миллион и прибавить микросекунды не так и затратно. На один пуш в таблицу больше на стороне квика, на один поп больше на стороне скрипта. Не сказать, чтобы смертельная цена. Нужны еще мнения в общем, кому как кажется удобнее.
Пользователь
Сообщений: Регистрация: 27.08.2018
22.11.2019 11:49:55
Цитата
Imersio Arrigo написал: а) откуда уверенность что FILETIME
нету а..аще никакой :) , но ...
когда берем по адресу из .dat файла 8 байт как лонг и потом это делим на 10 млн и вычитаем 11644473600L, то хлоп .. и получается пхальное юникс_тайм в секундах
вот и подумалось могу быть неправ, ессно
Цитата
Imersio Arrigo написал: б) тогда уж лутше в луа отдавать FILETIME (ежели прям без конверсий)
ну с версии 5.3, когда будет лонг , то - да
Цитата
Imersio Arrigo написал: ну тогда всеравно в time_t конвертить нужно.
ну лонг в лонг не так уж и затратно :)
Пользователь
Сообщений: Регистрация: 27.08.2018
22.11.2019 12:02:01
Цитата
Anton написал: В фиксе как раз они самые, поле UTCTimestamp выглядит типа
бито-байты в железе и картинки на мониторе из табличек различаем? вам сиплюсплюс лоб напек наверное :)
а ..а, ну точно
Цитата
static int hibit(unsigned long long ull) throw () // нужно только для ассерта в отладочном режиме { int result = 0; while((ull >>= 1) != 0) ++result; return result; } double filetime_to_unix_time_with_microseconds(const ::FILETIME * pft) throw () { assert(pft); const unsigned long long uoffset = 116444736000000000ULL; const unsigned long long ftime = (static_cast<unsigned long long>(pft->dwHighDateTime) << 32) | pft->dwLowDateTime; const unsigned long long utime = (ftime - uoffset) / 10; assert(::hibit(utime) < 52); return static_cast<double>(utime); }
Именно что в дампе так выглядит. На правую колоночку тоже иногда стоит поглядывать, любопытные вещи там видны.
Пользователь
Сообщений: Регистрация: 30.01.2015
23.11.2019 13:24:16
Цитата
Egor Zaytsev написал: Добрый день. Правильно понимаем, что вы хотите, чтобы мы добавили новое поле unix_datetime, (например, на сделках или заявках) т.к. Вам не удобен формат Lua таблицы?
Если все же решите добавить это поле, не забудьте добавить и дробную часть (микросекунды)
Пасхалочка для Алексея Иванникова:
Пользователь
Сообщений: Регистрация: 27.08.2018
23.11.2019 14:48:38
Цитата
написал:
Цитата
написал: Добрый день. Правильно понимаем, что вы хотите, чтобы мы добавили новое поле unix_datetime, (например, на сделках или заявках) т.к. Вам не удобен формат Lua таблицы?
Если все же решите добавить это поле, не забудьте добавить и дробную часть (микросекунды)
Михаил,
нам нужно лонг, а микросекунды уже есть и это
файлтайм/10-11644473600 000 000
Пользователь
Сообщений: Регистрация: 27.08.2018
23.11.2019 16:41:36
Цитата
Imersio Arrigo написал: а) откуда уверенность что FILETIME
написал: Добрый день. Сообщите, какое будем в итоге регистрировать пожелание?
Доступ к параметру _ дата_время _ в виде числа, а не таблицы/структуры.
Здравствуйте!
Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.