← Zurück

EmulationTrader не понимает тиков с одинаковым Time

Есть локальная база тиков по фучу РТС в формате FileStorage. Создана перегонкой из текстовых файлов с финама, соответственно все Time атрибуты идут без миллисекунд. В секунду могут проходить десятки разных сделок с разным объёмом и ценой. StorageAPI нормально к этому относится и умеет их выдавать последовательно - так, как они записаны в файл. EmulationTrader.NewTrades их так же видит без проблем. Но уже когда мы тестируем стратегию в EmulationTrader то Strategy.NewTrades уже видит ТОЛЬКО ОДНУ сделку в секунду, а именно из всех сделок в заданную секунду он видит ТОЛЬКО последнюю сделку.

Проверялось так - выводим все сделки в EmulationTrader.NewTrades и сравниваем со сделками в Strategy.When(Security.SecurityNewTrades()).Do(Process); Первый метод вываливает ВСЕ - второй только последнюю сделку за секунду. Параметр EmulationTrader.MarketTimeChangedInterval особого влияния не оказал - чаще чем 1 секунда сделки не появлялись, Strategy.Process() не вызывался.

Без какого-либо изменения кода проблему удалось решить перегонкой базы FileStorage - просто добавив миллисекунды всем сделкам по возрастанию - первая сделка в секунду 00мс, вторая 01мс и т.д.

видимо, баг ? пофиксить не могу - нет кода

War dieses Thema hilfreich?

Thema teilen

Kommentare (3)

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

Mikhail Sukhov
Mikhail Sukhov

valenock: Проверялось так - выводим все сделки в EmulationTrader.NewTrades и сравниваем со сделками в Strategy.When(Security.SecurityNewTrades()).Do(Process); Первый метод вываливает ВСЕ - второй только последнюю сделку за секунду.

Тоесть, EmulationTrader.NewTrades вываливает за одну секунду несколько сделок?

valenock
valenock Autor

Хм, как-то не пришло в голову это проверить - следил больше за Strategy.SecurityNewtrade. Сейчас возможности проверить нет - база FileStorage уже с миллисекундами - работает вполне корректно. Я постараюсь что-нибудь придумать, но пока будем считать, что возможны оба варианта - и одна сделка за раз и список сделок за эту секунду.

В любом случае - как я понимаю - ошибка локализуется прежде всего в Strategy.SecurityNewtrade - и она больше логическая, а именно: Слушая EmulationTrader.NewTrades мы получаем все сделки, а Strategy.SecurityNewtrade не даёт списка сделок - мы имеем доступ только к Secutiry.LastTrade, либо должны сами искать все сделки со времени последней в ITrader.Trades.

Видимо, нужно привести NewTrades в Trader и в Strategy к некому единому виду - иначе будут различия в отправке событий.

Mikhail Sukhov
Mikhail Sukhov

valenock: Видимо, нужно привести NewTrades в Trader и в Strategy к некому единому виду - иначе будут различия в отправке событий.

Давайте сначала проверим EmulationTrader.NewTrades. А уж дальше в зависимости от показателей.