Сборка стакана при помощи 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


Quote:
if (OLItem.Order >= t) { break; }

Зачем эта доп. проверка? Просто обрабатывайте все записи последовательно, время стакана будет равно времени последней обработанной записи.

Quote:
Здесь выскакивает ошибка 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 (210) FromPlazaRouter.png 163 KB (234)
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