*** ВНИМАНИЕ: Блог переехал на другой адрес - demin.ws ***

четверг, 4 марта 2010 г.

Трейдинговые системы для чайников

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

Так как данная сфера деятельности активно развивается в англоязычном мире, то многие термины проще использовать без перевода, чтобы не потерять по дороге смысл.

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

Итак, для начала несколько простых определений.

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

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

Ценная бумага - это объект торговли (в английском языке это называется "security"). Типов ценных бумаг очень много (акции, облигации, валюта и т.д.). Я не буду вдаваться в объяснение их сути (для этого следует обраться к литературе по экономике), так как с точки зрения компьютерной системы каждая ценная бумага - это всего лишь идентификатор. Например, "GOOG US Equity" - это акции Гугла на Нью-Йоркской фондовой бирже, "VOD LN Equity" - это акции Vodafone на Лондонской бирже, "CT2 Govt" - это двухлетние государственные облигации правительства США и т.д. Таких идентификаторов тысячи, и в целом большинство электронных систем торговли стараются соблюдать уникальность данных идентификаторов во избежание путаницы при операции между различными платформами.

Каждая система может иметь (и обычно имеет) внутреннюю систему идентификации ценных бумаг для удобства их учета.

Сделка (или trade) - это факт покупки/продажи ценных бумаг. Сделка обычно имеет несколько базовых характеристик: дата/время, идентификатор ценной бумаги, сумма за единицу и количество купленных/проданных единиц ценной бумаги. Данный квант информации обычно называется tick (или feed). Именно поток таких тиков, получаемых в режиме реального времени с различных торговых платформ, и является основным источником различных сводок, диаграмм, графиков, бегущих строк и т.д., описывающих "состояние фондового рынка", по которым трейдеры принимают решение о том, что покупать или продавать, когда и почем.

Скорость поступления тиков может быть весьма высока (сотни или даже тысячи в секунду). Это объясняет, почему одним из важнейших показателей для трейдинговой системы является быстродействие. Чем быстрее обрабатываются входные данные, тем быстрее трейдер узнает об изменениях на рынке, и тем быстрее может принять решение. А для алгоритмического трейдинга (мы поговорим об это чуть ниже) - это вообще один из основных показателей. Это быстродействие может складывается из многих факторов: быстрота программного обеспечения, скорость информационных каналов (часто используются выделенные линии, а не публичные сети типа интернета), производительность аппаратного обеспечения и т.д.

Может так случиться, что из-за каких-то проблем в системе, из-за которой она работает очень медленно, может начаться попуск тиков (система не успевает их обрабатывать). В этом случаем требуется периодическая сверка обобщенных показателей, чтобы не отображать неверные данные.

Основные участники рынка ценных бумаг

Sell side (я оставлю этот термин без перевода) - это те, что ориентирован на перепродажу. Трейдеры - это типичные представители sell side. Обычно они не имеют своих активов. У них просто есть немного денег. В начале торгового дня они покупают что-то, а потом в течение дня могут перепродавать, покупать другое и т.д. В конце дня они обычно все стремятся распродать, даже если придется продать в убыток. Sell side обычно зарабатывает на быстрых дневных изменениях курсов, вызванных, например, неожиданными новостями.

Экономическая причина существования sell side - это, как в случае процессинговых систем, вопрос объема. То есть, нельзя просто так взять, и кому угодно подключиться к фондовой бирже, так как это стоит денег (депозиты, оборудование, сертификация, если потребуется и т.д.). Высокий ценовой ценз сделан для отсечения мелких клиентов (бирже не интересно возиться с клиентами, покупающими одну акцию в год). Последние должны будут пользоваться услугами более крупных трейдинговых фирм, и им уже придется платить комиссию.

Buy side - это "богатые" участники. Обычно это фонды, банки, страховые компании и т.д. По большому счету - это настоящие держатели ценных бумаг. Они их покупают помногу, с долгой перспективой, и обычно зарабатывают при росте цен (или теряют при их падении, такое тоже бывает) на длительном (несколько лет, например) интервале времени.

То есть в течение торгового дня sell side перепродает туда-сюда ценные бумаги от buy side, а к концу дня все снова фактически возвращается к buy side, и sell side имеет свою дневную разницу.

Конечно, такое разделение может быть весьма условным, и многие финансовые институты являются одновременно sell side и buy side. Но понимание этого различия весьма важно.

Рассмотрим некоторые важные части трейдинговой системы.

Мониторинг

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

Про новостные системы стоит сказать особо. Они состоят из нескольких уровней. После получения того или иного факта, на первом уровне новость ужимается в одно предложение из нескольких слов и тут же публикуется. Это позволяет для новостного провайдера выпустить новость очень быстро (буквально несколько минут), а для потребителя новости (например, трейдера), увидев новую строчку в новостной ленте (а не читать целый абзац) уловить суть и, если надо, начать действовать. Например, "ГАЗПРОМ снял генерального директора" или "Сбербанк объявил о банкротстве". Далее новость передается на следующий уровень, где пишется уже абзац или два с более детальным описанием. Тут уже может пройти час или два. Если изначальная новость была бомбой, то многие будут ждать этого описания, а если нет, то возможно никто ее и не станет читать. Ну а затем уже на третьем уровне много позже могут написать детальную аналитику, и, например, включить мнения экспертов на влияние новости на те или иные рынки, ценные бумаги и т.д.

Системы учета позиций и истории сделок

Этот механизм позволяет трейдеру вести учет своей дневной деятельности. Фактически, это журнал его действий: купил это за столько, продал это тому-то. Кажущаяся на первый взгляд утилитарность и простота данной системы на самом деле ошибочна. Система учета позиций и истории сделок позволяет трейдеру моментально видеть, сколько и на сколько он продал и купил, и каковы его цены по сравнению с другими участниками рынка. Кстати, множество сделок до сих пор совершаются просто по телефону, и такие сделки надо где-то фиксировать. И немаловажно, на этом уровне происходит контроль ограничений самого трейдера. Например, данный трейдер не может торговать в день не более такой-то суммы, или что нельзя уходить в долг на такой-то ценной бумаге более чем на столько, или если трейдер вводит сделку более такой-то суммы, то запрашивается разрешения его начальника и т.д. Система контроля может быть очень и очень изощренной.

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

Системы проведения сделок

Обычно, работа трейдера - это договориться о сделке. Электронно или по телефону - неважно. Проведение сделки обычно происходит после закрытия рынков. И этим занимается middle office. На данном этапе могут также проводиться дополнительные проверки активности трейдера.

Различные истории о трейдерах, нелегально что-то там наторговавших, обычно связаны именно с тем, что трейдер смог провести сделку без каких-то проверок, или нашел способ эти проверки обойти.

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

Анонимная торговля

Первым способом торговли может быть, когда трейдер напрямую покупает (или продает) у конкретного контрагента (например, у своего постоянного партнера).

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

Устройство электронного рынка для анонимной торговли

Электронный рынок обычно устроен по следующей схеме. Есть такое понятие, как "Market depth". Мне не очень нравится перевод "глубина рынка", поэтому я оставлю термин без перевода. "Market depth" - это таблица лучшего спроса и предложения на рынке для выбранной ценной бумаги. Выглядит она примерно так:

   Bid       Offer
---------+----------
Ц1 х К1  | Ц5 х К5
---------+----------
Ц2 х К2  | Ц6 х К6
---------+----------
Ц3 х К3  | Ц7 х К7
---------+----------
        ...
---------+----------
Ц4 х К4  | Ц8 х К8
---------+----------

Колонка Bid - это цены и объемы того, что люди хотят купить (список текущего спроса). Эта колонка отсортирована по убыванию цены:

Ц1 > Ц2 > Ц3 > ... > Ц4

То есть физический смысл этой колонки - это показать лучшие (= наибольшие) с точки зрения потенциального продавца цены (и возможные объемы) по данной ценной бумаге.

Допустим, ячейки "Ц1 х К1" пока нет, а на вершине колонки Bid находится "Ц2 х К2". Я, как участник рынка, говорю «я хочу купить ценную бумагу N по цене "Ц1" в количестве "К1"». Так как моя цена больше цены "Ц2", то моя заявка становится на вершину колонки.

Колонка "Offer" (или иногда ее называют "Ask") - это цены и объем того, что люди хотят купить (список текущих предложений). Эта колонка отсортирована по возрастанию цены:

Ц5 < Ц6 < Ц7 < ... < Ц8

Физический смысл этой колонки - это показать лучшие (= наименьшие) с точки зрения потенциального покупатели цены (и объемы) по данной ценной бумаге.

Далее начинается самое интересное. Как известно, спрос удовлетворяет предложение и наоборот. Так вот данная таблица и является механизмом сопоставления спроса и предложения.

Если я прихожу на рынок и говорю «я хочу купить ценную бумагу N по цене "Ц1" и количестве "К1"», система берет таблицу "Market depth" для ценной бумаги N и просматривает колонку "Offer".

Если какая-то цена совпадает с моей (например, "Ц6"), то система автоматически удовлетворяет мою заявку и продает мне нужное количество ценных бумаг N по цене "Ц1" (= "Ц6") и в количестве "К1". И ячейка "Ц1 х К1" не появляется в колонке спроса "Bid", так как мой спрос удовлетворен. Если мое запрошенное количество "К1" равно "К6", то строка "Ц6 х К6" удаляется из колонки предложений "Offer". Если мое количество "К1" меньше "К6", то строка "Ц6 х К6" остается в колонке, но из "К6" просто вычитается "К1". Ну а если же мое количество "К1" больше "К6", то строка "Ц6 х К6" удаляется из колонки "Offer" (это предложение полностью удовлетворено), а в колонке "Bid" появляется моя строка "Ц1 х К1", где "K1" отображается за вычетом "K6", то есть "Ц1 х K1-K6".

Аналогично, для продажи. Если я прихожу на рынок и говорю «я хочу продать ценную бумагу N по цене "Ц6" и количестве "К6"», система берет таблицу "Market depth" для ценной бумаги N и просматривает колонку "Bid".

Если какая-то цена совпадает с моей (например, "Ц2"), то система автоматически удовлетворяет мою заявку и покупает у меня нужное количество ценных бумаг N по цене "Ц6" (= "Ц2") и в количестве "К6". И ячейка "Ц6 х К6" не появляется в колонке спроса "Offer", так как моё предложение удовлетворено. Если мое запрошенное количество "К6" равно "К2", то строка "Ц2 х К2" удаляется из колонки предложений "Bid". Если мое количество "К6" меньше "К2", то строка "Ц2 х К2" остается в колонке, но из "К2" просто вычитается "К6". Ну а если же мое количество "К6" больше "К2", то строка "Ц2 х К2" удаляется из колонки "Bid" (этот спрос полностью удовлетворен), а в колонке "Offer" появляется строка "Ц6 х К6", где "K6" отображается за вычетом "K2", то есть "Ц6 х K6-K2".

По сути, таблица "Market Depth" отображает список пока еще неудовлетворенных спросов и предложений. Как только находится для спроса парное предложение или наоборот - между ними производится сделка (trade), и эта пара удаляется из таблицы (одна из сторон может после сделки таки остаться в таблице "Market Depth", если, как описано выше, не было полного совпадения по количеству).

Обычно "Market depth" отображает в среднем от 10 до 100 уровней цен по спросу и предложению. Больше нет особого смысла нет.

Кроме того, каждая ячейка данной таблицы может раскрываться списком заявок по цене. Что это значит? Например, ячейка "Ц1 х K2" может быть агрегированным по цене показателем, то есть количество "К1" является предложением не единственного покупателя, а многих (несколько покупателей могут хотеть купить по цене "Ц1"), но так как для продавца неважно, кому именно продавать (цена то все равно одна и та же, и система в целом анонимна), по умолчанию эта детализация может не отображаться.

Механизм сопоставления спроса и предложения по таблице "Market Depth" лежит в основе анонимного трейдинга, и так называемый алгоритмический трейдинг может быть построен на программировании логики автоматизированной торговли, основанной на анализе данных таблицы "Market Depth".

Для алгоритмического трейдинга система предоставляет программный интерфейс (API), который может быть, как вариант, скриптовым языком, например, Lua, с набором функций для просмотра таблиц "Market Depth" и для помещения в систему заявок на покупку или продажу. Логика же программируется автором скрипта.

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

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

Посты по теме:

4 комментария:

  1. Просто параллельный мир какой-то. "Вкалывают роботы, счастлив человек" (С) Приключения Электроника.
    Очень интересно, спасибо!

    ОтветитьУдалить
  2. А если я хочу купить дороже чем продается при том-же количестве то сделка не состоится? Или при заявке можно указывать "по минимальной цене при таком количестве" например?
    Спасибо за статью.интересно.

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

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

    ОтветитьУдалить