← Назад

Сборка стакана при помощи API

Извиняюсь, если написал не в ту тему.

Я пытаюсь собрать стакан из ордерлога при помощи API, отсюда возник ряд вопросов.

Во-первых, можно ли узнать время, когда была отменена заявка? Если мы этого не знаем, то я не могу включить в стакан заявки, которые были отменены после того момента, на который я собираю стакан.

Во-вторых, пусть мы рассматриваем только исполненные заявки:

foreach (OrderLogItem OLItem in reader) { if (!OLItem.IsMatched()) { continue; } Order order = OLItem.Order; if (order.Time >= t) { break; } //t - момент времени, на который собирается стакан var tmp_trades = order.GetTrades(); //На этом моменте выскакивает ошибка ArgumentException: Заявка №№№ не имеет информацию о шлюзе. Parameter name: order

Как справиться с этой ошибкой, и какого типа можно делать объект tmp_trades?

Пытался так же сделать и по-другому:

if (!OLItem.IsMatched()) { continue; } Trade trade = OLItem.Trade; if (trade.Time <= t) { continue; } decimal price = order.Price; //Далее идет запись данных в массив, он не так и важна.

Но в этом случае возвращаются пустые массивы, то есть ни одна итерация не прошла условие цикла trade.Time > t

Как мне решить мои проблемы? Возможно, сборка стаканов из ОЛ уже реализована в API, тогда подскажите, в какую часть мануала смотреть.

Заранее благодарен

Комментарии (13)

Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий

esper
esper
abubakirov
abubakirov
abubakirov Автор

Если я все правильно понял, то делаю следующее:

MarketDepth depth = new MarketDepth(security); OrderLogMarketDepthBuilder depthBuilder = new OrderLogMarketDepthBuilder(depth); foreach (OrderLogItem OLitem in reader) { if (OLItem.Order >= t) { break; } depthBuilder.Update(OLItem); //Здесь выскакивает ошибка ArgumentOutOfRangeException: Котировка для заданной цены не была найдена. Parameter name: price. Actual value was 146390. }

esper
esper

if (OLItem.Order >= t) { break; } Зачем эта доп. проверка? Просто обрабатывайте все записи последовательно, время стакана будет равно времени последней обработанной записи.

Здесь выскакивает ошибка ArgumentOutOfRangeException: Котировка для заданной цены не была найдена. Parameter name: price. Actual value was 146390. Ошибка говорит о том, что пришла запись о снятии заявки с указанной ценой, но такого уровня в стакане не было. Т.е. стакан до этого времени собран не верно. В Гидре есть построение стаканов с ордерлога, можете посмотреть исходники на кодеплексе.

vk37
vk37

esper: В Гидре есть построение стаканов с ордерлога, можете посмотреть исходники на кодеплексе.Если речь идет о задаче по конвертации лога заявок в стакан в Гидре, то можно как-то посмотреть этот код? На кодплексе версия 4.1.9. Там такого функционала не нашел.

Mikhail Sukhov
Mikhail Sukhov

vk37:

esper: В Гидре есть построение стаканов с ордерлога, можете посмотреть исходники на кодеплексе.Если речь идет о задаче по конвертации лога заявок в стакан в Гидре, то можно как-то посмотреть этот код? На кодплексе версия 4.1.9. Там такого функционала не нашел.

Послал по скайпу.

vk37
vk37

Попробовал построить стакан по ордер логу. Использовал OrderLogMarketDepthBuilder из версии 4.1.19.1. Ошибок в процессе преобразования RIZ3 не возникло. Результат преобразования отобразил на графике. Второй график - стакан и сделки полученные обычным образом. Что-то не соответствует одно другому )

Mikhail Sukhov
Mikhail Sukhov

А точно нет гэпа в данных и они за один и тот же период? Подозрительно, что после клиринга ценовой уровень изменился.

vk37
vk37

Такая ситуация на большинстве торговых дней RIZ3 после клиринга. Разрывов данных нет. Странно, что если запустить построение стаканов с момента клиринга в том дне где ценовой уровень поменялся, то, вроде корректно строится. Проблемы при построении стаканов вечерней сессии после дневной. Только вечерняя строится, вроде, нормально.

Mikhail Sukhov
Mikhail Sukhov

vk37: Такая ситуация на большинстве торговых дней RIZ3 после клиринга. Разрывов данных нет. Странно, что если запустить построение стаканов с момента клиринга в том дне где ценовой уровень поменялся, то, вроде корректно строится. Проблемы при построении стаканов вечерней сессии после дневной. Только вечерняя строится, вроде, нормально.

А что говорит исходник?🙂

vk37
vk37

Построение, похоже, выполняется правильно, в т.ч. после клиринга. По видимому, ошибка появляется либо при сохранении построенных стаканов на диск, либо при последующем чтении стаканов с диска. Сохраняю стаканы максимальной глубины.

vk37
vk37

Предполагаю, что есть ошибка при сохранении стаканов. Ниже графики для стаканов глубиной int.Max, 1000, 100, 70. Чем меньше глубина стакана, тем более корректно он сохраняется. Размер файла quotes.bin с неограниченной глубиной стакана получился меньше, чем с глубиной 70.

vk37
vk37

Если нужно, могу выслать исходники для воспроизведения ситуации.

vk37
vk37

Вторая попытка построить стакан максимальной глубины. Вроде, нормально строит )