Добавил эту поддержку несколько дней назад. Сейчас данные транслируются как заявки и собственные сделки с анонимным портфелем. Появилось желание сделать опцию для построения стаканов из лог заявок. Сделал и это, но не до конца. Стакан строится как-то криво, с захлестами бидов на офферов. Если есть желание у кого-то, милости прощу доделать.
Kommentare (45)
Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen
Вчера начал заниматься этим, но не закончил. Столкнулся со следующими проблемами:
а) Заявка может быть добавлена с любой абсолютно ценой. К примеру, у нас в стакане офер на 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 у него работает на тестовом сервере, хотя эта версия у меня тоже не реагирует на события нового ордерлогайтима. Помогите пожалуйста разобраться - что может быть не так? И только у меня одного не работает получение изменений ордерлога на тестовом? Может быть все таки проблема в самом тестовом сервере и оттуда просто не транслируется данная информация? Спасибо.