﻿<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type='text/css' href='https://stocksharp.ru/css/style.css'?>
<?xml-stylesheet type='text/css' href='https://stocksharp.ru/css/bbeditor.css'?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html">ri. StockSharp</title>
  <id>https://stocksharp.ru/handlers/atom.ashx?category=tag&amp;id=ri&amp;type=articles</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-06-03T13:16:13Z</updated>
  <logo>https://stocksharp.ru/images/logo.png</logo>
  <link href="https://stocksharp.ru/handlers/atom.ashx?category=tag&amp;id=ri&amp;type=articles" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.ru/topic/315/</id>
    <title type="text">Один день из жизни Ri. Или введение в микроструктурный анализ</title>
    <published>2013-10-10T11:26:28Z</published>
    <updated>2013-10-10T11:30:44Z</updated>
    <author>
      <name>vlad1024</name>
      <uri>https://stocksharp.ru/users/768/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="данные" />
    <category term="Ri" />
    <category term="Order log" />
    <category term="Статьи" />
    <content type="html">&lt;p&gt;Для большинства трейдеров свечные графики различного таймфрейма это и есть рынок, там скрывается все - и тренд и боковик и хитрый маркет мэйкер с глобальным кукловодом. Начнем с простых фактов, за одну сессию 2012.11.07 на фьючерсе Ri ядро биржи обработало 10 449 043 транзакций или примерно 12 000 транзакций в минуту, одна свечка самого &amp;quot;высоко частотного&amp;quot; минутного таймфрема скрывает за собой огромное количество более элементарных действий. Поэтому мы спустимся на самый низкий уровень того, что происходит на бирже и начнем оттуда.&lt;/p&gt;
&lt;p&gt;Можно долго рассказывать про то как устроена биржа, про промежуточные сервера и другие части &amp;quot;транспортной&amp;quot; инфракстуры, какие задержки они вносят при путешествии заявки, но в конце пути любая заявка попадает в ядро биржие, где непосредственно происходит то ради чего все собственно и затевалось - сведение(matching). И на этом уровне, в смысле формата данных и производимых элементарных действий, FORTS мало чем отличается от той же CME или любой другой современной биржи. Входной поток состоит из заявко двух типов, на вставку(insert) и отмену(cancel). Бьете вы по рынку или выставляете заявку в глубь стакана - для ядра нет разницы, все это в конечном итоге преобразуется в заявку на вставку, которой присваивается свой уникальный идентификатор. Другой тип заявок - на отмену, позволяет убрать часть(или всю) предшествующей заявки на вставку. Ядро принимая на входе поток состоящий из заявок на вставку и отмену, создает поток сведенных сделок, каждая сведенная сделка связана с двумя заявками участвующих в сделке. Исходя из полученного потока, затем строятся стаканы, и тиковые данные(сведенные сделки), которые рассылаются пользователям(к примеру на RTS срезы стаканов строятся с периодичностью 30 миллисекунд), и лишь затем тики преобразуются в красивые свечки, отображаемые на экране. Поток данных содержащий заявки на вставку, отмену и сведенные сделки, на FORTS называется Full Order Log.&lt;/p&gt;
&lt;p&gt;Рассмотрим более подробно формат данных Full Order Log. Возьмем для примера маленький, кусочек:
[code=cpp] 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,,] &amp;lt;- 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] &amp;lt;- B
['riz2',-1, 1352315358149000, 20121107, 9368447766,    402, 1, 134840.0, 5, ,,] &amp;lt;- 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] &amp;lt;- D
['riz2', 1, 1352315358189000, 20121107, 9368447761, 100001, 0, 141840.0, 4, ,,]
['riz2', 1, 1352315358189000, 20121107, 9368447770, 101401, 1, 141860.0, 4, ,,]
[/code]
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).&lt;/p&gt;
&lt;p&gt;Теперь, немного разобравшись в формате данных, можно приступить к статистическому анализу. Всего за сессию было произведено 10 449 043 транзакций, из них 4 990 732 на вставку, и 4 362 829 на отмену, а сведено сделок - 1 095 482. То есть &amp;quot;в среднем по больнице&amp;quot; на каждую сделку приходилось 4 перестановки. Следующий вопрос, который возникает - каким образом данная активность распределена по объемам. Для этого посчитаем следующие факторы - количестов вставок и отмен для заданного объема, отношение отмененых заявок к выставленным, чем меньше это соотношение тем больше количество сделок сведено на каждую вставленную заявку, тогда умножив соотношение на количество вставленных заявок, мы получим количество проторгованных заявок для данного объема заявки. В результате получим следующую табличку, отсортированную по столбцу проторгованного объема(для анализа использовался python + scipy):&lt;/p&gt;
&lt;p&gt;[code=cpp]   cancel_count  cancel_volume  insert_count  insert_volume     ratio    trade_volume&lt;br /&gt;
1176407              1       1452121              1  0.810130      275714&lt;br /&gt;
272998              5        327113              5  0.834568      270575&lt;br /&gt;
1257775              2       1369794              2  0.918222      224038&lt;br /&gt;
39698             10         55877             10  0.710453      161790&lt;br /&gt;
432361              4        470513              4  0.918914      152608&lt;br /&gt;
668395              3        718625              3  0.930103      150690&lt;br /&gt;
15002             20         20662             20  0.726067      113200&lt;br /&gt;
1455             50          3608             50  0.403271      107650&lt;br /&gt;
453            100          1404            100  0.322650       95100&lt;br /&gt;
201295              8        212359              8  0.947900       88512&lt;br /&gt;
21651             15         27185             15  0.796432       83010&lt;br /&gt;
99168              6        110608              6  0.896572       68640&lt;br /&gt;
1989             30          4107             30  0.484295       63540&lt;br /&gt;
4926             25          7438             25  0.662275       62800&lt;br /&gt;
1025            200          1310            200  0.782443       57000&lt;br /&gt;
37216             12         41715             12  0.892149       53988&lt;br /&gt;
68            500           172            500  0.395349       52000&lt;br /&gt;
17857              7         25274              7  0.706536       51919  [/code]&lt;/p&gt;
&lt;p&gt;cancel_volume, insert_volume - объем в заявке на вставку или отмену, cancel_count - количество отмен, insert_count - количество вставок, ratio - соотношение, trade_volume - оценка проторгованного объема в контрактах.&lt;/p&gt;
&lt;p&gt;Как видно, объемы заявок на вставку, можно условно разделить на две группы, small-volume traders с диапазоном объема 1-10 - высокочастотные трейдеры и скальперы, и всех остальных, как видно во второй группе, значения проторгованного объема кучкуются вокруг &amp;quot;психологических&amp;quot; уровней заявок - 15, 20, 25, 30, 50, 100, 200, 500.&lt;/p&gt;
&lt;p&gt;[url=http://pastebin.com/ZBqyiY0n]код на питоне[/url]
Продолжение следует...&lt;/p&gt;
</content>
  </entry>
</feed>