← Zurück

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

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

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

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

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

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

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

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

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

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

War dieses Thema hilfreich?

Thema teilen

Kommentare (2)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

Alexander
Alexander Autor

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

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

Alexander
Alexander Autor

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