Клиентский API > Пустой стакан

Разработка с использованием клиентского API
piyyy
Сообщения: 99
Зарегистрирован: 15 янв 2018, 16:36
Благодарил (а): 4 раза
Поблагодарили: 8 раз

Пустой стакан

Непрочитанное сообщение piyyy » 16 июл 2024, 18:37

4.0.4209.1629 ADClientSDK
После продолжительной работы в течении дня в один момент приходит OrderBookEntity почти со всеми "уровнями", заполненными нулями как на скриншоте. Кроме одного. Подобное поведение продолжается пока не перелогинится терминал. Это может быть как по всем инструментам, так и по отдельным. В самом терминале корректные данные и стакан весь заполнен. Кто-нибудь сталкивался с таким и в чем может быть проблема?
Вложения
l2.PNG
l2.PNG (37.57 КБ) 11190 просмотров

ensh
Сообщения: 220
Зарегистрирован: 28 июн 2017, 13:56
Благодарил (а): 4 раза
Поблагодарили: 40 раз

Re: Пустой стакан

Непрочитанное сообщение ensh » 24 июл 2024, 13:56

Насколько я помню, OrderBook с нулевыми цифрами это какая то техническая сущность, она и в обычном режиме прилетает нередко.
При прорисовке стакана такия сущность игнорируется, каждый стакан имеет свою очередь уровней, чтобы в момент прорисовки отображался самый свежий пришедьший уровень. Если стакан обновляется, значит уровнии приходят правильно, если замер - значит застрял на посл уровне

piyyy
Сообщения: 99
Зарегистрирован: 15 янв 2018, 16:36
Благодарил (а): 4 раза
Поблагодарили: 8 раз

Re: Пустой стакан

Непрочитанное сообщение piyyy » 26 авг 2024, 19:02

ensh писал(а):Насколько я помню, OrderBook с нулевыми цифрами это какая то техническая сущность, она и в обычном режиме прилетает нередко.
При прорисовке стакана такия сущность игнорируется, каждый стакан имеет свою очередь уровней, чтобы в момент прорисовки отображался самый свежий пришедьший уровень. Если стакан обновляется, значит уровнии приходят правильно, если замер - значит застрял на посл уровне


Разобрался в проблеме. В течении дня бывает приходит пустой объект OrderBookEntity с IdFi=0. Это событие сбрасывает кэш ордербуков, а именно удаляет все из QueueManager. Дальше начинают приходить номальные события по подписанным стаканам, но без флага IsInit. Это приводит к созданию кэша стакана на 40 линий (OrderBook(): this(40)) с пустыми уровнями и расширению его до 79 уровней, т.к. нормальные данные не матчатся с созданными уровнями пустого стакана. Далее обновленный кэш стакана сериализуется и отправляется клиентам WCF сервиса. Но сериализация поисходит на основе описания протокола (ad.xml) в ресурсах ADir.NetProtocol.dll (<field name="Lines" type="/messages/OrderBookLevelEntity" array="true" size="40" log-name="Ln" />). Size="40". Клиенты получат только первые 40 уровней. В общем я написал в саппорт, но не знаю пользуется ли еще кто-нибудь этим API.
Интересно что для самого терминала ордербук инкапсулируется в LocalQueue и в процессе копирования уровней отбрасываются нулевые уровни (OrderBookClient.GetClientQueue().... base.Lines.Where((OrderBookLevelEntity item) => item.BuyQty + item.SellQty > 0)
Вложения
l2_1.PNG
l2_1.PNG (292.85 КБ) 4135 просмотров


Вернуться в «Клиентский API»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей