Просто непонятно в таком случае, как система вообще узнает об изменении параметра, если она отслеживает значения параметров лишь срезами через определенные промежутки времени.
Пользователь
Сообщений: Регистрация: 01.02.2015
02.04.2015 13:40:13
квик не предназначен для того, чтоб судить об изменении параметра какой-либо таблицы исходя из изменения только ОДНОЙ таблицы. Если нужен действительно безсбойный вариант - надо принимать во внимание и другие смежные таблицы. Кроме того, сама биржа частенько чудит, выдавая пользователям полный бред, а потом, мило извиняется (НО!!!! сделки не анулирует) и деньги не возвращает., а говорит, что это просто сбой, увы-с. Брокеры в тоже время, говорят тоже самое: - это биржа, детка и что, мы должны учитывать риски.
Дмитрий пишет: Но это произошло в промежутке между получением двух срезов ТТП, поэтому в итоге изменение значения этого параметры мы в терминале не увидим.
Вот именно что ВИЗУАЛЬНЫХ изменений мы не увидим, но изменения БЫЛИ поэтому будет две строки
Если изменения были, почему мы не увидим их в таблице историй ?? Ведь изменения произогли во время среза. Если же изменение произошли в промежутками между срезами, то система, как я понимаю, не должна знать о изменении/
Пользователь
Сообщений: Регистрация: 01.02.2015
02.04.2015 13:43:43
Цитата
Дмитрий пишет: ...как система вообще узнает об изменении параметра...
а нет никакой системы, - есть лишь обычная программа-сервер, которая мониторит изменение биржевого потока и выдаёт его клиентам. именно поэтому, не все колбеки срабатывают и учитывают полное изменение данных. и именно поэтому возможно проскальзывание.
Пользователь
Сообщений: Регистрация: 01.02.2015
02.04.2015 13:46:55
если же давать пользователям более качественный вывод в таблицы - то, это неизбежно будет намного медленее и стало быть менее релевантно текущей ситации.
Пользователь
Сообщений: Регистрация: 31.01.2015
02.04.2015 13:50:27
Цитата
sam063rus пишет: есть лишь обычная программа-сервер, которая мониторит изменение биржевого потока и выдаёт его клиентам
Это надо понимать так, что когда речь идет о получении значений ТТП срезами, то это касается лишь передачи данных от сервера QUIK в терминал, в то время как сам сервер QUIK получает с биржи и отслеживает абсолютно все изменения этих параметров непрерывно, а не срезами?
Пользователь
Сообщений: Регистрация: 23.01.2015
02.04.2015 13:52:10
Цитата
Optimus1 Optimus1 пишет: Если изменения были, почему мы не увидим их в таблице историй ?? Ведь изменения произогли во время среза. Если же изменение произошли в промежутками между срезами, то система, как я понимаю, не должна знать о изменении/
Если по простом, например, до среза было 100 заявок, произошел срез он показал в таблице 100 заявок. Потом произошло увеличение стало 101 и тут же уменьшение, опять 100. Для программы это означает что данные изменились значит их нужно показать, вот он и показывает цифру 100.
Пользователь
Сообщений: Регистрация: 01.02.2015
02.04.2015 13:55:30
Цитата
Дмитрий пишет: абсолютно все изменения этих параметров непрерывно
не может этого делать по определению.
Пользователь
Сообщений: Регистрация: 31.01.2015
02.04.2015 13:56:18
Цитата
Sergey Gorokhov пишет: Если по простом, например, до среза было 100 заявок, произошел срез он показал в таблице 100 заявок. Потом произошло увеличение стало 101 и тут же уменьшение, опять 100. Для программы это означает что данные изменились значит их нужно показать, вот он и показывает цифру 100.
Это понятно. Непонятно, как программа узнает об этих изменениях, если она получает данные только срезами, а эти изменения произошли в промежутке между срезами и в конечном счете на момент получения второго среза ничего не изменилось.
sam063rus пишет: есть лишь обычная программа-сервер, которая мониторит изменение биржевого потока и выдаёт его клиентам
Это надо понимать так, что когда речь идет о получении значений ТТП срезами, то это касается лишь передачи данных от сервера QUIK в терминал, в то время как сам сервер QUIK получает с биржи и отслеживает абсолютно все изменения этих параметров непрерывно , а не срезами?
Никто ничего не "мониторит" То есть, не существует какого-либо алгоритма определения "изменились данные" или это "предыдущее значение". Раз в период, с биржи приезжает кучка параметров. Эта кучка отправляется от сервера клиенту. Клиент в свою очередь, обновляет только те данные которые приехали, а те которые не приехали оставляет в предыдущем значении
Пользователь
Сообщений: Регистрация: 01.02.2015
02.04.2015 14:00:10
она получает пропущенные между срезами данные. в результате, идёт рассинхронизация между тем. что реально есть и тем, что должно быть. что не трудно заметить по очерёдности срабатывания колбеков.
Пользователь
Сообщений: Регистрация: 23.01.2015
02.04.2015 14:00:29
Цитата
Дмитрий пишет: Непонятно, как программа узнает об этих изменениях, если она получает данные только срезами, а эти изменения произошли в промежутке между срезами и в конечном счете на момент получения второго среза ничего не изменилось.
Раз в период, с биржи приезжает кучка параметров. Эта кучка отправляется от сервера клиенту. Клиент в свою очередь, обновляет только те данные которые приехали, а те которые не приехали оставляет в предыдущем значении. раз в промежуток между срезами были изменения, то биржа отправит эту самую кучку. А то что цифры в этом изменении фактически остались те же никто не проверяет
Пользователь
Сообщений: Регистрация: 31.01.2015
02.04.2015 14:06:41
Цитата
sam063rus пишет: она получает пропущенные между срезами данные
Цитата
Sergey Gorokhov пишет: Раз в период, с биржи приезжает кучка параметров. Эта кучка отправляется от сервера клиенту.
Значит, в этой кучке содержатся не только текущие значения параметров, но и все их изменения, произошедшие за время с момента прихода предыдущей кучки?
Пользователь
Сообщений: Регистрация: 23.01.2015
02.04.2015 14:09:00
Цитата
Sergey Gorokhov пишет: А то что цифры в этом изменении фактически остались те же никто не проверяет
Кстати, если интересно, отследить параметр который изменился, все таки можно. Если построить по каждому из параметров, отдельную таблицу истории. Для каждого параметра своя таблица. Потом посмотреть по времени, какой из параметров прислал два одинаковых значения подряд тот и виноват
Пользователь
Сообщений: Регистрация: 01.02.2015
02.04.2015 14:12:40
Цитата
Sergey Gorokhov пишет: Если построить по каждому из параметров, отдельную таблицу истории.
слишком большие накладные расходы, снижение быстродействия.
Пользователь
Сообщений: Регистрация: 31.01.2015
02.04.2015 14:13:02
Цитата
Sergey Gorokhov пишет: раз в промежуток между срезами были изменения, то биржа отправит эту самую кучку
Или все же биржа отправляет в этом случае только текущие (последние) значения параметров?
Пользователь
Сообщений: Регистрация: 23.01.2015
02.04.2015 14:15:21
Цитата
sam063rus пишет: слишком большие накладные расходы, снижение быстродействия.
Но это же нужно только для ответа на вопрос автора. Никто не заставляет держать кучу таблиц одновременно. к тому же на производительность это не должно влиять только на удобство просмотра.
Цитата
Дмитрий пишет: Или все же биржа отправляет в этом случае только текущие (последние) значения параметров?
Только текущие значения.
Пользователь
Сообщений: Регистрация: 31.01.2015
02.04.2015 14:23:19
Из всего вышесказанного я понял, что от биржи приходят только значения параметров, по которым были зафиксированы изменения в промежутке между двумя интервалами времени (срезами). Можно ли в таком случае добавить в функцию OnParam(STRING class_code, STRING sec_code) еще один параметр, сообщающий, изменение значений каких именно параметров ТТП привело к вызову этой функции? Ведь в противном случае нам приходится лишний раз вызывать функцию getParamEx для получения значений каждого интересующего нас параметра и последующего анализа их значений. В итоге может оказаться, что интересующие нас параметры не изменились, но мы проделали в скрипте кучу ненужной работы и тем самым создали лишнюю нагрузку на систему.
Пользователь
Сообщений: Регистрация: 23.01.2015
02.04.2015 14:30:19
Цитата
Дмитрий пишет: добавить в функцию OnParam(STRING class_code, STRING sec_code) еще один параметр, сообщающий, изменение значений каких именно параметров ТТП привело к вызову этой функции
Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
Дмитрий пишет: добавить в функцию OnParam(STRING class_code, STRING sec_code) еще один параметр, сообщающий, изменение значений каких именно параметров ТТП привело к вызову этой функции
Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
А пока данное пожелание не реализовано, разумно ли вместо OnParam использовать функции CreateDataSource и SetUpdateCallback на каждый из отслеживаемых параметров? Не окажет ли это негативного влияния на производительность?
Надо делать так, как надо. А как не надо - делать не надо.
Пользователь
Сообщений: Регистрация: 31.01.2015
02.04.2015 15:16:36
Цитата
Серж пишет: Не окажет ли это негативного влияния на производительность?
Сдается мне, что такой метод работы будет отжирать оперативную память на хранение отдельной истории за текущий день по каждому отслеживаемому параметру.
Пользователь
Сообщений: Регистрация: 30.01.2015
02.04.2015 15:20:19
Неправильное предположение. Память дополнительнл расходоваться не будет
Пасхалочка для Алексея Иванникова:
Пользователь
Сообщений: Регистрация: 31.01.2015
02.04.2015 15:53:53
Только что проверил - расходуется. Как минимум порядка 50 байт на одно изменение параметра. Иногда это может быть незаметно, но если отслеживать много параметров по нескольким фьючерсам, причем таких параметров, значения которых меняются очень часто (до 10 раз в секунду) - то расход памяти может достигать порядка 10 мегабайт на каждый параметр, и эту величину надо будет еще умножить на количество анализируемых фьючерсов.
Пользователь
Сообщений: Регистрация: 31.01.2015
02.04.2015 15:55:13
Тут правда надо отметить, что я использовал тиковый интервал при вызове функции CreateDataSource.
Пользователь
Сообщений: Регистрация: 31.01.2015
02.04.2015 15:58:05
Поскольку нас интересует только изменение текущих значений параметров, то можно наверное вместо тикового задать часовой интервал. Тогда память действительно почти не будет расходоваться.
Пользователь
Сообщений: Регистрация: 23.01.2015
03.04.2015 07:22:21
Цитата
Серж пишет: А пока данное пожелание не реализовано, разумно ли вместо OnParam использовать функции CreateDataSource и SetUpdateCallback на каждый из отслеживаемых параметров? Не окажет ли это негативного влияния на производительность?
Здравствуйте, На производительность не должно оказать влияния, но с оговоркой что речь идет о разумном количестве заказываемых параметров.
Пользователь
Сообщений: Регистрация: 31.01.2015
03.04.2015 12:52:43
Sergey Gorokhov, а какой временной интервал лучше при этом заказывать?
Пользователь
Сообщений: Регистрация: 23.01.2015
03.04.2015 12:55:37
Цитата
Constantin Constantin пишет: Sergey Gorokhov , а какой временной интервал лучше при этом заказывать?
Такой который даст Вам исчерпывающую информацию для анализа.
Constantin Constantin пишет: Sergey Gorokhov , а какой временной интервал лучше при этом заказывать?
Такой который даст Вам исчерпывающую информацию для анализа.
Речь в данном случае идёт о получении изменения параметров или таблице истории изменений. Разве для этого имеет значение интервал (не считая тикового)?
Надо делать так, как надо. А как не надо - делать не надо.
Пользователь
Сообщений: Регистрация: 23.01.2015
03.04.2015 13:12:47
Цитата
Серж пишет: ечь в данном случае идёт о получении изменения параметров или таблице истории изменений. Разве для этого имеет значение интервал (не считая тикового)?
речь идет про SetUpdateCallback. Для него интервал не имеет значения (не считая тикового). Поэтому и ответ "на свое усмотрение"
Пользователь
Сообщений: Регистрация: 31.01.2015
03.04.2015 13:15:48
Цитата
Sergey Gorokhov пишет: речь идет про SetUpdateCallback. Для него интервал не имеет значения (не считая тикового).
А в чем разница работы SetUpdateCallback при выборе тикового интервала и при выборе любого другого?
Sergey Gorokhov пишет: речь идет про SetUpdateCallback. Для него интервал не имеет значения ( не считая тикового ).
А в чем разница работы SetUpdateCallback при выборе тикового интервала и при выборе любого другого?
Тиковые данные, это по сути Таблица Всех Сделок только в виде графика, а интервальные данные это уже сжатая информация с сервера. От сюда возникает гигантская разница в количестве. Интервальных данных может быть максимум 60*24+3000=4440, а тиковых неограниченное количество. Из за этого при работе с тиковыми данными могут быть тормоза
Пользователь
Сообщений: Регистрация: 01.02.2015
03.04.2015 18:59:29
Цитата
Sergey Gorokhov пишет: Интервальных данных может быть максимум 60*24+3000=4440
а теперь по-подробней, что такое 60 и 24
Пользователь
Сообщений: Регистрация: 31.01.2015
03.04.2015 19:02:47
Цитата
sam063rus пишет: а теперь по-подробней, что такое 60 и 24
Видимо, число минут в часе и торговых часов в сутках (если бы торги шли круглосуточно).
Пользователь
Сообщений: Регистрация: 23.03.2015
06.04.2015 19:15:24
Здравствуйте,
Я что то запутался, неделю назад выгружал таблицу истории, там соотвесвенно был стобец время последней сделки - и в этом столбце показывалось время последней сделки, как они шли с самого начла торгов, а чейчас выгружаю, а там реально показано во всех строках с самого начала торгов время последней сделки - 18:49:42. Может я что то не так делаю ?
QUIK clients support
Сообщений: Регистрация: 27.01.2015
23.04.2015 08:18:19
Цитата
Дмитрий пишет: Из всего вышесказанного я понял, что от биржи приходят только значения параметров, по которым были зафиксированы изменения в промежутке между двумя интервалами времени (срезами). Можно ли в таком случае добавить в функцию OnParam(STRING class_code, STRING sec_code) еще один параметр, сообщающий, изменение значений каких именно параметров ТТП привело к вызову этой функции? Ведь в противном случае нам приходится лишний раз вызывать функцию getParamEx для получения значений каждого интересующего нас параметра и последующего анализа их значений. В итоге может оказаться, что интересующие нас параметры не изменились, но мы проделали в скрипте кучу ненужной работы и тем самым создали лишнюю нагрузку на систему.
Добрый день,
Мы рассмотрели Ваше пожелание. По итогам его анализа сообщаем Вам, что мы также считаем целесообразным его реализацию и постараемся включить в план доработок при выпуске одной из следующих версий нашего ПО.
Серж пишет: А пока данное пожелание не реализовано, разумно ли вместо OnParam использовать функции CreateDataSource и SetUpdateCallback на каждый из отслеживаемых параметров? Не окажет ли это негативного влияния на производительность?
Здравствуйте, На производительность не должно оказать влияния, но с оговоркой что речь идет о разумном количестве заказываемых параметров.
Уделив этому вопросу некоторое время (на самом деле, потратив кучу времени), я пришёл к выводу, что созданный колбек по какому-либо параметру из ТТП через SetUpdateCallback всё равно будет вызываться при изменении любого параметра по данной бумаге. Т.е., получим тот же самый OnParam, только по конкретной бумаге. Но после получения колбека всё равно нужно проверять, был ли вызван этот колбек по изменению отслеживаемого параметра.
А теперь внимание вопрос: Sergey Gorokhov, почему вы не сказали, что для решения данного вопроса создание колбека через SetUpdateCallback не имеет смысла?
Надо делать так, как надо. А как не надо - делать не надо.
Дмитрий пишет: добавить в функцию OnParam(STRING class_code, STRING sec_code) еще один параметр, сообщающий, изменение значений каких именно параметров ТТП привело к вызову этой функции
Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
А пока данное пожелание не реализовано, разумно ли вместо OnParam использовать функции CreateDataSource и SetUpdateCallback на каждый из отслеживаемых параметров? Не окажет ли это негативного влияния на производительность?
Надо делать так, как надо. А как не надо - делать не надо.
Пользователь
Сообщений: Регистрация: 23.01.2015
01.06.2015 08:54:35
Цитата
Старатель пишет: всё равно будет вызываться при изменении любого параметра по данной бумаге
так не должно быть. Приведите пример исследований
Пользователь
Сообщений: Регистрация: 01.02.2015
01.06.2015 09:02:44
выскажу своё личное мнение... )))))
я думаю, стоит задать вышеописанные вопросы непосредственно Михаилу Булычеву. А Сергею Горохову - зарегистрировать очередное несбыточное пожелание о том, чтоб в документации отразить детальную схему работы коллбеков и функции CreateDataSource. Но только детальную. Иначе, срач на форуме, равно как и число "бесполезных топиков" - нисколько не убавится :)))))
Пользователь
Сообщений: Регистрация: 23.01.2015
01.06.2015 09:06:50
Цитата
sam063rus пишет: выскажу своё личное мнение... )))))
я думаю, стоит задать вышеописанные вопросы непосредственно Михаилу Булычеву. А Сергею Горохову - зарегистрировать очередное несбыточное пожелание о том, чтоб в документации отразить детальную схему работы коллбеков и функции CreateDataSource. Но только детальную. Иначе, срач на форуме, равно как и число "бесполезных топиков" - нисколько не убавится ))))
Михаил не является сотрудником поддержки и отвечать на Ваши вопросы совсем не обязан, так что Вам придется вести диалог со мной. Если Вас не устраивает корректность моих ответов готов выслушать предметную критику.
Пользователь
Сообщений: Регистрация: 01.02.2015
01.06.2015 09:08:46
Цитата
Sergey Gorokhov пишет: Михаил не является сотрудником поддержки и отвечать на Ваши вопросы совсем не обязан, так что Вам придется вести диалог со мной. Если Вас не устраивает корректность моих ответов готов выслушать предметную критику.
звучит, как будто я Вас - обидел своим предложением... :)))
Старатель пишет: всё равно будет вызываться при изменении любого параметра по данной бумаге
так не должно быть. Приведите пример исследований
Дополнительно, сообщите установлена или нет настройка в меню Настрйоки - Основные - Программа - Получение данных, опция "Запрашивать данные раз в.. " ?
Старатель пишет: всё равно будет вызываться при изменении любого параметра по данной бумаге
так не должно быть. Приведите пример исследований
Дополнительно, сообщите установлена или нет настройка в меню Настрйоки - Основные - Программа - Получение данных, опция "Запрашивать данные раз в.. " ?
Уточнений не требуется, ситуацию удалось воспроизвести, проблема изучается. Постараемся в ближайшее время дать ответ.
Надо делать так, как надо. А как не надо - делать не надо.
Пользователь
Сообщений: Регистрация: 30.01.2015
Роботорговец
01.06.2015 13:02:00
Цитата
Sergey Gorokhov пишет: Раз в период, с биржи приезжает кучка параметров. Эта кучка отправляется от сервера клиенту. Клиент в свою очередь, обновляет только те данные которые приехали, а те которые не приехали оставляет в предыдущем значении. раз в промежуток между срезами были изменения, то биржа отправит эту самую кучку.
Биржа отправляет всем брокерам одинаковые параметры? Т.е. временные "срезы" для всех брокеров одни?
Надо делать так, как надо. А как не надо - делать не надо.
Пользователь
Сообщений: Регистрация: 23.01.2015
01.06.2015 13:05:21
Цитата
Старатель пишет: раз в промежуток между срезами были изменения, то биржа отправит эту самую кучку.
нет, разные.
Пользователь
Сообщений: Регистрация: 23.01.2015
01.06.2015 13:05:46
Цитата
Старатель пишет: Биржа отправляет всем брокерам одинаковые параметры? Т.е. временные "срезы" для всех брокеров одни?