← Zurück

Лог заявок (full order log -> анонимный order log)

Добавил эту поддержку несколько дней назад. Сейчас данные транслируются как заявки и собственные сделки с анонимным портфелем. Появилось желание сделать опцию для построения стаканов из лог заявок. Сделал и это, но не до конца. Стакан строится как-то криво, с захлестами бидов на офферов. Если есть желание у кого-то, милости прощу доделать.

Kommentare (45)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

Alexander
Alexander

Вчера начал заниматься этим, но не закончил. Столкнулся со следующими проблемами:

  1. Первоначально, до начала сессии, стакан уже некий существует - его надо получить и именно им инициализировать стакан инструмента.
  2. Далее начинается анализ потока заявок - есть 3 статуса - а) добавлена б) отменена в) сведена в сделку.

а) Заявка может быть добавлена с любой абсолютно ценой. К примеру, у нас в стакане офер на 11, бид на 9. Мы легко можем послать заявку бай с ценой 15. тогда в ордер_лог будет как раз: <добавлена> 15 Нам же для этого случая (цена > офера) не надо добавлять бид с ценой 15, нам надо просто запомнить что такая заявка есть. Иначе у нас поплывёт весь стакан и мы неправильно будем дальше его строить - Лучший_бид \ лучший_аск, биды, аски будут абсолютно неверными.

б) Отменена - тут всё понятно - просто cancel, удаляем нужный объём.

в) Сведена - тоже понятно, просто уменьшаем на сведённый объём.

Есть вопрос по реализации пункта 1) и по тому как корректно реализовать 2а). Свой вариант для 2а) положил на codeplex, но считаю его далеко не оптимальным.

И самый главный вопрос - так ли нам нужно построение стакана по полному ордер_логу? Слишком он большой для прокачки. Если включаем не с начала дня, то прокачивает с час.

Alexander
Alexander

С помощью Limfocit добавлена поддержка построения стакана по полному ордер логу. 😎

transdex
transdex

Alexander Mukhanchikov: С помощью Limfocit добавлена поддержка построения стакана по полному ордер логу. 😎

Ну и как, сильно отличается от стакана, построенного обычным образом?

Mikhail Sukhov
Mikhail Sukhov Autor

transdex: Ну и как, сильно отличается от стакана, построенного обычным образом?

Скажу как чайник. Мельтешит так, что пришлось в примере снова сделать интервальное обновление стакана. Иначе просто зависало.

Liberal
Liberal

Alexander Mukhanchikov: С помощью Limfocit добавлена поддержка построения стакана по полному ордер логу. 😎

Не могли бы показать место в документации, с функциями построения стаканов по ордер логу? Есть ли возможность по логу заявок, скачанному вот отсюда: http://ftp.rts.ru/pub/info/historical_data/ строить стаканы? Я в процессе написания соответствующего кода, но что-то нет уверенности в его корректной работе.

Alexander
Alexander

Liberal:

Alexander Mukhanchikov: С помощью Limfocit добавлена поддержка построения стакана по полному ордер логу. 😎

Не могли бы показать место в документации, с функциями построения стаканов по ордер логу? Есть ли возможность по логу заявок, скачанному вот отсюда: http://ftp.rts.ru/pub/info/historical_data/ строить стаканы? Я в процессе написания соответствующего кода, но что-то нет уверенности в его корректной работе.

PlazaTrader.CreateDepthFromOrdersLog

transdex
transdex

Так Вы что, каждую заявку отдельно обрабатываете? Т.е. не так как в ядре РТС?

Alexander
Alexander

transdex: Так Вы что, каждую заявку отдельно обрабатываете? Т.е. не так как в ядре РТС?

приходит ордер лог - он обрабатывается от стакана построенного обычным образом ничем не отличается и отличаться кроме скорости и синхронизации с заявками не должно

transdex
transdex

Alexander Mukhanchikov: приходит ордер лог - он обрабатывается Давайте точнее выражаться. Приходит отдельные заявки или пакеты (очереди заявок)за некоторый интервал времени?

Alexander
Alexander

transdex:

Alexander Mukhanchikov: приходит ордер лог - он обрабатывается Давайте точнее выражаться. Приходит отдельные заявки или пакеты (очереди заявок)за некоторый интервал времени?

приходит новая порция данных по таблице ордер_лога от биржи. она обрабатывается, соответствующим образом меняется стакан

если интересно ещё точнее - подпишитесь на событие добавление новой записи в таблицу ордер лога и смотрите что присылает биржа.

Mikhail Sukhov
Mikhail Sukhov Autor

transdex: Так Вы что, каждую заявку отдельно обрабатываете? Т.е. не так как в ядре РТС?

Если учитывать, что ядро РТС строит стаканы так, что оно по тайм стемпу не совпадает со сделками, то да, мы не так как в РТС😀

transdex
transdex

Мой интерес отнюдь не праздный. Порожден он призывами ( раздающимися на некоторых форумах - rts.ru, smart-lab.ru) запретить Full_Order_Log как Вселенское зло, ибо он позволяет куклу видеть будущее и обижать маленьких. С другой стороны, по моим прикидкам (на РТС не работаю, тонких деталей не знаю, могу и ошибаться) возможен вариант, что ордерлог это просто лог, т.е. история построения текущего агрегированного стакана. Соответственно стакан построенный по ордерлогу будет (в среднем) отставать от текущего агрегированного стакана. Хотя и мельтешит.

Mikhail Sukhov
Mikhail Sukhov Autor

transdex: Соответственно стакан построенный по ордерлогу будет (в среднем) отставать от текущего агрегированного стакана.

Про Ахиллеса и черепаху слышали?

transdex
transdex

Mikhail Sukhov: Про Ахиллеса и черепаху слышали?

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

vlad1024
vlad1024

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

transdex
transdex

vlad1024: обычно орделог это и есть первичная информация по которой сводятся заявки и которую отдает ядро, а стаканы вообще может сводить уже брокер и раздавать клиентам, по крайней мере такая ситуация на многих западных площадках. Вопрос в том - когда отдает ядро? Раньше чем агрегированый стакан или одновременно? Одновременно - значит в конце интервала накопления ордеров они обрабатываются ядром практически мгновенно и наступает момент рассылки анонимных данных - одновременно уходит пачка апдейтов переводящих предыдущее состояние агрегированного стакана в текущее, пачка ордеров, обработка которых на месте также переводит предыдущее состояние стакана в текущее и пачка сделок меченных одним временем.

Alexander
Alexander

transdex:

vlad1024: обычно орделог это и есть первичная информация по которой сводятся заявки и которую отдает ядро, а стаканы вообще может сводить уже брокер и раздавать клиентам, по крайней мере такая ситуация на многих западных площадках. Вопрос в том - когда отдает ядро? Раньше чем агрегированый стакан или одновременно? Одновременно - значит в конце интервала накопления ордеров они обрабатываются ядром практически мгновенно и наступает момент рассылки анонимных данных - одновременно уходит пачка апдейтов переводящих предыдущее состояние агрегированного стакана в текущее, пачка ордеров, обработка которых на месте также переводит предыдущее состояние стакана в текущее и пачка сделок меченных одним временем.

мне кажется проще самому сделать быстрый тест получения стакана и всё встанет на свои места,подобные вопросы отпадут

Макс
Макс

А в тестовом доступе на Плазу транслируется FullOrderLog ?

Alexander
Alexander

Макс: А в тестовом доступе на Плазу транслируется FullOrderLog ?

да

Макс
Макс

Alexander Mukhanchikov:

Макс: А в тестовом доступе на Плазу транслируется FullOrderLog ?

да Есть ли пример или описание как получить доступ к нему (FullOrderLog через s#)?

Alexander
Alexander

Макс:

Alexander Mukhanchikov:

Макс: А в тестовом доступе на Плазу транслируется FullOrderLog ?

да Есть ли пример или описание как получить доступ к нему (FullOrderLog через s#)?

SampleGui

FiNick
FiNick

Alexander Mukhanchikov:

Макс: А в тестовом доступе на Плазу транслируется FullOrderLog ?

да

Версия 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.

Mikhail Sukhov
Mikhail Sukhov Autor

FiNick: Версия 4.1.1. Подключаюсь к тестовому контуру.

SampleGUI так же себя ведет?

VirKato
VirKato

Два вопроса: 1)После объединения micex предоставляет full order log по основной площадке? 2)Где можно купить ордер лог по фондовой секции micex (интересуют синие чипсы)? Спасибо!

Alexander
Alexander

нет \ нигде, нет в природе. по крайней мере в открытом доступе для покупки

VirKato
VirKato

т.е. максимум, что провайдит micex это обычный стакан который мы видим в квике? http://rts.micex.ru/a235

ММВБ Уровень 2 Информация о сделках и очереди заявок (стакан) по рынкам ММВБ: индексы, фондовый рынок, государственные облигации, срочный рынок, валютный рынок, товарный рынок.

FiNick
FiNick

SampleGUI вроде нормально, попробую разобраться. Но гидра глючит

Mikhail Sukhov
Mikhail Sukhov Autor

FiNick: SampleGUI вроде нормально, попробую разобраться. Но гидра глючит

У нас она работает на ОЛ.

FiNick
FiNick

А что вообще делает метод trader.RegisterOrderLog?? Что он есть, что нету, разницы не вижу.

Кстати, написал свою программку, которая собирает OrderLogItems. При попытке сохранить OrderLogItems в хранилище возникает та же ошибка, что и у Гидры: вроде как встречаются ордера с обьемом 0. Попробую их отфильтровать.

Вопрос: разве никто не тестировал гидру на сохранение OrderLogItems? Только у меня эта ошибка?

FiNick
FiNick

Не получается отфильтровать. Та же ошибка: Ошибка | Неправильный объем заявки. Parameter name: items Actual value was 0.

Ошибка возникает при попытке сделать storage.GetOrderLogStorage(rFut, dataPath).Save(OLItems). Какой конкретно OrderLogItem ему не нравится не понятно, и что это за параметр items тоже не понятно. Гидра на этом же падает.

FiNick
FiNick

Заметил вот такую вот ерунду: из 10000 первых OrderLogItems за сегодня, у 380 через некоторое время Order'а сменили обьем, 344 из них сменили обьем на 0. Соответственно в итоговом списке, который я собираюсь сохранить на жесткий диск через storage.GetOrderLogStorage.Save оказалась куча ордеров с обьемом 0, и сохранение вылетает с ошибкой! Тут мне пришла гениальная мысль: может обьем ставится в 0 когда заявку отменяют? Тогда почему сохранение на диск ругается на такие заявки?

Mikhail Sukhov
Mikhail Sukhov Autor

FiNick: Заметил вот такую вот ерунду: из 10000 первых OrderLogItems за сегодня, у 380 через некоторое время Order'а сменили обьем, 344 из них сменили обьем на 0. Соответственно в итоговом списке, который я собираюсь сохранить на жесткий диск через storage.GetOrderLogStorage.Save оказалась куча ордеров с обьемом 0, и сохранение вылетает с ошибкой! Тут мне пришла гениальная мысль: может обьем ставится в 0 когда заявку отменяют? Тогда почему сохранение на диск ругается на такие заявки?

Объем в ОЛ - это объем операции. Ни регистрация ни снятие ни сведение не может иметь нулевой объем. Что-то у вас в данных, которые приходят... SampleGUI нормально работает с хранилищем?

FiNick
FiNick

SampleGUI не использует хранилище вроде, если только я сам в коде не напишу. Тут стакан у SampleGUI совершенно неправильно считается, прикрепил фотку. По мере того, как скачиваются OrderLogItems стакан все больше и больше накапливает ошибку.

Mikhail Sukhov
Mikhail Sukhov Autor

FiNick: SampleGUI не использует хранилище вроде, если только я сам в коде не напишу. Тут стакан у SampleGUI совершенно неправильно считается, прикрепил фотку. По мере того, как скачиваются OrderLogItems стакан все больше и больше накапливает ошибку.

Версия с транка так же ведет себя?

FiNick
FiNick

Да, с транка также. Кстати, если к тестовому серверу коннектиться, то вроде стакан правильно строится (и dev, и trunk). У меня версия исходников stocksharp-18055

А нет, вру, на тестовом также стакан глючит, но меньше

FiNick
FiNick

SampleGUI с Release 4.1.1 версии, вроде не вижу ошибок в стакане. Я себе в робота запихал самые последние библиотеки 4.1.2, а они походу глючные. Завтра откачу до релиз 4.1.1 и посмотрю что там.

Maxim
Maxim

День добрый.

1) Уважаемые, что получилось в итоге? Быстрее формировать стакан из лога или получать обычным способом? Или самому надо тестировать? 🙄

2) И второй вопрос. Откуда лучше брать BestBid и BestAsk? Под лучше, я имею ввиду где меньшая задержка от биржы. Насколько я понимаю, сейчас есть три варианта (например, для фьючерсов):

а) через поток FORTS_FUTAGGR5_REPL. Правильно ли я понимаю, что этому потоку соответствует MarketDepth.BestAsk и MarketDepth.BestBid?

б) через поток FORTS_FUTCOMMON_REPL Правильно ли я понимаю, что этому потоку соответствует Security.BestBid и Security.BestAsk?

в) через формирование стакана из ОрдерЛога. Правильно ли я понимаю, что в этом случае аналогично варианту а) надо использовать MarketDepth.BestAsk и MarketDepth.BestBid?

Maxim
Maxim

Maxim: День добрый.

1) Уважаемые, что получилось в итоге? Быстрее формировать стакан из лога или получать обычным способом? Или самому надо тестировать? 🙄

2) И второй вопрос. Откуда лучше брать BestBid и BestAsk? Под лучше, я имею ввиду где меньшая задержка от биржы. Насколько я понимаю, сейчас есть три варианта (например, для фьючерсов):

а) через поток FORTS_FUTAGGR5_REPL. Правильно ли я понимаю, что этому потоку соответствует MarketDepth.BestAsk и MarketDepth.BestBid?

б) через поток FORTS_FUTCOMMON_REPL Правильно ли я понимаю, что этому потоку соответствует Security.BestBid и Security.BestAsk?

в) через формирование стакана из ОрдерЛога. Правильно ли я понимаю, что в этом случае аналогично варианту а) надо использовать MarketDepth.BestAsk и MarketDepth.BestBid?

Михаил, Алекс, можете ответить на вопросы? 🙂 Или кто другой может знает?

FiNick
FiNick

Уважаемые коллеги,

Обращаем Ваше внимание на изменение в порядке предоставления услуги "полный журнал заявок".

С 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, обратная совместимость не сохраняется!

Что делать??

Alexander
Alexander

FiNick: Уважаемые коллеги,

Обращаем Ваше внимание на изменение в порядке предоставления услуги "полный журнал заявок".

С 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 мы поддержали уже давно, когда другие об этом даже и не думали.

FiNick
FiNick

Я и так "полностью на StockSharp"=) Вы хотите сказать, что StockSharp уже давно получает полный ордер лог из потока FORTS_ORDLOG_REPL, потому никаких изменений в программу вносить не надо?

Alexander
Alexander

Да

Alexander
Alexander
  1. Я не сравнивал. По моим предположениям - чётко что одно быстрее другого не будет. Когда как
  2. security.BestBid \ security.BestAsk или marketdepth.BestBid \ marketDepth.BestAsk

они обновляются вместе

Liberal
Liberal

Формирую стакан по Order Log (trader.CreateDepthFromOrdersLog = true). В стратегию добавляют событие Security.WhenNewOrderLogItems(). Первая обработка события соответствует первой поступившей строке Order Log. Стакан должен быть еще не сформирован. Тем не менее Security.GetMarketDepth().Bids и Security.GetMarketDepth().Asks показывают множество значений. Вопрос, откуда они берутся? Может быть, начальное состояние стакана генерируется случайно, а дальше идет его обновление по Order Log? Или, может быть, первые несколько событий не срабатывают, и за это время формируется стакан?

Для контроля я попробовал не формировать стакан из лога (trader.CreateDepthFromOrdersLog = false), и тогда при первом вызове события Security.WhenNewOrderLogItems(), получаю, как это и должно быть ночью на выходных, пустой стакан.

FlashPlayer
FlashPlayer

Доброго дня! Помогите пожалуйста разобраться с одной проблемой. Подключаюсь к тестовому серверу с помощью Плазы 2. Запускаю SampleGui последней редакции 4.1.6. Начинаю получать сделки, инструменты, стаканы по ним, могу отправить заявку, снять ее и даже сделать сделку, НО совершенно никак не реагирует программа на событие Trader.NewOrderLogItems += items => items.ForEach(_ordersLogWindow.AddOperation); То есть можно поставить там брейкпоинт, но на него мы никогда не упадем. Я пишу именно про СемплГуи, так как попытался сначала сам подписаться в своем проекте на получение ОЛ, но у меня ничего не получилось - подумал, что делаю что-то не так, но и в вашем примере к сожалению это не работает тоже. Потом я подумал, что все дело в тестовом сервере, но потом наткнулся на эту тему - тут как раз выше человек пишет, что СемплГуи даже версии 4.1.1 у него работает на тестовом сервере, хотя эта версия у меня тоже не реагирует на события нового ордерлогайтима. Помогите пожалуйста разобраться - что может быть не так? И только у меня одного не работает получение изменений ордерлога на тестовом? Может быть все таки проблема в самом тестовом сервере и оттуда просто не транслируется данная информация? Спасибо.