Скорость получения данных OnParam OnQuote

Страницы: 1
RSS
Скорость получения данных OnParam OnQuote
 
Подскажите откуда быстрее получить данные: 1) из OnParam
или 2) из OnQuote

интересуют цены эмитентов
 
2)
 
Думаю, ответ на этот вопрос неоднозначен.
Наверное, стоит проверить самостоятельно на конкретном брокере.
 
Скрипт выводит в лог последнюю котировку bid/offer из OnParam и OnQuote:
Скрытый текст
У меня результаты следующие:
Скрытый текст
Из лога видно, что OnParam даёт информацию об изменении котировки раньше.
 
О Спасибо большое! А я уже наделал через OnQuote - надо переделать
 
всё веселее и веселей...
 
Уважаемые разработчики, как вы прокомментируете этот факт, с учетом написанного здесь:
https://forum.quik.ru/messages/forum1/message1800/topic246/#message1800
Цитата
Egor Zaytsev пишет:
Приоритет получения данных выглядит следующим образом:

- таблица котировок,
- далее таблица текущих параметров
- таблица всех сделок,
- графики.
 
Я имею в виду этот факт:
Цитата
Старатель пишет:
Скрипт выводит в лог последнюю котировку bid/offer из OnParam и OnQuote
Из лога видно, что OnParam даёт информацию об изменении котировки раньше.
 
Кстати, я специально даю фрагменты кода, чтобы каждый мог самостоятельно проверить на своём рабочем месте и опровергнуть мои доводы. Пока этого никто не сделал.
 
Сомнительные выводы из эксперимента (что непременно через OnParam надо котировки доставать). Там разница в пределах погрешности измерения + время на вызов колбека. Наверняка в квике написано что-то вроде
---
нашКрутойОбработчикКотировок(котировка)
начать
 засунутьКотировкуВТТП(котировка)
 вызватьЭтотВашOnParam(paramPamPam)
 вызватьЭтотВашOnQuote(класс, бумага)
закончить
---
Т.е. если OnParam нет, то и переживать не стоит, что он мог бы раньше вызваться.
Кроме того, в привидённом примере есть запись, противоречащая (по крайней мере на первый взгляд) утверждению о последовательности:

Код
16.06.15 10:31:43.045 [OnQuote] offer=71.92
16.06.15 10:31:43.248 [OnParam] offer=71.92
В общем, я бы не стал спешить с выводами =)
 
самое смешное - если почитать старый форум и сравнить с ответами разработчиков на новом - то 80% "Арки" можно смело увольнять.:)))))
 
Цитата
Максим пишет:
вызватьЭтотВашOnParam(paramPamPam)
вызватьЭтотВашOnQuote(класс, бумага)
В общем случае - это разные сигналы с биржи. Это очевидно хотя бы из того, что в OnParam - одно любое (!) значение, а OnQuote - это всегда целый стакан, а не только bid/offer

Если бы всё было так, как вы говорите - мы бы не узнали об изменении данных в стакане в случае, когда bid/offer не изменились.

Таким образом наблюдаемые факты - результат везения пакетов в интернете и настройка серверов биржи и брокера по поводу частоты обновления стакана (именно это параметр в бОльшей степени рулится биржей и где-то было на форуме, что сервер квик тоже настраивается на эту тему вроде, нежели рассылка данных ТТП).
 
Цитата
Максим пишет:
Сомнительные выводы из эксперимента (что непременно через OnParam надо котировки доставать). Там разница в пределах погрешности измерения + время на вызов колбека.
Ну наконец-то хоть кто-то решил оспорить мои выводы. Парирую:
Да, действительно, в большинстве случаев разница небольшая. Среднее значение за рассматриваемый период порядка 22 мс. Но погрешность тут ни при чём: и без времени видно, что в большинстве случаев OnParam даёт котировку раньше.
Цитата
Максим пишет:
Кроме того, в привидённом примере есть запись, противоречащая (по крайней мере на первый взгляд) утверждению о последовательности
Есть такая запись. Но это единственный случай из приведённого фрагмента лога, когда OnQuote оказывается "быстрее".

Очевидно, OnParam, как и OnAllTrade, приходят "пачками". Немного подчистил лог, удалив из него близкие по времени записи OnParam:
Скрытый текст
Не трудно заметить, что помимо того, что OnParam приходит раньше (в большинстве случаев), но и несколько чаще (незначительно, но факт).
Уверен, это зависит от настроек сервера. Поэтому у каждого могут быть свои результаты.
Но в моём случае, очевидно, работа с OnParam позволит раньше, пусть и ненамного, среагировать на изменение котировок.
 
для детей, для самых маленьких:
  • уже не раз было подтвердено, что даже биржа грешит с поставкой и релевантностью данных
  • квик, ка было доказано ранее, исходя из противоречивых ответов самих разработчиков - ещё та система.
  • вы - не являетесь юридическими пользователями квика, а всего лишь - конечными. Так что Вы можете от них просить/требовать? При том, что они сами не знают свой софт. Разъясняю на пальцах: в рзное время, задавая те же вопросы разным представителям "Арки" - Вы гарантировано получите разные ответы по причинам указанным выше.
Как решить проблему?
Для себя - я сделал для каждого эмитента - профиль изменяемых параметров. И если параметры в профиль не укладываются - значит есть факт манипулирвания или технического сбоя (как сейчас принято говорить)

Подытожив:
Надо строить свой торговый алгоритм не на времени, а на качестве. (можно долго разъяснять всю "кухню" но, со временем вы к этому сами придёте...)
 
что можно просить от компании, которая принимает на работу студентов (если верить их официальным интервью...)
читай между строк -> так меньше платить:))))
 
Так OnParam на кучу всего реагирует, так что частота не показатель. Возможно OnQuote дёргается не на каждую котировку, а только если стакан поменялся с момента последнего вызова OnQuote. Т.е. если с сервера идёт 1000 котировок в секунду, а я могу обрабатывать только 100, то нигде эти котировки не копятся, просто меняется объект, возвращаемый по getQuoteLevel2, после возврата из OnQuote она вызывается ещё раз, итого ровно 100 раз в секунду. Ну я бы так реализацию написал :)
Попробуйте добавить getQuoteLevel2 в OnParam и getParamEx в OnQuote. Может статься, что в OnParam показывается вообще не та же котировка, что потом покажется в OnQuote.
И ещё, у вас же в скрипте хитрость - если между двумя вызовами OnQuote действительно стакан может несколько раз туда-сюда сходить, то вы на второй вызов ничего не напечатаете, т.к. best bid/offer "те же". Для OnParam оно имеет смысл, а тут уменьшает кол-во настоящих записей в логах.
Или можно не гадать и дождаться ответа разработчиков =)
 
Добрый день!


К сожалению нет возможности однозначно и точно ответить на озвученный здесь вопрос.
Схема приоритезации и синхронизации разных потоков торговой информации зависит зависят от тех или иных настроек сервера QUIK, и шлюзов к различным торговым системам.
В общих чертах можно сказать, что "как правило" соблюдается следующий порядок рассылки на клиентские места QUIK — таблица текущих параметров, котировки, сделки, заявки, стоп-заявки, лимиты, графики, все-сделки.


Также на "скорость" получения данных  на клиентском месте  будут влиять другие факторы (канал, загрузка cpu, загрузка HDD),
поэтому, как тут верно подметили, нужно брать конкретного брокера и смотреть "свой" результат.
 
Цитата
Максим пишет:
Так OnParam на кучу всего реагирует, так что частота не показатель.
Цитата
Максим пишет:
И ещё, у вас же в скрипте хитрость - если между двумя вызовами OnQuote действительно стакан может несколько раз туда-сюда сходить, то вы на второй вызов ничего не напечатаете, т.к. best bid/offer "те же".
Частоту вызовов OnParam и OnQuote имеет смысл сравнивать только при изменении одинаковых параметров. В данном случае при изменении bid/offer. Поэтому я написал так, как написал - сравниваем только те колбеки, которые дают новую котировку bid/offer. По другому никак.

Цитата
Максим пишет:
Может статься, что в OnParam показывается вообще не та же котировка, что потом покажется в OnQuote.
А по логу разве не видно, что в большинстве случаев OnQuote приносит туже котировку, что до этого нам показал OnParam?
 
Цитата
Alexandr Shumilin пишет:
В общих чертах можно сказать, что "как правило" соблюдается следующий порядок рассылки на клиентские места QUIK — таблица текущих параметров, котировки, сделки, заявки, стоп-заявки, лимиты, графики, все-сделки.
Вот тут у меня есть сомнения: графики обновляются с большой задержкой по сравнению с ТВС. Хотя это может быть результатом частного случая настройки частоты обновлений графиков на сервере. В моём случае частота обновлений графиков - примерно 1 раз/сек.
 
Идёт с сервера bid=10, offer=11
вызывается OnParam, печатает bid=10, offer=11
вызывается OnQuote, печатает bid=10, offer=11
идёт с сервера bid=9, offer=11
вызывается OnParam, печатает bid=9
идёт с сервера bid=10, offer=11
вызывается OnParam, печатает bid=10
вызывается OnQuote, печатает ... а ничего не печатает, для него ничего не изменилось.

Я такую ситуацию имел в виду. Что "та же котировка" и "те же значения чисел лучших спроса-предложения" - несколько разные вещи.

Кстати, сотрудники арки, можете описать механизм вызова OnQuote? Вызывается ли он на каждое изменение котировок? Если случилось 1000 обновлений стакана в секунду, мой скрипт обрабатывает OnQuote со скоростью 100 в секунду, сколько раз будет вызван OnQuote? 1000 (и будет работать 10 секунд)? 100 (и будет работать секунду)? Другое число? Те же вопросы к OnParam.
 
замечал, что частенько бывает, что стакан иногда начинает "догонять" пропущенные данные - т.е. как на ускоренной перемотке навёрстывать из прошлого данные.
 
Добрый день.
OnQuote вызывается на каждое изменение стакана, полученное с сервера. Если вы получите на терминал 1000 изменений с сервера и ваш скрипт обрабатывает 100 в секунду, то сетевая очередь на стороне клиента будет разобрана за 10 секунд.
 
Цитата
Michael Bulychev пишет:
Добрый день.
OnQuote вызывается на каждое изменение стакана, полученное с сервера. Если вы получите на терминал 1000 изменений с сервера и ваш скрипт обрабатывает 100 в секунду, то сетевая очередь на стороне клиента будет разобрана за 10 секунд.
можно было сказать проще - стакан - тоже кешируется.
Цитата
и ваш скрипт обрабатывает 100 в секунду
а если скрипт не запущен, а работает просто обычный квик? Почему стаканы показывают информацию из прошлого? Кому она нужна???
 
получается, что через брокера - информация приходит иной раз в стиле: "то пусто - то густо".
 
единственное, что могу я допустить в этом случае - это увеличение доступа к файловой системе компьютера клиента. Как правило, одна из причин - связана с интенсивным ипользованием файла подкачки и сопутствующими этому разрушениями файловой системы. В итоге, - виртуальная память не успевает выделяться, а данные - всё прут и прут. Потом, наконец - выделяется. Но, спрашивается, кому нужен стакан, несоответствующи реальному timestamp.
 
Цитата
sam063rus пишет:
можно было сказать проще - стакан - тоже кешируется.
Кэш - это несколько иное по смыслу и назначению. В данном случае - очередь сетевых сообщений.
Цитата
sam063rus пишет:
Почему стаканы показывают информацию из прошлого? Кому она нужна???
По какому параметру Вы оцениваете что это стаканы "из прошлого"? Как определяете задержку?
 
Цитата
Michael Bulychev пишет:
По какому параметру Вы оцениваете что это стаканы "из прошлого"? Как определяете задержку?
если специально в него долго "пялиться" - то нетрудно заметить, что иной раз, идёт отставание данных на несколько секунд при интенсивных торгах. И видно, что такие цены и котировки - просто не могли быть в настоящем и будущем. Особенно заметно, когда ещё поглядываешь в это время на график. К тому же, именно в такие локальные моменты - слышется интенсивная работа винчестера, после которой с данными всё становится в порядке. Подозреваю, что идёт интенсивное обращение к диску, а именно, к файлу подкачки с целью выделения памяти.
 
Честно говоря - для меня всё это непроблема - я привёл лишь аргумент основанный на личном наблюдении. Данное явление происходит нечасто - потому и терпимо. Кроме того, прочитал в соседней ветке, что у народа есть определённые проблемы иной раз с доступом к своим базам данным. И что после перехода на SSD-диски - они благополучно решаются.
ну, у меня-то SSD - нет. Я использую старый добрый checkdsk.
 
Цитата
Michael Bulychev пишет:
Добрый день.
OnQuote вызывается на каждое изменение стакана, полученное с сервера. Если вы получите на терминал 1000 изменений с сервера и ваш скрипт обрабатывает 100 в секунду, то сетевая очередь на стороне клиента будет разобрана за 10 секунд.
Т.е. getQuoteLevel2 внутри одного вызова OnQuote будет всегда возвращать одно значение до следующего вызова OnQuote?
А вызов getQuoteLevel2 в main тоже не вернёт новый стакан до тех пор, пока OnQuote не обработает старый?
Если у меня торги длились секунду, было 1000 изменений, за эту секунду OnQuote обработал 100 стаканов, то в начале второй секунды он получит стакан, который в реальности был после 0.1 секунды от начала потока, т.е. 0.9 секунд назад, верно?
Как объяснить эксперимент выше, где в OnQuote показывалось меньше данных, чем в OnParam?
 
Цитата
sam063rus пишет:
Но, спрашивается, кому нужен стакан, несоответствующи реальному timestamp.
С одной стороны, да. А с другой, может кто-то сохраняет историю стакана.
Может, стоит сделать настройку: если на сервере скопилась очередь OnQuote, то, в зависимости от этой настройки выдавать на рабочее место либо всю очередь в хронологическом порядке (как сейчас) либо только последнее состояние стакана.
 
Как много написано.
Но вот простой пример, который дает на правильный ответ:

....
------------------------------
function OnQuote(cl,se)
   if se~=set or mstart==false then return end;
       nqute=nqute+1;
   Log(nqute,"qut");
end

function OnParam(cl,se)
   if se~=set or mstart==false  then return end;
    npar= npar+1;
   Log(npar,"par")
end
...
А вот результат для сбербанка:
06/18/15 19:15:06 par=230  -- это число вызовов колбека оnParam в том числе и по изменению стакана
06/18/15 19:15:06 qut=415 -- это число вызовов OnQuote при изменении стакана
Т е если следить за изменением очереди котировок не нужно, а надо лишь какую-нибудь цену, которая была лучшей когда-то то можно работать по onParam.
Но делать вывод что onParam быстрее, когда вызов OnQuote в 2 раза чаще - это прикольно.
 
Николай Камынин, это вы на демке тестили?  :D
Вот результаты на боевом сервере.
 
Цитата
Николай Камынин пишет:
Но вот простой пример, который дает на правильный ответ
Звучит, как "А сейчас я расскажу вам всю правду..." Ну, ну, ага.  :D
Цитата
Николай Камынин пишет:
Но делать вывод что onParam быстрее, когда вызов OnQuote в 2 раза чаще - это прикольно.
Это тем более забавно, когда вы делаете выводы на основе данных с игрового сервера.
 
Старатель пишет:
Цитата
Цитата
Николай Камынин пишет:
Но вот простой пример, который дает на правильный ответ
Звучит, как "А сейчас я расскажу вам всю правду..." Ну, ну, ага.
Цитата
Николай Камынин пишет:
Но делать вывод что onParam быстрее, когда вызов OnQuote в 2 раза чаще - это прикольно.
Это тем более забавно, когда вы делаете выводы на основе данных с игрового сервера.
Ну вот скажите, зачем желаемое выдавать за действительное?
У Вас слишком богатая фантазия.
Вам это надо? Ну, Врать?
----------------------------
Я никогда не делаю тесты на игровых. Но Вы можете, я не против.
---------------------------
Это результаты на моем реальном счете
и соответственно  рабочем сервере в реальном времени.
 
Цитата
Николай Камынин пишет:
Это результаты на моем реальном счете
и соответственно рабочем сервере в реальном времени.
В таком случае, вам надо настроить интервал обновления данных, чтобы не вводить людей (и себя в первую очередь) в заблуждение своими тестами.
Информация как настроить есть в указанной выше мной теме. Почитайте, не ленитесь.  ;-)
Страницы: 1
Читают тему (гостей: 1)
Наверх