Транслирует ли биржа время в потоке Level 2 и потоке параметров в шлюзы? Я почему спрашиваю. Иногда Часто сервер QUIK брокера тупит: по нескольку минут не транслирует маркет-дата. Когда (и если) он вдруг оживает, нужно понимание, насколько актуальные данные он только что прислал в OnQuote и OnParam, можно ли им доверять или это данные 10-минутной давности, и они нафиг не нужны.
Было бы неплохо в потоке маркет-даты иметь их временную метку.
Касательно времени в потоке Level 2. Параметр времени не транслируется, однако можно использовать функцию getInfoParam("SERVERTIME ") для получения времени сервера. Подробно об этом написано в документе QLUA.chm в разделе "Сервисные функции" в соответствующем пункте "getInfoParam".
Получая данный параметр, Вы можете сравнивать его с текущим временем на локальной машине. Таким образом, Вы сможете проверить, насколько актуальную информацию Вам прислал сервер. Если время сервера разнится с локальным больше, чем на 2-3 секунды, значит сервер прислал неактуальную информацию.
Прежде всего приносим извинения за длительную задержку с ответом.
Касательно используемого потока из 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)
Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
Daniil Pozdnyakov, Поскольку значения из ТТТ могут быть получены в разное время, то временная метка должна быть проставлена для каждого параметра, например дополнительным полем в таблице, возвращаемой getParamEx.
r написал: Считаю это важной доработкой. Коллеги, кто так же считает плюсаните, чтобы повысить приоритет предложения.
почему бы не подписаться на историю параметра на тикоаом интервале и не иметь сразу всю историю его изменений за торговый день со временем в микросекундах?
У вас значения ms и mcs для параметров бывают отличны от нуля? Но вопрос в том, чье время там проставлено (явно не биржевое) и насколько ему можно доверять? Не может ли случиться так, что сервер пришлет старые данные, а время проставит текущее?
У вас значения ms и mcs для параметров бывают отличны от нуля? Но вопрос в том, чье время там проставлено (явно не биржевое) и насколько ему можно доверять? Не может ли случиться так, что сервер пришлет старые данные, а время проставит текущее?
синхронизируйте компьютер с сервером точного времени и получите время биржи с погрешностью не более 10 ms (при соответстующих настройках винды) потом можете сравнить с временем сервера и потока сделок. ------------------------- На основе собственного опыта могу сказать, что время сервера брокера с точным временем совпадает в пределах погрешности. А вот данные по свечам обычно отстают , иногда до 10 секунд.
Открыл я значит, тиковый график по LAST для SiH2, заказал пропущенные данные, чтобы понимать сколько за день накопится. Занимаемая квиком память выросла на 361 Мб. Открыл тики по BID - прибавилось ещё 33 Мб. А когда несколько инструментов, сколько там параметров в гигабайт влезет?
Daniil Pozdnyakov написал: Касательно времени в потоке Level 2. Параметр времени не транслируется, однако можно использовать функцию getInfoParam("SERVERTIME ") для получения времени сервера. Подробно об этом написано в документе QLUA.chm в разделе "Сервисные функции" в соответствующем пункте "getInfoParam".
Получая данный параметр, Вы можете сравнивать его с текущим временем на локальной машине. Таким образом, Вы сможете проверить, насколько актуальную информацию Вам прислал сервер.
Daniil Pozdnyakov, поясните, какая связь между Level 2, ТТТ и временем сервера. Заодно и nikolz почитает для общего развития.
Также поясните, чьё время указано в свечах по параметрам из ТТТ, кто и в какой момент проставляет это время?
Daniil Pozdnyakov написал: Касательно времени в потоке Level 2. Параметр времени не транслируется, однако можно использовать функцию getInfoParam("SERVERTIME ") для получения времени сервера. Подробно об этом написано в документе QLUA.chm в разделе "Сервисные функции" в соответствующем пункте "getInfoParam".
Получая данный параметр, Вы можете сравнивать его с текущим временем на локальной машине. Таким образом, Вы сможете проверить, насколько актуальную информацию Вам прислал сервер.
Daniil Pozdnyakov, поясните, какая связь между Level 2, ТТТ и временем сервера. Заодно и nikolz почитает для общего развития.
Также поясните, чьё время указано в свечах по параметрам из ТТТ, кто и в какой момент проставляет это время?
Увы,Вы невнимательно читаете Про свечи я указал что данные приходят с опозданием до 10 секунд. т е свеча на графике появляется когда время сервера брокера, время сервера точного времени уже на 10 секунд отстоит от времени свечи, которое и есть время сервера точного времени. Рекомендую изучить алгоритм формирования свечи.
Касательно связи между Level 2, TTT и временем сервера. Время, которое Вы получаете, - это время изменения какого-либо параметра любого пакета данных, переданного сервером.
Касательно вопроса, чьё время указано в свечах по параметрам из ТТТ. На свечках ТТТ отображается время сервера (SERVERTIME)
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, поэтому течет "плавно" и фактически синхронно с сервером независимо от пинга и джиттера пакетов. Но в игрушке и дальше идут, по рассчитанному времени отрисовывают всю сцену, включая прогнозные позиции юнитов, не дожидаясь получения от сервера актуальных позиций. Надеюсь, арка в эту сторону не собирается идти )
Игорь написал: При физическом разрыве соединения время сервера будет продолжать отсчет. По факту это будет уже не время сервера, а время локального таймера.
В любом случае, использовать время сервера для целей, обозначенных в текущей теме, нельзя, и рекомендация "использовать функцию getInfoParam("SERVERTIME ")" некорректна.
Данная ветка форума для ознакомления была предоставлена для ответа на Ваш вопрос, почему SERVERTIME продолжает обновляться после выдергивания сетевого кабеля. Если конкретно, речь идёт о фрагменте данного сообщения: "...При физическом разрыве соединения время сервера будет продолжать отсчет. По факту это будет уже не время сервера, а время локального таймера...".
В качестве альтернативного решения получения временной метки сделок предлагаем анализировать таблицу обезличенных сделок при помощи Lua. В данной таблице транслируется время совершения сделки. Чтобы получить доступ к данной таблице можно использовать функцию getItem().
Касательно таблицы обезличенных сделок можно подробно почитать в документации info.chm в разделе "Раздел 3. Просмотр информации" в соответствующем подразделе "Таблица обезличенных сделок".
Касательно функции getItem() можно почитать в документации QLUA.chm в разделе "Функции для обращения к строкам произвольных таблиц QUIK" в соответствующем подразделе "getItem". Также рекомендуем обратить внимание на подраздел "Таблицы, используемые в функциях ..."
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)
Цитата
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)
Присоединяюсь к пожеланию.
Надо делать так, как надо. А как не надо - делать не надо.
Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.