Многократный приход одних и тех же сделок при тестировании на исторических данных в HistoryEmulationConnector


Многократный приход одних и тех же сделок при тестировании на исторических данных в HistoryEmulationConnector
Atom
14.07.2017


Здравствуйте!

Смотрю примеры и нашел явный баг в логике чтения исторических данных при использовании HistoryEmulationConnector.

Проще всего воспроизвести на вашем примере SampleHistoryTesting. Достаточно подписаться на событие connector.NewTrade и посмотреть, какие сделки приходят в него после запуска теста на тиках. Будет хорошо видно, что каждая сделка приходит дважды подряд (по идентификатору транзакции и другим полям видно, что это одна и та же сделка). Так происходит для каждой сделки из источника данных.

Я поизучал код пару часов и нашел причину такого поведения.

Проблема в том, как обрабатываются сообщения о подписке в методе HistoryMessageAdapter.ProcessMarketDataMessage(MarketDataMessage message). Обратите внимание на строку: https://github.com/Stock...yMessageAdapter.cs#L443

В примере SampleHistoryTesting сообщение MarketDataTypes.Trades и флагом IsSubscribe приходит дважды: первый раз при подписке на Security в коннекторе и второй раз при запуске генерации свечей на этом же инструменте. Фактически, оба раза выполняется такой код: BasketStorage.AddStorage(StorageRegistry.GetTickMessageStorage(security, Drive, StorageFormat)), т.е. в BasketStorage дважды добавляется один и тот же источкник данных, возвращаемый методом StorageRegistry.GetTickMessageStorage(). Далее во время работы у каждой из копий источника в BasketStorage получается своя копия одной и той же сделки.

На первый взгляд правильным решением было бы, вместо того чтобы добавлять в BasketStorage копии одного и того же источника на каждое сообщение о подписке, проверять, что такой источник уже был добавлен и инкрементировать некий счетчик ссылок, чтобы правильно отрабатывать подписку / отписку. Сообщения об отписке должны декрементировать этот счетчик ссылок.

Текущее положение не дает возможности нормально тестировать свой код, т.к. в нормальном состоянии, разумеется, не должны приходить копии одной и той же сделки несколько раз.

Известный ли это баг и планируется это к исправлению? Или может есть известные способы обхода этой ситуации?



Спасибо:


Alexander

Фотография
Дата: 25.07.2017
Ответить


Здравствуйте!

Очень хотелось бы получить какую-то реакцию. Или у всех все работает и вы это багом не считаете?
Спасибо:

Alexander

Фотография
Дата: 14.08.2017
Ответить


В новой версии 4.3.26.2 это поведение сохраняется. Приходят по две одинаковые сделки подряд.
Спасибо:


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy