4.0.4209.1629 ADClientSDK
После продолжительной работы в течении дня в один момент приходит OrderBookEntity почти со всеми "уровнями", заполненными нулями как на скриншоте. Кроме одного. Подобное поведение продолжается пока не перелогинится терминал. Это может быть как по всем инструментам, так и по отдельным. В самом терминале корректные данные и стакан весь заполнен. Кто-нибудь сталкивался с таким и в чем может быть проблема?
Клиентский API > Пустой стакан
-
- Сообщения: 219
- Зарегистрирован: 28 июн 2017, 13:56
- Благодарил (а): 4 раза
- Поблагодарили: 40 раз
Re: Пустой стакан
Насколько я помню, OrderBook с нулевыми цифрами это какая то техническая сущность, она и в обычном режиме прилетает нередко.
При прорисовке стакана такия сущность игнорируется, каждый стакан имеет свою очередь уровней, чтобы в момент прорисовки отображался самый свежий пришедьший уровень. Если стакан обновляется, значит уровнии приходят правильно, если замер - значит застрял на посл уровне
При прорисовке стакана такия сущность игнорируется, каждый стакан имеет свою очередь уровней, чтобы в момент прорисовки отображался самый свежий пришедьший уровень. Если стакан обновляется, значит уровнии приходят правильно, если замер - значит застрял на посл уровне
Re: Пустой стакан
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 (292.85 КБ) 2995 просмотров
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя