← 返回

Обработчик события MarketDepth.QuotesChanged

Всем доброго времени суток.

Пытаюсь обрабатывать событие QuotesChanged Объекта MarketDepth Обработчику передается два параметра в которых как я понял содержится информация об изменяемой котировке. так вот если первый параметр с первым параметров все более или менее просто. то второй никак не могу побороть. в документации про него кроме типа ничего не нашел. да и примерах нигде не освещается эта тема. Расскажите подробней что представляет из себя этот параметр точнее как его крамотней окучить. и как я понял событие будет возникать для каждой строчки стакана? а если не затруднит то приведите какой-нить пример обработки этого события и событий UpdatingStarted и UpdatingFinished (именно объекта MarketDepth)

Заранее спасибо

p.s. Еще один вопрос в догонку. Если в квике поставить разреженный режим стакана то по dde все равно передается обычный (тоесть с выкинутыми пустыми ценами). это фишка самого квика? он их вырезает или библиотека?

本主题对您有帮助吗?

分享主题

评论 (16)

登录创建账户, 登录或注册以发表评论

Mikhail Sukhov
Mikhail Sukhov

rminko: Пытаюсь обрабатывать событие QuotesChanged Объекта MarketDepth Обработчику передается два параметра в которых как я понял содержится информация об изменяемой котировке. так вот если первый параметр с первым параметров все более или менее просто. то второй никак не могу побороть. в документации про него кроме типа ничего не нашел. да и примерах нигде не освещается эта тема.

Не освещается, потому что устаревшее поведение. В новой версии нет таких параметров. Надо использовать ITrader.QuotesChanged.

rminko
rminko 作者

Спасибо. Я наоборот решил что событие для каждого отдельного стакана - это новая фишка. а общее в Trader - это старое. Тогда попутный вопрос так как даже новое поведение особо не описывается ни документации ни в примерах. в обработчик Trader.QuotesChanged коллекция из двух (или из скольки?) стаканов, один с только с теми котировками которые добавились, а другой которые исчезли,а если котировка изменилась (изменился объем) то она будет в обоих стаканах? Или я что-то не так понял? Заранее спасибо

Mikhail Sukhov
Mikhail Sukhov

rminko: Спасибо. Я наоборот решил что событие для каждого отдельного стакана - это новая фишка. а общее в Trader - это старое. Тогда попутный вопрос так как даже новое поведение особо не описывается ни документации ни в примерах. в обработчик Trader.QuotesChanged коллекция из двух (или из скольки?) стаканов, один с только с теми котировками которые добавились, а другой которые исчезли,а если котировка изменилась (изменился объем) то она будет в обоих стаканах? Или я что-то не так понял? Заранее спасибо

В этом событие, как и во всех других событиях ITrader, коллекция объектов. В данном случае, коллекция стаканов как они есть в торговой системе. Тоесть, ни то что было до этого, ни изменения. А просто сами стаканы.

rminko
rminko 作者

Mikhail Sukhov: В этом событие, как и во всех других событиях ITrader, коллекция объектов. В данном случае, коллекция стаканов как они есть в торговой системе. Тоесть, ни то что было до этого, ни изменения. А просто сами стаканы. А есть возможность получить только изменившиеся котировки или это уже надо реализовывать самому?

Mikhail Sukhov
Mikhail Sukhov

rminko:

Mikhail Sukhov: В этом событие, как и во всех других событиях ITrader, коллекция объектов. В данном случае, коллекция стаканов как они есть в торговой системе. Тоесть, ни то что было до этого, ни изменения. А просто сами стаканы. А есть возможность получить только изменившиеся котировки или это уже надо реализовывать самому?

Самому.

rminko
rminko 作者

Решил не заводить новую тему, так как вопрос очень соотвествует текущей.

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

  1. а) получить все котировки б) запросить луший аск в)и лучший бид
  2. а)получить все аски б)получить все биды во втором варианте нет необходимости запрашивать лучший аск и бид так как их можно легко вычислить из всех асков и всех бидов так как они отсортированы. Вообщем пробовал оба варианта и в обоих вариантах в процессе запроса данных очень часто стакан мягко говоря бредовым. (получил лучшие бид по индексу к примеру 190000 и тут же запрашиваю лучший аск а он равен 189990....... вот и как побороть?
Mikhail Sukhov
Mikhail Sukhov

rminko: Вообщем пробовал оба варианта и в обоих вариантах в процессе запроса данных очень часто стакан мягко говоря бредовым. (получил лучшие бид по индексу к примеру 190000 и тут же запрашиваю лучший аск а он равен 189990....... вот и как побороть?

MarketDepth.Clone пробовали в самом начале делать?

rminko
rminko 作者

Mikhail Sukhov: MarketDepth.Clone пробовали в самом начале делать?

Нет не пробовал. так как мне кажеться это будет медленно. а я борюсь за каждую ну или каждую микросекудну. надо попробовать и замерить

p.s. Попробовал. 3 микросекунды. нормально. хотя конечно если сравнить с остальным кодом который пробегает по всему стакану и не просто пробегает а анализирует за 30 микросекунд. то 10 процентный прирост времени только на одной строчке кода выглядит мягко говоря странно 😒. Но это я только проверил саму функцию клон. смотреть что происходит со стаканом - клонируется ли нормально или все равно успевает изменится еще не смотрел

Mikhail Sukhov
Mikhail Sukhov

rminko:

Mikhail Sukhov: MarketDepth.Clone пробовали в самом начале делать?

Нет не пробовал. так как мне кажеться это будет медленно. а я борюсь за каждую ну или каждую микросекудну. надо попробовать и замерить

А что за брокер и инструмент, что дает такую скорость обновления стакана?

rminko
rminko 作者

Это на РИМ1, но там дело не в скорости обновления. Так как даже если брокер обновляет стакан раз в секунду. а я 20 раз в секунду, то существует большая вероятность (примерно 1 к 20) что я начну обновлять стакан до обновления брокером, а закончу после. вот только почему такие ситуации получаются очень часто...

Mikhail Sukhov
Mikhail Sukhov

rminko: ЭТак как даже если брокер обновляет стакан раз в секунду. а я 20 раз в секунду

Вот это не понял. Вы как то сами обновляете стакан?

rminko
rminko 作者

Mikhail Sukhov:

rminko: ЭТак как даже если брокер обновляет стакан раз в секунду. а я 20 раз в секунду

Вот это не понял. Вы как то сами обновляете стакан? Под обновлением стакана я имею ввиду что данные из MarketDepth считываю 20 раз в секунду примерно. ну и иногда поподаю на в такую ситуацию что начинаю считывать одно а пока закончу там уже совсем другое. ладно бы еще все остальные котировки но когда бид становится равными аску у меня или просто на пока считаю аск бид по моим данным и реальный в marketdepth это две большие разницы

Mikhail Sukhov
Mikhail Sukhov

rminko: Под обновлением стакана я имею ввиду что данные из MarketDepth считываю 20 раз в секунду примерно.

А зачем это делать? Вы 20 раз в секунду проделываете одно и то же.

rminko
rminko 作者

Mikhail Sukhov:

rminko: Под обновлением стакана я имею ввиду что данные из MarketDepth считываю 20 раз в секунду примерно.

А зачем это делать? Вы 20 раз в секунду проделываете одно и то же.

есть на это несколько причин - первая и очевидная это как можно быстрее среагировать на изменение в стакане. Но это к делу не относится ведь даже если считывать 1-2 раза в секунду все равно буду попадать на "обновление стакана в процессе чтения". Ну да ладно проблем конечно это доставляет, но не критично. добавлю пару проверок и всего делов. просто думал может кто-то уже сталкивался с такой проблемой и както победил ее.

Mikhail Sukhov
Mikhail Sukhov

rminko: есть на это несколько причин - первая и очевидная это как можно быстрее среагировать на изменение в стакане.

Самое быстрое - это через MarketDepth.QuotesChanged.

rminko
rminko 作者

Mikhail Sukhov:

rminko: есть на это несколько причин - первая и очевидная это как можно быстрее среагировать на изменение в стакане.

Самое быстрое - это через MarketDepth.QuotesChanged. ну так я и делаю это через QuotesChanged, но пока я обрабатываю это событие стакан как я писал выше успевает измениться