Блог им. vlad1024

Один день из жизни Ri. Или введение в микроструктурный анализ

Для большинства трейдеров свечные графики различного таймфрейма это и есть рынок, там скрывается все — и тренд и боковик и хитрый маркет мэйкер с глобальным кукловодом. Начнем с простых фактов, за одну сессию 2012.11.07 на фьючерсе Ri ядро биржи обработало 10 449 043 транзакций или примерно 12 000 транзакций в минуту, одна свечка самого «высоко частотного» минутного таймфрема скрывает за собой огромное количество более элементарных действий. Поэтому мы спустимся на самый низкий уровень того, что происходит на бирже и начнем оттуда.

    Можно долго рассказывать про то как устроена биржа, про промежуточные сервера и другие части «транспортной» инфракстуры, какие задержки они вносят при путешествии заявки, но в конце пути любая заявка попадает в ядро биржие, где непосредственно происходит то ради чего все собственно и затевалось — сведение(matching). И на этом уровне, в смысле формата данных и производимых элементарных действий, FORTS мало чем отличается от той же CME или любой другой современной биржи. Входной поток состоит из заявко двух типов, на вставку(insert) и отмену(cancel). Бьете вы по рынку или выставляете заявку в глубь стакана — для ядра нет разницы, все это в конечном итоге преобразуется в заявку на вставку, которой присваивается свой уникальный идентификатор. Другой тип заявок — на отмену, позволяет убрать часть(или всю) предшествующей заявки на вставку. Ядро принимая на входе поток состоящий из заявок на вставку и отмену, создает поток сведенных сделок, каждая сведенная сделка связана с двумя заявками участвующих в сделке. Исходя из полученного потока, затем строятся стаканы, и тиковые данные(сведенные сделки), которые рассылаются пользователям(к примеру на RTS срезы стаканов строятся с периодичностью 30 миллисекунд), и лишь затем тики преобразуются в красивые свечки, отображаемые на экране. Поток данных содержащий заявки на вставку, отмену и сведенные сделки, на FORTS называется Full Order Log.


    Рассмотрим более подробно формат данных Full Order Log. Возьмем для примера маленький, кусочек:



QUOTE  TYPE    TIMESTAMP      SESSION    ORDER_ID  STATUS ACTION PRICE  VOL  DEAL_ID DEAL_PRICE
['riz2',  1, 1352315357375000, 20121107, 9368447574, 101401, 1, 141870.0, 1,,]
['riz2', -1, 1352315357380000, 20121107, 9368447558, 100001, 0, 141900.0, 3,,]
['riz2', -1, 1352315357380000, 20121107, 9368447580, 101401, 1, 141890.0, 3,,]
['riz2', -1, 1352315357381000, 20121107, 9368447559, 100001, 0, 141890.0, 2,,]
['riz2', -1, 1352315357381000, 20121107, 9368447581, 101401, 1, 141880.0, 2,,]
['riz2',  1, 1352315357381000, 20121107, 9368447507, 100001, 0, 141840.0, 4,,]
['riz2',  1, 1352315357381000, 20121107, 9368447582, 101401, 1, 141860.0, 4,,]
['riz2',  1, 1352315357384000, 20121107, 9368447522, 100001, 0, 141850.0, 8,,]
['riz2',  1, 1352315357384000, 20121107, 9368447586, 101401, 1, 141860.0, 8,,]<- A 
['riz2',  1, 1352315357386000, 20121107, 9368447255, 201401, 0, 141850.0, 2,,]
....
['riz2', 1, 1352315358149000, 20121107, 9368447396,      1, 2, 141860.0, 2, 657525271, 141860.0]
['riz2', 1, 1352315358149000, 20121107, 9368447454,      1, 2, 141860.0, 2, 657525272, 141860.0]
['riz2', 1, 1352315358149000, 20121107, 9368447586,      1, 2, 141860.0, 1, 657525273, 141860.0] <- B
['riz2',-1, 1352315358149000, 20121107, 9368447766,    402, 1, 134840.0, 5, ,,] <- C
['riz2',-1, 1352315358149000, 20121107, 9368447766,      2, 2, 134840.0, 2, 657525271, 141860.0]
['riz2',-1, 1352315358149000, 20121107, 9368447766,      2, 2, 134840.0, 2, 657525272, 141860.0]
['riz2',-1, 1352315358149000, 20121107, 9368447766,   1002, 2, 134840.0, 1, 657525273, 141860.0] <- D
['riz2', 1, 1352315358189000, 20121107, 9368447761, 100001, 0, 141840.0, 4, ,,]
['riz2', 1, 1352315358189000, 20121107, 9368447770, 101401, 1, 141860.0, 4, ,,]

   QUOTE — содержит название инструмента, TYPE — направление заявки (+1 — bid, -1 — ask), TIMESTAMP — временная метка в микросекундах, SESSION — идентификатор сессии, ORDER_ID — идентификатор заявки, STATUS — флаги заявки, ACTION — тип заявки (0 — отмена, 1 — вставка, 2 — сведенная сделка), PRICE — цена, VOL — объем заявки, DEAL_ID — идентификатор сделки, DEAL_PRICE — цена сделки.
На примере выше показан цикл жизни заявки, вставка заявки c идентификатором 9368447586 в поток (A), вставка встречной заявки (C, первая сторона сведенной сделки (B) и вторая сторона (D).

   Теперь, немного разобравшись в формате данных, можно приступить к статистическому анализу. Всего за сессию было произведено 10 449 043 транзакций, из них 4 990 732 на вставку, и 4 362 829 на отмену, а сведено сделок — 1 095 482. То есть «в среднем по больнице» на каждую сделку приходилось 4 перестановки. Следующий вопрос, который возникает — каким образом данная активность распределена по объемам. Для этого посчитаем следующие факторы — количестов вставок и отмен для заданного объема, отношение отмененых заявок к выставленным, чем меньше это соотношение тем больше количество сделок сведено на каждую вставленную заявку, тогда умножив соотношение на количество вставленных заявок, мы получим количество проторгованных заявок для данного объема заявки. В результате получим следующую табличку, отсортированную по столбцу проторгованного объема(для анализа использовался python + scipy):

Один день из жизни Ri. Или введение в микроструктурный анализ

 cancel_volume, insert_volume — объем в заявке на вставку или отмену, cancel_count — количество отмен, insert_count — количество вставок, ratio — соотношение, trade_volume — оценка проторгованного объема в контрактах. Как видно, объемы заявок на вставку, можно условно разделить на две группы, small-volume traders с диапазоном объема 1-10 — высокочастотные трейдеры и скальперы, и всех остальных, как видно во второй группе, значения проторгованного объема кучкуются вокруг «психологических» уровней заявок — 15, 20, 25, 30, 50, 100, 200, 500.

Код на питоне

Разработка роботов обучение Stocksharp
Клуб алготрейдеров
Продолжение следует…
★38
20 комментариев
не понял… лонг или шорт?
avatar
Какая практическая польза? Поясните плиз.
avatar
Александр Некрасов, для кругозора. мне интересно.
avatar
Renat1, Я не говорю.что плохо, просто мне непонятно, вот и спрашиваю.
avatar
Александр Некрасов, да сложно сказать, это примерно что спросить, какая практическая польза от алгебры или физики.
avatar
vlad1024, Как вы используете?
avatar
Александр Некрасов, напрямую никак, это просто небольшая часть «мозайки» рынка, весь смысл, в том что оргнаническим образом, данные разбились на две группы трейдеров, на скальперов/hft, и тех кто оперирует крупными объемами, которые привязаны к «человеческим» значениям. ради интереса по приведенной таблички можно еще посчитать какой процент тех и других в проторгованном объеме, соответственно они и будут «делать рынок» )
avatar
vlad1024, Спасибо за ответ.Удачи.
avatar
Роман Некрасов, +~4000 на прямом подключении
avatar
avatar
Роман Некрасов, будет что-то в этом духе, а что за ценовые уровни, ну тоесть как их алгоритмически определить? можно еще смотреть «круглые» уровни и какой эффект от них.
avatar
Роман Некрасов, Роман Некрасов, вы хотите понять каким алгоритмом крупняк манипулирует шурудя в стакане?
avatar
vlad1024, я на подобные исследования убил довольно много времени. Анализировал и ордерлог, и преобразованные данные по ммвб в ордерлог. Были и свои индикаторы, которые строились по ордерлогу, и аналог футпринта по заявкам, и слежка за сдвигами заявок, и анализ действий ММ по заявкам, которыми он выполняет обязательства (к стати, совсем тупиковый путь, так, как будучи ММ я сравнивал отчеты биржи по сделкам с ММ и своим прогнозам — разница колоссальная), и еще много чего.

Не знаю, как у Вас, но мне интересные сигналы получить из ордерлога удалось, сделать алгоритм с матожиданием>0 нет.

По этому использую ордерлог только для моделирования рынка при тестировании страт. К сожалению.
avatar
Lafert, ну, ордерлог это первичные самые подробные данные, ничего лучше не найти, так что есть определенный смысл в анализировании именно их, по поводу результатов трудно сказать, я вплотную ордерлогом не очень давно занялся, но к примеру HFT шники на западе получают данные от биржи именно в таком виде, и наверняка там что-то находят )
avatar
Lafert, ну хоть такая польза))) а соответствие реальной торговле высокое получается? 100%?
avatar
SMA, Сейчас там полное соответсвие не цель, на тесте робот в более жестких условиях, но все от страт зависит. Есть страты, где 95-100%. Есть, где меньше
avatar
Lafert, а можете пару идей подкинуть?
avatar
с недавних пор SEC предоставляет подобный анализ по американским площадкам

www.sec.gov/marketstructure/midas.html#.Uld9uCcQPgw

может наш «мегарегулятор» тоже когда-нибудь что-нибудь полезное начнет делать…
avatar
(это типа «тонкий» намек на возможный путь монетизации ваших талантов, влад:) т. к. sec например купила эту систему у tradeworks — после flashcrash и давления на них разных ребят типа nanex и пр. (типа какого буя регулятор нихрена даже не знает:)
avatar
karapuz, название сервиса намекает на то, что, обладая ослиными ушами, сек делает из всего золото
avatar

теги блога vlad1024

....все тэги



UPDONW
Новый дизайн