Добавил эту поддержку несколько дней назад. Сейчас данные транслируются как заявки и собственные сделки с анонимным портфелем. Появилось желание сделать опцию для построения стаканов из лог заявок. Сделал и это, но не до конца. Стакан строится как-то криво, с захлестами бидов на офферов. Если есть желание у кого-то, милости прощу доделать.
Комментарии (45)
Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий
Вчера начал заниматься этим, но не закончил. Столкнулся со следующими проблемами:
а) Заявка может быть добавлена с любой абсолютно ценой. К примеру, у нас в стакане офер на 11, бид на 9. Мы легко можем послать заявку бай с ценой 15. тогда в ордер_лог будет как раз: <добавлена> 15 Нам же для этого случая (цена > офера) не надо добавлять бид с ценой 15, нам надо просто запомнить что такая заявка есть. Иначе у нас поплывёт весь стакан и мы неправильно будем дальше его строить - Лучший_бид \ лучший_аск, биды, аски будут абсолютно неверными.
б) Отменена - тут всё понятно - просто cancel, удаляем нужный объём.
в) Сведена - тоже понятно, просто уменьшаем на сведённый объём.
Есть вопрос по реализации пункта 1) и по тому как корректно реализовать 2а). Свой вариант для 2а) положил на codeplex, но считаю его далеко не оптимальным.
И самый главный вопрос - так ли нам нужно построение стакана по полному ордер_логу? Слишком он большой для прокачки. Если включаем не с начала дня, то прокачивает с час.
С помощью Limfocit добавлена поддержка построения стакана по полному ордер логу. 😎
Ну и как, сильно отличается от стакана, построенного обычным образом?
Скажу как чайник. Мельтешит так, что пришлось в примере снова сделать интервальное обновление стакана. Иначе просто зависало.
Не могли бы показать место в документации, с функциями построения стаканов по ордер логу? Есть ли возможность по логу заявок, скачанному вот отсюда: http://ftp.rts.ru/pub/info/historical_data/ строить стаканы? Я в процессе написания соответствующего кода, но что-то нет уверенности в его корректной работе.
PlazaTrader.CreateDepthFromOrdersLog
Так Вы что, каждую заявку отдельно обрабатываете? Т.е. не так как в ядре РТС?
приходит ордер лог - он обрабатывается от стакана построенного обычным образом ничем не отличается и отличаться кроме скорости и синхронизации с заявками не должно
приходит новая порция данных по таблице ордер_лога от биржи. она обрабатывается, соответствующим образом меняется стакан
если интересно ещё точнее - подпишитесь на событие добавление новой записи в таблицу ордер лога и смотрите что присылает биржа.
Если учитывать, что ядро РТС строит стаканы так, что оно по тайм стемпу не совпадает со сделками, то да, мы не так как в РТС😀
Мой интерес отнюдь не праздный. Порожден он призывами ( раздающимися на некоторых форумах - rts.ru, smart-lab.ru) запретить Full_Order_Log как Вселенское зло, ибо он позволяет куклу видеть будущее и обижать маленьких. С другой стороны, по моим прикидкам (на РТС не работаю, тонких деталей не знаю, могу и ошибаться) возможен вариант, что ордерлог это просто лог, т.е. история построения текущего агрегированного стакана. Соответственно стакан построенный по ордерлогу будет (в среднем) отставать от текущего агрегированного стакана. Хотя и мельтешит.
Про Ахиллеса и черепаху слышали?
Слышал, но здесь (возможно) более подходит случай морковки (агрегированный стакан) и осла (стакан построенный по ордерлогу). Очень хотелось бы разобраться.
обычно орделог это и есть первичная информация по которой сводятся заявки и которую отдает ядро, а стаканы вообще может сводить уже брокер и раздавать клиентам, по крайней мере такая ситуация на многих западных площадках.
мне кажется проще самому сделать быстрый тест получения стакана и всё встанет на свои места,подобные вопросы отпадут
А в тестовом доступе на Плазу транслируется FullOrderLog ?
да
SampleGui
Версия 4.1.1. Подключаюсь к тестовому контуру. Подписываюсь на plaza.NewOrderLogItems, на старте выполняю plaza.RegisterOrderLog(security). Событие NewOrderLogItems не приходит, хотя стакан обновляется.
Пробовал подключиться к тестовому контуру гидрой. В логе огромное число ошибок типа: 02:46:58.0813267 Plaza Сохранение лога заявок для LKU2@RTS 02:46:58.0823267 Plaza System.ArgumentOutOfRangeException: Неправильный объем заявки. Parameter name: items Actual value was 0.
SampleGUI так же себя ведет?
Два вопроса: 1)После объединения micex предоставляет full order log по основной площадке? 2)Где можно купить ордер лог по фондовой секции micex (интересуют синие чипсы)? Спасибо!
нет \ нигде, нет в природе. по крайней мере в открытом доступе для покупки
т.е. максимум, что провайдит micex это обычный стакан который мы видим в квике? http://rts.micex.ru/a235
SampleGUI вроде нормально, попробую разобраться. Но гидра глючит
У нас она работает на ОЛ.
А что вообще делает метод trader.RegisterOrderLog?? Что он есть, что нету, разницы не вижу.
Кстати, написал свою программку, которая собирает OrderLogItems. При попытке сохранить OrderLogItems в хранилище возникает та же ошибка, что и у Гидры: вроде как встречаются ордера с обьемом 0. Попробую их отфильтровать.
Вопрос: разве никто не тестировал гидру на сохранение OrderLogItems? Только у меня эта ошибка?
Не получается отфильтровать. Та же ошибка: Ошибка | Неправильный объем заявки. Parameter name: items Actual value was 0.
Ошибка возникает при попытке сделать storage.GetOrderLogStorage(rFut, dataPath).Save(OLItems). Какой конкретно OrderLogItem ему не нравится не понятно, и что это за параметр items тоже не понятно. Гидра на этом же падает.
Заметил вот такую вот ерунду: из 10000 первых OrderLogItems за сегодня, у 380 через некоторое время Order'а сменили обьем, 344 из них сменили обьем на 0. Соответственно в итоговом списке, который я собираюсь сохранить на жесткий диск через storage.GetOrderLogStorage.Save оказалась куча ордеров с обьемом 0, и сохранение вылетает с ошибкой! Тут мне пришла гениальная мысль: может обьем ставится в 0 когда заявку отменяют? Тогда почему сохранение на диск ругается на такие заявки?
Объем в ОЛ - это объем операции. Ни регистрация ни снятие ни сведение не может иметь нулевой объем. Что-то у вас в данных, которые приходят... SampleGUI нормально работает с хранилищем?
SampleGUI не использует хранилище вроде, если только я сам в коде не напишу. Тут стакан у SampleGUI совершенно неправильно считается, прикрепил фотку. По мере того, как скачиваются OrderLogItems стакан все больше и больше накапливает ошибку.
Версия с транка так же ведет себя?
Да, с транка также. Кстати, если к тестовому серверу коннектиться, то вроде стакан правильно строится (и dev, и trunk). У меня версия исходников stocksharp-18055
А нет, вру, на тестовом также стакан глючит, но меньше
SampleGUI с Release 4.1.1 версии, вроде не вижу ошибок в стакане. Я себе в робота запихал самые последние библиотеки 4.1.2, а они походу глючные. Завтра откачу до релиз 4.1.1 и посмотрю что там.
День добрый.
1) Уважаемые, что получилось в итоге? Быстрее формировать стакан из лога или получать обычным способом? Или самому надо тестировать? 🙄
2) И второй вопрос. Откуда лучше брать BestBid и BestAsk? Под лучше, я имею ввиду где меньшая задержка от биржы. Насколько я понимаю, сейчас есть три варианта (например, для фьючерсов):
а) через поток FORTS_FUTAGGR5_REPL. Правильно ли я понимаю, что этому потоку соответствует MarketDepth.BestAsk и MarketDepth.BestBid?
б) через поток FORTS_FUTCOMMON_REPL Правильно ли я понимаю, что этому потоку соответствует Security.BestBid и Security.BestAsk?
в) через формирование стакана из ОрдерЛога. Правильно ли я понимаю, что в этом случае аналогично варианту а) надо использовать MarketDepth.BestAsk и MarketDepth.BestBid?
Михаил, Алекс, можете ответить на вопросы? 🙂 Или кто другой может знает?
Уважаемые коллеги,
Обращаем Ваше внимание на изменение в порядке предоставления услуги "полный журнал заявок".
С 17.04.2012 начата передача анонимного лога заявок в отдельном потоке FORTS_ORDLOG_REPL с таблицами orders_log, multileg_orders_log, sys_events, так же следует обратить внимание на объединение данных по фьючерсным и опционным заявкам в одной таблице.
С 20.07.2012 отключается передача полного анонимного журнала заявок в потоках FORTS_FUTTRADE_REPL и FORTS_OPTTRADE_REPL, таблицы orders_log, multileg_orders_log.
Начиная с 23.07.2012 в данных таблицах останутся только Ваши собственные заявки. Всем пользователям данной услуги необходимо убедится в том, что к 20.07.2012 вы получаете полный журнал заявок из нового потока FORTS_ORDLOG_REPL, обратная совместимость не сохраняется!
Что делать??
Переходить полностью на StockSharp если вы этого ещё не сделали. Поток FORTS_ORDLOG_REPL мы поддержали уже давно, когда другие об этом даже и не думали.
Я и так "полностью на StockSharp"=) Вы хотите сказать, что StockSharp уже давно получает полный ордер лог из потока FORTS_ORDLOG_REPL, потому никаких изменений в программу вносить не надо?
Да
они обновляются вместе
Формирую стакан по Order Log (trader.CreateDepthFromOrdersLog = true). В стратегию добавляют событие Security.WhenNewOrderLogItems(). Первая обработка события соответствует первой поступившей строке Order Log. Стакан должен быть еще не сформирован. Тем не менее Security.GetMarketDepth().Bids и Security.GetMarketDepth().Asks показывают множество значений. Вопрос, откуда они берутся? Может быть, начальное состояние стакана генерируется случайно, а дальше идет его обновление по Order Log? Или, может быть, первые несколько событий не срабатывают, и за это время формируется стакан?
Для контроля я попробовал не формировать стакан из лога (trader.CreateDepthFromOrdersLog = false), и тогда при первом вызове события Security.WhenNewOrderLogItems(), получаю, как это и должно быть ночью на выходных, пустой стакан.
Доброго дня! Помогите пожалуйста разобраться с одной проблемой. Подключаюсь к тестовому серверу с помощью Плазы 2. Запускаю SampleGui последней редакции 4.1.6. Начинаю получать сделки, инструменты, стаканы по ним, могу отправить заявку, снять ее и даже сделать сделку, НО совершенно никак не реагирует программа на событие Trader.NewOrderLogItems += items => items.ForEach(_ordersLogWindow.AddOperation); То есть можно поставить там брейкпоинт, но на него мы никогда не упадем. Я пишу именно про СемплГуи, так как попытался сначала сам подписаться в своем проекте на получение ОЛ, но у меня ничего не получилось - подумал, что делаю что-то не так, но и в вашем примере к сожалению это не работает тоже. Потом я подумал, что все дело в тестовом сервере, но потом наткнулся на эту тему - тут как раз выше человек пишет, что СемплГуи даже версии 4.1.1 у него работает на тестовом сервере, хотя эта версия у меня тоже не реагирует на события нового ордерлогайтима. Помогите пожалуйста разобраться - что может быть не так? И только у меня одного не работает получение изменений ордерлога на тестовом? Может быть все таки проблема в самом тестовом сервере и оттуда просто не транслируется данная информация? Спасибо.