Извиняюсь, если написал не в ту тему.
Я пытаюсь собрать стакан из ордерлога при помощи 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, тогда подскажите, в какую часть мануала смотреть.
Заранее благодарен
Kommentare (13)
Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen
OrderLogMarketDepthBuilder
Если я все правильно понял, то делаю следующее:
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. }
Послал по скайпу.
Попробовал построить стакан по ордер логу. Использовал OrderLogMarketDepthBuilder из версии 4.1.19.1. Ошибок в процессе преобразования RIZ3 не возникло. Результат преобразования отобразил на графике. Второй график - стакан и сделки полученные обычным образом. Что-то не соответствует одно другому )
А точно нет гэпа в данных и они за один и тот же период? Подозрительно, что после клиринга ценовой уровень изменился.
Такая ситуация на большинстве торговых дней RIZ3 после клиринга. Разрывов данных нет. Странно, что если запустить построение стаканов с момента клиринга в том дне где ценовой уровень поменялся, то, вроде корректно строится. Проблемы при построении стаканов вечерней сессии после дневной. Только вечерняя строится, вроде, нормально.
А что говорит исходник?🙂
Построение, похоже, выполняется правильно, в т.ч. после клиринга. По видимому, ошибка появляется либо при сохранении построенных стаканов на диск, либо при последующем чтении стаканов с диска. Сохраняю стаканы максимальной глубины.
Предполагаю, что есть ошибка при сохранении стаканов. Ниже графики для стаканов глубиной int.Max, 1000, 100, 70. Чем меньше глубина стакана, тем более корректно он сохраняется. Размер файла quotes.bin с неограниченной глубиной стакана получился меньше, чем с глубиной 70.
Если нужно, могу выслать исходники для воспроизведения ситуации.
Вторая попытка построить стакан максимальной глубины. Вроде, нормально строит )