в общем. как я понял - биржу можно сравнить с файлообменником с возможностью докачки. Врядли история ведётся по каждому брокеру. Логичней было бы предположить, что есть некий общий биржевой кеш, в структуре биржевого потока - есть поля временных меток. Квиковский сервер мониторит пакеты с биржевого шлюза, и если есть изменение метки времени в структуре пакета - принимает данные. Брокеры - являются подписчиками на информацию теперь уже через квиковский сервер - тут уже - единый биржевой поток разбирается на части и к реально биржевым данным примешиваются чисто исторические - свечи и т. д. Теперь уже брокер является своего рода биржевым каналом (через выделенный квиковский сервер) и главным арбитром предоставления информации. Старина квик же - делает тоже самое, что и квиковский сервер с биржей: есть изменение метки времени в структуре пакета - есть и так называемы срезы в OnParam и другие коллбеки. серверное время стоит на месте - значит квик замирает. Если разница между изменениями превышает квантум - запрос на пропущенные данные. (что нетрудно понять/заметить потому как квик, как ошпаренный потом начинает "догонять" информацию на графиках и даже в стаканах котировок).
sam063rus пишет: в общем. как я понял - биржу можно сравнить с файлообменником с возможностью докачки. Врядли история ведётся по каждому брокеру. Логичней было бы предположить, что есть некий общий биржевой кеш, в структуре биржевого потока - есть поля временных меток. Квиковский сервер мониторит пакеты с биржевого шлюза, и если есть изменение метки времени в структуре пакета - принимает данные. Брокеры - являются подписчиками на информацию теперь уже через квиковский сервер - тут уже - единый биржевой поток разбирается на части и к реально биржевым данным примешиваются чисто исторические - свечи и т. д. Теперь уже брокер является своего рода биржевым каналом (через выделенный квиковский сервер) и главным арбитром предоставления информации. Старина квик же - делает тоже самое, что и квиковский сервер с биржей: есть изменение метки времени в структуре пакета - есть и так называемы срезы в OnParam и другие коллбеки. серверное время стоит на месте - значит квик замирает. Если разница между изменениями превышает квантум - запрос на пропущенные данные. (что нетрудно понять/заметить потому как квик, как ошпаренный потом начинает "догонять" информацию на графиках и даже в стаканах котировок).
tech support - поправьте где я ошибся.
Я не буду комментировать описание поведения биржи, так как вопрос явно к специалистам биржи. Могу только порекомендовать ознакомиться с технической биржевой документацией если таковая есть в публичном доступе
Старатель пишет: Уделив этому вопросу некоторое время (на самом деле, потратив кучу времени), я пришёл к выводу, что созданный колбек по какому-либо параметру из ТТП через SetUpdateCallback всё равно будет вызываться при изменении любого параметра по данной бумаге. Т.е., получим тот же самый OnParam, только по конкретной бумаге. Но после получения колбека всё равно нужно проверять, был ли вызван этот колбек по изменению отслеживаемого параметра.
А теперь внимание вопрос: Sergey Gorokhov , почему вы не сказали, что для решения данного вопроса создание колбека через SetUpdateCallback не имеет смысла?
скорей всего, SetUpdateCallback - это просто обёртка в виде метода CreateDataSource таких двух функций, как один из квиковских коллбеков (OnAllTrade, OnParam) + функция getParamEx. При том, что сравнения на старый-новый параметр в SetUpdateCallback похоже совсем не предусмотрено. Она просто полагается на то, что по коллбеку в так называемом "срезе" приходит целая линейка ТОЛЬКО изменённых параметров. Что, разумеется - в корне неверно бо как параметры - не меняются в одночасье (в силу тех или иных причин).
sam063rus пишет: SetUpdateCallback - это просто обёртка в виде метода CreateDataSource таких двух функций, как один из квиковских коллбеков (OnAllTrade, OnParam) + функция getParamEx
Добрый день. Datasource не имеет ничего общего с перечисленными колбеками. Это посчитанные на стороне сервера интервалы.
sam063rus пишет: SetUpdateCallback - это просто обёртка в виде метода CreateDataSource таких двух функций, как один из квиковских коллбеков (OnAllTrade, OnParam) + функция getParamEx
Добрый день. Datasource не имеет ничего общего с перечисленными колбеками. Это посчитанные на стороне сервера интервалы.
вопрос несовсем по теме: при приходе OnParam - идёт цикл перебора всех возможных параметров по инструменту (максимум: около 150 итераций на инструмент) с помощью getParamEx - вопрос: какая существует (и существует ли) альтернатива? Всякие CreateDataSourse-"ы" - не предлагать.
и второй вопрос. с точки зрения архитектуры - как бы Вы поступили: иметь 150 разных всевозможных коллбеков (по параметру на коллбек) или один НО!, с указанием изменившегося параметра?
sam063rus пишет: всевозможных коллбеков (по параметру на коллбек)
причём, в каждом каждом коллбеке - можно запускать целую очередь обработчиков. Либо, создать один, как указано во втором варианте (и тоже можно повесить целую очередь обработчиков). В общем, как уже написал - вопрос по архитектуре.
это не ответ. Очевидно мне надо повторить: 1. существует ли ещё более быстрая альтернатива OnParam? 2. есть определённый паттерн проектирования. Причём описанные мной варианты встречаются оба в одинаковой степени. На Ваш взгляд, что лучше: 150 разных коллбеков или один НО! с указанием изменившегося параметра. 3. имеет ли смысл делать класс по отслеживанию изменений всех параметров, чтоб потом, используя его, как "контекст" наследовать от него более мелкие классы, заточенные на определённые коллбеки? Потому как в наследнике - всё равно будет происходить излишний расход ресурсов на копирование родителя (и получение его контекста, причём всё это для каждого экземпляра)
1. Более быстрая для чего? Для получения каких данных? 2. Лучше с какой точки зрения? Можно и из одного OnParam породить еще 150 колбеков вызвав нужные функции. 3. Если речь идет о Ваших разработках, то только Вам решать как сделать лучше. Тут я точно ничего подсказать не могу. Вы мне задаете вопросы о том как лучше спроектировать Ваше приложение, о котором мне ничего не известно.
OnParam и getParamEx разные функции в принципе. первая служит для нотификации об изменении ТТП, вторая для того чтобы забрать эти значения. Сравнивать их не совсем правильно.
Michael Bulychev пишет: 2. Лучше с какой точки зрения? Можно и из одного OnParam породить еще 150 колбеков вызвав нужные функции.
далеко не лучше. классы на то и придумали, чтоб избавиться от рутины. К тому же инструментов может быть далеко не 150 (это только их максимум параметров), В итоге, я бы посмотрел потом на этот OnParam и его "километры" :)))
Michael Bulychev пишет: OnParam и getParamEx разные функции в принципе. первая служит для нотификации об изменении ТТП, вторая для того чтобы забрать эти значения. Сравнивать их не совсем правильно.
Как будет выглядеть это дело вкуса и личного ощущения прекрасного. Все равно в итоге все сведется к вызову 150 функций. Но не обязательно километр кода. Достаточно строчек 20. Подписка на изменение и затем в OnParam цикл по функциям-подписчикам.
Серж пишет: А пока данное пожелание не реализовано, разумно ли вместо OnParam использовать функции CreateDataSource и SetUpdateCallback на каждый из отслеживаемых параметров ? Не окажет ли это негативного влияния на производительность?
Здравствуйте, На производительность не должно оказать влияния, но с оговоркой что речь идет о разумном количестве заказываемых параметров.
Уделив этому вопросу некоторое время (на самом деле, потратив кучу времени), я пришёл к выводу, что созданный колбек по какому-либо параметру из ТТП через SetUpdateCallback всё равно будет вызываться при изменении любого параметра по данной бумаге. Т.е., получим тот же самый OnParam, только по конкретной бумаге. Но после получения колбека всё равно нужно проверять, был ли вызван этот колбек по изменению отслеживаемого параметра.
А теперь внимание вопрос: Sergey Gorokhov , почему вы не сказали, что для решения данного вопроса создание колбека через SetUpdateCallback не имеет смысла
Добрый день,
Описанная ошибка будет исправлена в одной из очередных версий программы. Приносим извинения за причиненные неудобства.
Поясню, смотрел вчера ТВС по времени 15:30 по русгидро, сейчас перед галазами ее нет, то там четко была видна сделка на такой обьем, которого во всем стакане не было. Ну и на графике цены и обьема этой сделки тоже не видно было в самом Quik, на время 15:30 все спокойно, как водная гладь.
Надеюсь, что нет, в моем понимании ТВС - это таблица тиков. Я вот только, что понял, что возможно в таблцие всех сделок, не лоты указаныы, а кол-во акций ?
А разве может быть такое, чтобы объем на графике не соответствовал данным из ТВС (ну если не считать каких-то сбоев в работе сервера QUIK)? Ведь графики строятся на сервере по тем же данным, которые мы видим в ТВС. Или я ошибаюсь?
Optimus1 Optimus1 пишет: В таблице истории - указаны 0, насчет трансляции не знаю, смотрю в конце торгового дня.
Добрый день.
Чтобы ускорить решение вопроса, пришлите нам архив терминала QUIK (без ключей доступа и файла chm) на адрес quiksupport@arqatech.com перед этим зафиксируйте проблему и закройте терминал.
Вот, что еще обнаружил, если запускать таблицу историй, когда идут торги, то все отображается, а вот, когда открываю таблицу историй по выбранному инструменту, по указанным параметрам, получаются - 0.
Optimus1 Optimus1 пишет: Вот, что еще обнаружил, если запускать таблицу историй, когда идут торги, то все отображается, а вот, когда открываю таблицу историй по выбранному инструменту, по указанным параметрам, получаются - 0.
Так если запускаете, когда уже торги закончились - то это нормально. Данные в эту таблицу поступают только пока идут торги, ну и еще иногда немного времени после их окончания.
Нееет! К примеру параметры сумм.спроса и сумм.предл. в таблице истории, я выгружаю после 2 часов, как торги уже закончились только параметры кол.срос и кол.предл. выгружаются нулевыми, после завершения торгов.
Optimus1 Optimus1 пишет: Вот, что еще обнаружил, если запускать таблицу историй, когда идут торги, то все отображается, а вот, когда открываю таблицу историй по выбранному инструменту, по указанным параметрам, получаются - 0.
Добрый день.
Открываете новую таблицу? Посмотрите, что транслируется в таблице текущих параметров.
Вообщем я локализовал проблему до следующего описания :)
Предположим я запускаю Quik в 18:00, открываю таблицу истории по любой акции, по параметрам: время, название бумаги, цена спроса, и кол-во спроса.
Все параметры отображаются в таблице истории, но если теперь пролистать таблицу истории вверх, до того, как я запустил quik, то параметр кол-во спроса не отображается. Все остальные параметры отображаются.!
Теперь если открыть по этой акции график цены и обьема и на этом графике построить график кол-во спроса и нажать кнопочку обновить, обновление происходит, как на графике, так и уже в таблице истории.
Это так и должно быть ?? Еще раз хотел бы уточнить, что так происходит всего лишь по двум параметрам - это: кол-во спроса и предложения. По всем остальным параметрам все отображается в полном обьеме без описанных манипуляций.
Все параметры отображаются в таблице истории, но если теперь пролистать таблицу истории вверх, до того, как я запустил quik, то параметр кол-во спроса не отображается.
Данное поведение у нас не воспроизводится. Можете зафиксировать проблему и прислать архив терминала без ключей доступа.
Optimus1 Optimus1 пишет: Подскажите пожалуйста, а как этот архив прислать и как убрать ключи доступа ?
Ключи доступа это файлы pubring.txk и secring.txk если эти файлы находятся в директории с программой, то уберите их перед отправкой, а также файлы с расширение chm. Далее по папке с программой QUIK нажмите правой кнопкой мыши и из контекстного меню выберите архиватор.
Изменения в рабочем месте QUIK 7.0.0.pdf Исправленные недоработки предыдущих версий 37. Вызов функции, заданной через SetUpdateCallback, происходил при изменении любого параметра инструмента, а не только заданного.
Проблема решена?
Надо делать так, как надо. А как не надо - делать не надо.
Изменения в рабочем месте QUIK 7.0.0.pdf Исправленные недоработки предыдущих версий 37. Вызов функции, заданной через SetUpdateCallback, происходил при изменении любого параметра инструмента, а не только заданного.