Транслирует ли биржа время в потоке Level 2 и потоке параметров в шлюзы? Я почему спрашиваю. Иногда Часто сервер QUIK брокера тупит: по нескольку минут не транслирует маркет-дата. Когда (и если) он вдруг оживает, нужно понимание, насколько актуальные данные он только что прислал в OnQuote и OnParam, можно ли им доверять или это данные 10-минутной давности, и они нафиг не нужны.
Было бы неплохо в потоке маркет-даты иметь их временную метку.
Пользователь
Сообщений: Регистрация: 05.08.2021
25.11.2021 10:40:28
Добрый день,
Касательно времени в потоке Level 2. Параметр времени не транслируется, однако можно использовать функцию getInfoParam("SERVERTIME ") для получения времени сервера. Подробно об этом написано в документе QLUA.chm в разделе "Сервисные функции" в соответствующем пункте "getInfoParam".
Получая данный параметр, Вы можете сравнивать его с текущим временем на локальной машине. Таким образом, Вы сможете проверить, насколько актуальную информацию Вам прислал сервер. Если время сервера разнится с локальным больше, чем на 2-3 секунды, значит сервер прислал неактуальную информацию.
Пользователь
Сообщений: Регистрация: 18.11.2021
25.11.2021 13:23:25
Цитата
Daniil Pozdnyakov написал: Касательно времени в потоке Level 2. Параметр времени не транслируется
Прежде всего приносим извинения за длительную задержку с ответом.
Касательно используемого потока из Plaza-2. Используется поток orders_aggr.
Касательно потоков используемых для ТТТ. ТТТ формируется не из одного потока, а из нескольких. В основном это FORTS_FUTINFO_REPL, FORTS_FUTCOMMON_REPL (для опционов соответственно FORTS_OPTINFO_REPL, FORTS_OPTCOMMON_REPL)
Обратите внимание на поля moment и moment_ns потока таблицы orders_aggr:
Код
Поле Тип Описание
moment t Время последнего обновления записи
moment_ns u8 Время последнего обновления записи (UNIX-время в наносекундах по стандарту UTC)
Цитата
Daniil Pozdnyakov написал: ТТТ формируется не из одного потока, а из нескольких. В основном это FORTS_FUTINFO_REPL, FORTS_FUTCOMMON_REPL (для опционов соответственно FORTS_OPTINFO_REPL, FORTS_OPTCOMMON_REPL)
Начиная с версии 6.5 потоки FORTS_FUTCOMMON_REPL и FORTS_OPTCOMMON_REPL объявляются устаревшими, вместо них следует использовать FORTS_COMMON_REPL.
Обратите внимание на поля mod_time и mod_time_ns таблицы common:
Код
Поле Тип Описание
mod_time t Дата и время изменения записи
mod_time_ns u8 Дата и время изменения записи (UNIX-время в наносекундах по стандарту UTC)
Пользователь
Сообщений: Регистрация: 05.08.2021
16.12.2021 10:48:18
Здравствуйте!
Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
Пользователь
Сообщений: Регистрация: 18.11.2021
18.12.2021 15:29:19
Daniil Pozdnyakov, Поскольку значения из ТТТ могут быть получены в разное время, то временная метка должна быть проставлена для каждого параметра, например дополнительным полем в таблице, возвращаемой getParamEx.
Пользователь
Сообщений: Регистрация: 18.11.2021
18.12.2021 15:30:23
Считаю это важной доработкой. Коллеги, кто так же считает плюсаните, чтобы повысить приоритет предложения.
Пользователь
Сообщений: Регистрация: 30.01.2015
18.12.2021 16:09:15
Цитата
r написал: Считаю это важной доработкой. Коллеги, кто так же считает плюсаните, чтобы повысить приоритет предложения.
почему бы не подписаться на историю параметра на тикоаом интервале и не иметь сразу всю историю его изменений за торговый день со временем в микросекундах?
Пасхалочка для Алексея Иванникова:
Пользователь
Сообщений: Регистрация: 18.11.2021
18.12.2021 17:05:59
Цитата
s_mike@rambler.ru написал: иметь сразу всю историю его изменений за торговый день со временем в микросекундах?
Там есть микросекунды? Или хотя бы миллисекунды?
Цитата
s_mike@rambler.ru написал: почему бы не подписаться на историю параметра на тикоаом интервале
Мне нужно только одно последнее значение параметра. И не хочу грузить все эти гигабайты ненужной информации в память.
У вас значения ms и mcs для параметров бывают отличны от нуля? Но вопрос в том, чье время там проставлено (явно не биржевое) и насколько ему можно доверять? Не может ли случиться так, что сервер пришлет старые данные, а время проставит текущее?
Пользователь
Сообщений: Регистрация: 30.01.2015
19.12.2021 11:38:08
не может
Пасхалочка для Алексея Иванникова:
Пользователь
Сообщений: Регистрация: 18.11.2021
19.12.2021 13:02:25
Цитата
написал: не может
Откуда такая уверенность? Оттуда же, откуда
Цитата
написал: миллисееундв найдете. Микросекунды тоже
? Ну что ж, тогда факты не совпадают с вашим представлением об "идеальном мире".
У вас значения ms и mcs для параметров бывают отличны от нуля? Но вопрос в том, чье время там проставлено (явно не биржевое) и насколько ему можно доверять? Не может ли случиться так, что сервер пришлет старые данные, а время проставит текущее?
синхронизируйте компьютер с сервером точного времени и получите время биржи с погрешностью не более 10 ms (при соответстующих настройках винды) потом можете сравнить с временем сервера и потока сделок. ------------------------- На основе собственного опыта могу сказать, что время сервера брокера с точным временем совпадает в пределах погрешности. А вот данные по свечам обычно отстают , иногда до 10 секунд.
Пользователь
Сообщений: Регистрация: 18.11.2021
21.12.2021 20:23:36
Цитата
написал: никаких гигабайтов там нет.
Открыл я значит, тиковый график по LAST для SiH2, заказал пропущенные данные, чтобы понимать сколько за день накопится. Занимаемая квиком память выросла на 361 Мб. Открыл тики по BID - прибавилось ещё 33 Мб. А когда несколько инструментов, сколько там параметров в гигабайт влезет?
Пользователь
Сообщений: Регистрация: 18.11.2021
21.12.2021 20:37:14
Цитата
Daniil Pozdnyakov написал: Касательно времени в потоке Level 2. Параметр времени не транслируется, однако можно использовать функцию getInfoParam("SERVERTIME ") для получения времени сервера. Подробно об этом написано в документе QLUA.chm в разделе "Сервисные функции" в соответствующем пункте "getInfoParam".
Получая данный параметр, Вы можете сравнивать его с текущим временем на локальной машине. Таким образом, Вы сможете проверить, насколько актуальную информацию Вам прислал сервер.
Daniil Pozdnyakov, поясните, какая связь между Level 2, ТТТ и временем сервера. Заодно и nikolz почитает для общего развития.
Также поясните, чьё время указано в свечах по параметрам из ТТТ, кто и в какой момент проставляет это время?
написал: Касательно времени в потоке Level 2. Параметр времени не транслируется, однако можно использовать функцию getInfoParam("SERVERTIME ") для получения времени сервера. Подробно об этом написано в документе QLUA.chm в разделе "Сервисные функции" в соответствующем пункте "getInfoParam".
Получая данный параметр, Вы можете сравнивать его с текущим временем на локальной машине. Таким образом, Вы сможете проверить, насколько актуальную информацию Вам прислал сервер.
, поясните, какая связь между Level 2, ТТТ и временем сервера. Заодно и nikolz почитает для общего развития.
Также поясните, чьё время указано в свечах по параметрам из ТТТ, кто и в какой момент проставляет это время?
Увы,Вы невнимательно читаете Про свечи я указал что данные приходят с опозданием до 10 секунд. т е свеча на графике появляется когда время сервера брокера, время сервера точного времени уже на 10 секунд отстоит от времени свечи, которое и есть время сервера точного времени. Рекомендую изучить алгоритм формирования свечи.
Пользователь
Сообщений: Регистрация: 05.08.2021
23.12.2021 13:00:49
Добрый день,
Касательно связи между Level 2, TTT и временем сервера. Время, которое Вы получаете, - это время изменения какого-либо параметра любого пакета данных, переданного сервером.
Касательно вопроса, чьё время указано в свечах по параметрам из ТТТ. На свечках ТТТ отображается время сервера (SERVERTIME)
Пользователь
Сообщений: Регистрация: 18.11.2021
23.12.2021 14:37:46
Цитата
Daniil Pozdnyakov написал: Касательно связи между Level 2, TTT и временем сервера. Время, которое Вы получаете, - это время изменения какого-либо параметра любого пакета данных, переданного сервером.
Такое чувство, что меня пытаются обмануть. Запускаю скрипт, который транслирует время сервера в окно сообщений:
Код
local run = true
function OnStop(flag)
run = false
end
function main()
local st
while run do
local t = getInfoParam("SERVERTIME")
if t ~= st then
st = t
message(st)
end
sleep(1000)
end
end
И в какой-то момент выдергиваю сетевой кабель из компа. И, о чудо! Компьютер продолжает "получать пакеты данных с сервера". И только спустя 23 сек понимает, что данных получать вроде как не должен.
И правда чудо. В игрушках сетевых так делают, время считается на клиенте и синхронизируется с серверным с помощью PLL, поэтому течет "плавно" и фактически синхронно с сервером независимо от пинга и джиттера пакетов. Но в игрушке и дальше идут, по рассчитанному времени отрисовывают всю сцену, включая прогнозные позиции юнитов, не дожидаясь получения от сервера актуальных позиций. Надеюсь, арка в эту сторону не собирается идти )
Пользователь
Сообщений: Регистрация: 05.08.2021
29.12.2021 11:50:25
Добрый день,
комментарий данной особенности был предоставлен в данной ветки форума:
Пользователь
Сообщений: Регистрация: 18.11.2021
12.01.2022 09:20:25
Цитата
Daniil Pozdnyakov написал: комментарий данной особенности был предоставлен в данной ветки форума:
Последний комментарий от сотрудника клиентской поддержки в указанной вами ветке:
Можно на адрес В теме письма укажите ссылку на данную ветку форума.
Или вы пишите про комментарий?
Цитата
Игорь написал: При физическом разрыве соединения время сервера будет продолжать отсчет. По факту это будет уже не время сервера, а время локального таймера.
В любом случае, использовать время сервера для целей, обозначенных в текущей теме, нельзя, и рекомендация "использовать функцию getInfoParam("SERVERTIME ")" некорректна.
Пользователь
Сообщений: Регистрация: 05.08.2021
13.01.2022 09:17:24
Добрый день,
Данная ветка форума для ознакомления была предоставлена для ответа на Ваш вопрос, почему SERVERTIME продолжает обновляться после выдергивания сетевого кабеля. Если конкретно, речь идёт о фрагменте данного : "...При физическом разрыве соединения время сервера будет продолжать отсчет. По факту это будет уже не время сервера, а время локального таймера...".
В качестве альтернативного решения получения временной метки сделок предлагаем анализировать таблицу обезличенных сделок при помощи Lua. В данной таблице транслируется время совершения сделки. Чтобы получить доступ к данной таблице можно использовать функцию getItem().
Касательно таблицы обезличенных сделок можно подробно почитать в документации info.chm в разделе "Раздел 3. Просмотр информации" в соответствующем подразделе "Таблица обезличенных сделок".
Касательно функции getItem() можно почитать в документации QLUA.chm в разделе "Функции для обращения к строкам произвольных таблиц QUIK" в соответствующем подразделе "getItem". Также рекомендуем обратить внимание на подраздел "Таблицы, используемые в функциях ..."
Пользователь
Сообщений: Регистрация: 18.11.2021
01.02.2022 14:26:52
Цитата
Daniil Pozdnyakov написал: Данная ветка форума для ознакомления была предоставлена для ответа на Ваш вопрос, почему SERVERTIME продолжает обновляться после выдергивания сетевого кабеля.
У меня такого вопроса и не возникало, я изначально знал, что SERVERTIME - это фикция. Просто показал вам и другим пользователям, что SERVERTIME не подходит для решения обозначенной задачи, от слова совсем.
Цитата
Daniil Pozdnyakov написал: В качестве альтернативного решения получения временной метки сделок предлагаем анализировать таблицу обезличенных сделок при помощи Lua.
Надеюсь, не стоит объяснять, что Level II, ТТТ и обезличенные сделки - это совершенно разные потоки, которые не синхронизированы между собой? К тому же, изменение котировок совсем не обязательно сопровождается новой сделкой (привет неликвид).
Поэтому давайте всё же остановимся на добавлении в соответствующие потоки параметров moment, moment_ns, mod_time, mod_time_ns и им аналогичных для других рынков. Странно, что это не было сделано изначально.
Обратите внимание на поля moment и moment_ns потока таблицы orders_aggr:
Код
Поле Тип Описание
moment t Время последнего обновления записи
moment_ns u8 Время последнего обновления записи (UNIX - время в наносекундах по стандарту UTC)
Цитата
написал: ТТТ формируется не из одного потока, а из нескольких. В основном это FORTS_FUTINFO_REPL, FORTS_FUTCOMMON_REPL (для опционов соответственно FORTS_OPTINFO_REPL, FORTS_OPTCOMMON_REPL)
Начиная с версии 6.5 потоки FORTS_FUTCOMMON_REPL и FORTS_OPTCOMMON_REPL объявляются устаревшими, вместо них следует использовать FORTS_COMMON_REPL.
Обратите внимание на поля mod_time и mod_time_ns таблицы common:
Код
Поле Тип Описание
mod_time t Дата и время изменения записи
mod_time_ns u8 Дата и время изменения записи (UNIX - время в наносекундах по стандарту UTC)
Присоединяюсь к пожеланию.
Надо делать так, как надо. А как не надо - делать не надо.
Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
Пользователь
Сообщений: Регистрация: 18.11.2021
22.04.2022 14:32:11
Вот ещё один пример никчёмности параметра SERVERTIME:
Что он там показывает, одному брокеру известно, и то не факт.