Есть локальная база тиков по фучу РТС в формате FileStorage. Создана перегонкой из текстовых файлов с финама, соответственно все Time атрибуты идут без миллисекунд. В секунду могут проходить десятки разных сделок с разным объёмом и ценой. StorageAPI нормально к этому относится и умеет их выдавать последовательно - так, как они записаны в файл. EmulationTrader.NewTrades их так же видит без проблем. Но уже когда мы тестируем стратегию в EmulationTrader то Strategy.NewTrades уже видит ТОЛЬКО ОДНУ сделку в секунду, а именно из всех сделок в заданную секунду он видит ТОЛЬКО последнюю сделку.
Проверялось так - выводим все сделки в EmulationTrader.NewTrades и сравниваем со сделками в Strategy.When(Security.SecurityNewTrades()).Do(Process); Первый метод вываливает ВСЕ - второй только последнюю сделку за секунду. Параметр EmulationTrader.MarketTimeChangedInterval особого влияния не оказал - чаще чем 1 секунда сделки не появлялись, Strategy.Process() не вызывался.
Без какого-либо изменения кода проблему удалось решить перегонкой базы FileStorage - просто добавив миллисекунды всем сделкам по возрастанию - первая сделка в секунду 00мс, вторая 01мс и т.д.
видимо, баг ? пофиксить не могу - нет кода
Kommentare (3)
Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen
Тоесть, EmulationTrader.NewTrades вываливает за одну секунду несколько сделок?
Хм, как-то не пришло в голову это проверить - следил больше за Strategy.SecurityNewtrade. Сейчас возможности проверить нет - база FileStorage уже с миллисекундами - работает вполне корректно. Я постараюсь что-нибудь придумать, но пока будем считать, что возможны оба варианта - и одна сделка за раз и список сделок за эту секунду.
В любом случае - как я понимаю - ошибка локализуется прежде всего в Strategy.SecurityNewtrade - и она больше логическая, а именно: Слушая EmulationTrader.NewTrades мы получаем все сделки, а Strategy.SecurityNewtrade не даёт списка сделок - мы имеем доступ только к Secutiry.LastTrade, либо должны сами искать все сделки со времени последней в ITrader.Trades.
Видимо, нужно привести NewTrades в Trader и в Strategy к некому единому виду - иначе будут различия в отправке событий.
Давайте сначала проверим EmulationTrader.NewTrades. А уж дальше в зависимости от показателей.