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

Сборка стакана при помощи API
Atom
12/17/2012
abubakirov


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

Я пытаюсь собрать стакан из ордерлога при помощи 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, тогда подскажите, в какую часть мануала смотреть.

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


Tags:


Thanks:


1 2  >
esper

Avatar
Date: 12/17/2012
Reply


Thanks: abubakirov

abubakirov

Avatar
Date: 12/17/2012
Reply


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

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. }

Thanks:

esper

Avatar
Date: 12/17/2012
Reply


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

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

Thanks:

vk37

Avatar
Date: 10/22/2013
Reply


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

Thanks:

Mikhail Sukhov

Avatar
Date: 10/22/2013
Reply


vk37:

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

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

Thanks: vk37

vk37

Avatar
Date: 11/1/2013
Reply


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

FromOrderLog.png 142 KB (316) FromPlazaRouter.png 163 KB (352)
Thanks:

Mikhail Sukhov

Avatar
Date: 11/1/2013
Reply


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

Thanks:

vk37

Avatar
Date: 11/1/2013
Reply


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

Thanks:

Mikhail Sukhov

Avatar
Date: 11/1/2013
Reply


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

А что говорит исходник?[smile]

Thanks:

vk37

Avatar
Date: 11/1/2013
Reply


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

Thanks:
1 2  >

Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy