Pull to refresh

Поверхностно об основах рыночной архитектуры и алготрейдинге

Algorithms
Sandbox
Tutorial
Многие знают, что одно из первых, что говорят в техническом ВУЗе — забыть все, что проходили в школе. Данная рекомендация актуальна и здесь. Полезно иногда с чистого листа начать.

На данный момент все рынки автоматизированы. По этой причине какие-то экономические объяснения ценообразования являются некими рудиментами. Рулят алгоритмы + некое ручное вмешательство.

Задача каждого торгового алгоритма всегда одна и та же — принести денег владельцу. Алгоритм тем лучше, чем больше денег он в состоянии принести.

Маркетмейкеры


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

Представьте, что у вас задача создать новый символ для торговли. Пусть есть люди, которые по какой-то причине хотят его торговать. Что требуется от вас? Вам нужно в любой момент формировать из своих заявок Level2 вашего символа. Т.е. наполнить символ ценами и ликвидностью. Вначале можно сделать совсем тупой ММ-алгоритм — Level2 не меняется. Т.е.клиент купил или продал, после чего вы добавили ликвидности до исходного Level2. Очевидно, что такой алгоритм будет давать владельцу постоянно деньги. Но проблема в том, что люди не полные идиоты, и на символе-константе торговать не станут — нет даже потенциальной возможности им заработать.

Значит надо как-то людишек заставить совершать сделки. Следующий тупейший ММ-алгоритм может быть простой синусойдой — Level2 ходит то вверх, то вниз. Многие люди будут также сливать, но найдутся гении, которые увидят закономерность и начнут нагибать владельца ММ-алгоритма.

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

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

Т.е. вы понимаете, что маркетмейкером можете быть даже вы, нужен только хороший ММ-алгоритм и решение некоторых организационных вопросов.
Попробуем пошагово смоделировать на своем компьютере биржевой (самый простой вариант) замкнутый рынок (из одного ФИ).

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

Как запустить тысячи роботов, чтобы они начали между собой торговать?

Зададим начальный уровень (не цену) средней цены — единица. Запустим сначала роботов, которые выставляют сразу лимитные заявки. Начнется формирование истории цен Bid и Ask. Какое-то время не будет никаких сделок, но цены при этом будут двигаться по любой траектории.

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

Запускаем роботов, которые на основании сформированной истории делают свое грязное дело — торгуют. Пошли сделки. Роботы, что выставляли лимитные заявки, могут слить. Тогда исчезнет цена и все застопорится. Придется определенным таким роботам дать несоизмеримо высокий капиталл (это значительно увеличит начальную (50/50) вероятность заработка), по сравнению с остальными. Назовем таких роботов ММ-роботами. И в алгоритм их заложим гарантию присутствия своих заявок. Есть ли возможность слития ММ-роботами? Конечно есть. Значит нужно каким-то образом гарантировать отсутствие слития для ММ-роботов.

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

Вводим начальные торговые издержки для всех роботов за торговые операции, и перечисляем их на счета ММ-роботов. Начальные издержки делаем Koef * MO ММ-роботов. Конечно, Koef > 1. Инсайд тоже научились пользовать, так что ММ-роботы потихоньку сливают остальных роботов.

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

Как этого избежать? Путь только один — ввод новых роботов с новыми капиталлами. Значит требуется всегда на определенном этапе подпитывать наш рынок новыми деньгами и новыми роботами.

Ну, вроде, задышало…

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

Какие простые выводы из даже такого примитива, что был выше озвучен, можно сделать?

— Рынок — инструмент отнятия денег в пользу ММ-роботов.
— Рынок мертв без новых участников и их новых капиталлов.
— Рынок мертв без инсайда и торговых издержек.
— Цены формируются на основе инсайда.


Площадко-образующий биржевой алгоритм


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

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

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

Итак, есть Level2 (терминология FOREX, в биржах его называют еще MarketDepth) — это уровни: цена покупки/продажи и сколько (объем). Каждый такой уровень (цена + объем) называется бандом. Самые лучшие банды для продажи и покупки называются Bid и Ask (некоторые называют Offer, но это лишь терминология).

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

Любой лимитник биржевой алгоритм почти всегда ставит на соответствующий банд в стакане. Именно по этой причине, поставив лимитник внутрь спреда происходит соответствующее его сужение. Совсем на пальцах это объяснять не буду, алгоритм постановки простой (можно погуглить или спросить).

Если лимитник ставится хуже, чем текущая соответствующая цена (например, SellLimit <= Bid), то биржевой алгоритм исполнения исполняет не по цене хуже рыночной, а начинает слизывать (по объему) банды с наилучшего в сторону ухудшения, пока весь лимитник не заполнится, либо же пока не иссякнут банды до уровня, на котором выставлен этот лимитник.

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

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

Лимитники в Level2 кроются маркет-ордерами. Типов ордеров полно, как биржа захочет (пропишет). Это же алгоритм. Например, в MT5 введены свои типы ордеров, которые биржа вполне могла бы легализовать — реализовать в своем биржевом алгоритме исполнения. Маркет-ордер — это производная лимитного ордера: лимитник по цене хуже текущей, при этом эта хужесть почти не измеряется. Вот сколько надо вам исполнить маркетом — столько вы и получите, но только с хорошим отрицательным проскальзыванием. Основные пользователи маркет-ордеров — мясо.

Очевидно, что цена может двигаться по почти любой траектории без совершения сделок — смотрим ММ-алгоритмы. Если сделка совершается, то ее цена и объем называется Last. И это инфа также транслируется биржей. Поток Last-данных называется T&S (Time & Sales прим. ред).

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

Понятно, что биржевой алгоритм обязан быть последовательным — т.е. формируется очередь из заявок и они последовательно обрабатываются. Но есть варианты так называемых snapshots, когда заявки накапливаются в течение какого-то относительно короткого времени, а потом выдаются на раз в level2 с соответствующим исполнением.

Исполнение лимитных ордеров на бирже


Корректный биржевой алгоритм не допускает в ценообразовании публичной ситуации Bid >= Ask. В самом алгоритме по мере приема заявок на начальном этапе формируется стакан, в котором частенько бывают ситуации Bid >= Ask. В такой ситуации включается исполнительная часть биржевого алгоритма, задача которой разрулить эту ситуацию до состояния Ask > Bid. И только после разруливания уже сформированный стакан с соответственно сформированными Last-данными становится публичным — доступным всем.

SellLimit всегда исполняется по цене Bid, BuyLimit — исполняется по Ask.
Но только эти Bid и Ask являются непубличными ценами сформированного на начальном этапе стакана, как описал выше.

Если вы выставляете SellLimit — это желание вами продать, что равно предложения для других купить у вас. По этой причине SellLimit попадает в Ask-банды. Например, если вы выставляете внутрь спреда SellLimit, то формируется наилучший Ask-банд с уровнем и объемом вашего лимитника. Т.е. выставив вовнутрь спреда SellLimit, вы меняете Ask-цену. Если кто-то захочет купить по Ask-цене, то он будет заливать ваш лимитник. Говорить в таком случае, что SellLimit исполняется по Ask-цене, либо же исполняется без спреда — очень расплывчатая формулировка. Лучше просто понимать механизм, как и везде.

Приведу пример исполнения. Вы выставили SellLimit внутрь спреда, значит Ask приравнивается к SellLimit. Теперь вы же выставляете BuyLimit равный Ask. В этой ситуации (см. первый абзац) в биржевом алгоритме получается, что Bid приравнивается к BuyLimit. Т.е. в итоге выходит, что Bid = Ask. Все, пошло разруливание ситуации, пока Ask не станет больше Bid. Пока алгоритм не разрулит, никто корректный стакан не увидит. Для простоты пускай объемы SellLimit и BuyLimit равны Vol. Получается, что оба лимитника схлопываются, Bid и Ask становятся равны следующим лучшим бандам в стакане, т.е. Ask > Bid. Далее Last-данные содержат в себе цену исполнения, которая равна вашим SellLimit (== BuyLimit), объем Vol и направление BUY (потому что BuyLimit был отправлен позже SellLimit).

Заметьте, что если в той же ситуации сначала послать BuyLimit, а затем SellLimit, то результат будет один и тот же — вы купите/продадите сами себе, потеряв на двойной комиссии. Но только в Last-данных флажок направления будет противоположный — SELL.

Возвращаясь к вопросу цены, по которому исполняются лимитники:

Если вы будете смотреть на бары мелкого ТФ на каком-нибудь слаболиквидном символе, то увидите, что Bid-бары подрезаются снизу (BuyLimit-ами), а Ask-бары — сверху (SellLimit-ами).

Рассмотрим опять же ситуацию SellLimit. В побаровом тестере SellLimit исполнится только тогда, когда его HighBid >= SellLimit. Обратите внимание, что HighBid (как и LowAsk) практически не подрезаются на биржах. И забегая вперед — совсем не подрезаются на ECN/STP. Т.е. если вам нужно протестировать стратегию с лимитниками, то для вас главная информация по исполнению SellLimit является значение Bid-цены, а точнее ее High. Это может быть еще одним аргументом в пользу утверждения, что SellLimit исполняется именно по Bid-ценам.

Отвлекаясь немного, можно сказать, что из этих же соображений строятся ЗигЗаги с вершинками на Bid-данных и низинками на Ask-данных. И именно на основании такого построения оценивается максимальная потенциальная доходность.


Типы трейдеров


Классификацией трейдеров можно заниматься до бесконечности. Но среди проф. участников рынка (брокеры, разработчики платформ и т.д.) трейдеров делят на два типа: кликеры (GUI-clickers) и алготрейдеры. Названия полностью говорят о их особенностях. Разделение на опытных и новичков (употребяют также «нубы»), как правило, не ведется.
Если стоит задача привлечения трейдеров, то проще всего привлекаются кликеры и гораздо сложнее алготрейдеры.
Кликерам делается хороший красивый GUI, торговым условиям уделяется второстепенное внимание. По этой причине, в частности, кликеры являются в среднем мясом (источником прибыли для других участников рынка). Конкуренция за кликеров высокая.
Алготрейдеры очень придирчивы к торговым условиям, GUI не имеет определяющего значения. Конкуренция за алготрейдеров низкая, хоть усилия на это тратятся серьезные.
Мат. ожидание всех алготрейдеров много выше мат. ожидания кликеров. Количество алготрейдеров много меньше, но оборот выше.
Так случилось, что к мнению алготрейдеров прислушиваются в гораздо меньшей степени, чем к кликерам. Этим страдают разработчики платформ, этим же страдают и брокеры. Мнение алготрейдеров может распространяться даже на то, как, например, платформа продается брокеру — за комиссию с оборота или абонентскую плату. Т.е. учитываются все нюансы возможного изменения торговых условий.
Чаще всего участники рынка настроены на удовлетворение только одного типа трейдеров.

Очевидно из написанного ранее, что маркетмейкеры являются алготрейдерами.

Токсичный поток


Данным термином пользуются маркетмейкеры. Токсичным потоком называется системный прибыльный поток торговых приказов. Он исходит от тех самых, которые зарабатывают на несовершенстве ММ-алгоритмов. На практике 99% токсичного потока приходится на алготрейдеров.

Модели работы брокеров


  1. Маркетмейкинг.
  2. STP.
  3. ECN/STP.

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

Некий брокер заявляет, что его оборот > $100 млрд/месяц, при этом заработок $80 с мио. Очевидно, что это маркетмейкер, т.к. даже самые неадекватные STP не зарабатывают больше $65 с мио, не говоря уже про столь высокий месячный оборот.
Выходит, что $80 с ляма — это скорость слива их клиентов. Это обозначает, что при среднем лоте 0.5 средний клиент совершает сделку с прибылью ~ -0.5 пункта EURUSD.
Если извернуться, то среднюю сделку в лот/пипс можно примерно посчитать по тикетам в MT4. Да, многие тикеты будут уходить на отмененные отложки и операции ввода/вывода, но это ни в какое сравнение не пойдет с количеством маркет-ордеров — любимцев кликеров.

Рассуждаем дальше, раз месячный оборот > 100 ярдов, то значит MoneyIn — MoneyOut > $8 мио. Т.е. брокер на сливе своих клиентов ежемесячно зарабатывает $8 мио.
Спрашивается, где возможно найти ежемесячно такое количество хомячков. Причем не забывайте, что MoneyOut в среднем примерно раза в два меньше (сам придумал) MoneyIn. Т.е. брокер ежемесячно привлекает порядка $16 мио новых живых денег.

Как он это делает?!
Средний хомячек несет где-то $200 (также сам придумал, ни от кого никогда не слышал). Значит даже по самым скромным подсчетам (MoneyOut = 0) нужно ежемесячно обирать 40 000 хомячков.
На самом деле хомячки на то так и называются, что сливают много много раз. И несут свои средние $200 по расписанию — с каждой ЗП, годами. Это плата за регулярное удовольствие ощущать себя кликером. Точно также, как тратят ежемесячно на кино, пиво и т.д.

Если среди хомячков вдруг попадается токсичный поток, то он быстро и легко выявляется, после чего настоятельно рекомендуется перейти в STP-тип, либо закрыть счет.
Такому брокеру на самом деле выгодны другие типы брокеров (STP и ECN/STP). Эти брокеры не являются маркетмейкеру конкурентами. Они даже делают огромное благо: производят явное разделение «ECN для профи» и «Стандарт для новичков». Т.к. это позволяет клиентскую базу на Стандарте избавить от токсика. Им даже выгодно, чтобы люди уходили к другим, т.к. токсика в итоге меньше. И можно больше зарабатывать с менее рискового в итоге ММ.

STP И ECN/STP могут испытывать серьезные проблемы при высокой доли токсика. Им нужные кликеры хотя бы для того, чтобы разбавлять токсик перед своими LP, которые почти всегда сводятся на крупных маркетмейкерах. А они действуют по образу и подобию мелких маркетмейкеров (как описал выше).
Дело в том, что на FOREX на данном этапе превалируют ММ-алгоритмы крупных владельцев — банков. Если вы зарабатываете на FOREX — то это почти всегда убыток этих банков, точнее их алгоритмических отделов, у которых миллионные бюджеты тратятся на то, в частности, чтобы вы не зарабатывали.
Получить прибыль от слива другого простого трейдера можно сейчас в своей основе лишь косвенно: трейдер сольет ММ-алгоритму, а вы вырвете этот профит у него себе. Грубо говоря, зарабатывать на FOREX — это грабить наворованное.

Но все это странно звучит только в том случае, если смотреть через розовые очки на многие происходящие в мире события. Уже давно рынок (фондовый или FOREX) стал легальным инструментов отъема денег у населения. Но не все так плохо.
Вернемся к нашему ММ-брокеру. Граальная ли у него схема? Не совсем. Дело в том, что ММ-брокер в состоянии зарабатывать даже много больше $80 с мио при очень волатильном и трендовом рынке. Но и уходить в приличные минуса на длительно-вялом рынке. Таковы вполне предсказуемые особенности торговли среднего хомячка. Т.е. ММ-модель брокериджа — это рисковая модель, но при этом могущая быть очень прибыльной при благоприятных рыночных условиях.

Чтобы ММ-брокер отказался от ММ-модели, ему нужно поверить в то, что STP-модель в состоянии давать на комиссии не сильно меньше. А это значит, что ему нужно увеличивать в разы обороты. Это практически нереально сделать на огромной базе кликеров, т.к. оборот делают алготрейдеры. А алготрейдеры пойдут только тогда, когда торговые условия будут одними из лучших. Ну а это в свою очередь может произойти при серьезнейших финансовых вливаниях в STP-инфраструктуру.
Более того, если имеется такое огромное стадо мяса в виде кликеров, то зачем отдавать их слив зажравшимся ММ-банкам, получая лишь только комиссию с их слива. Если можно забирать все полностью себе. В общем, такие несложные рассуждения позволяют понять, что ММ-брокер с огромной мясной-базой становится заложником самого себя.
Тут еще может доходить до смешного, если база обладает каким-нибудь национальным менталитетом. Например, количество русских хомячков уменьшается на порядок, если просить их заполнять чуть больше полей в анкете, как требуют того регуляторы. Это во многом заставляет ММ-брокеров уходить в оффшорные зоны.

Но опять же, не все так плохо…

Кванты


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

Коинтеграция


Можно наводить различную квантовую ересь, давая термину коинтеграции четкие математические определения. Но все это имеет мало отношения к практике трейдинга. По простому объяснить коинтеграцию возможно. Представьте, что у вас много торговых символов. Если существует возможность (количество каждого символа) купить/продать эти символы таким образом, чтобы прибыль колебалась возле какого-то не сильно изменяющегося значения, то такие символы коинтегрированы. Конечно, совсем по-детски, но суть передает на 90%. Такая комбинация символов называется коинтегрированным портфелем. Классический пример такого портфеля: актив и фьючерс на него.

Арбитраж


Любой портфель имеет Bid и Ask-цены. Более того, имеет свой Level2 (несложно вычисляется из Level2 символов, в него входящих). Если существует возможность по коинтегрированному портфелю совершить сделку так, чтобы после ее закрытия был положительный профит, то такая возможность называется арбитражем. Сам такой коинтегрированный портфель называется арбитражным портфелем (только что придумал).
Чем меньше торговые издержки (качество исполнения, комиссии), тем больше шансов у коинтегрированного портфеля стать арбитражным.

Маркап


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

Торгуем арбитраж


Допустим возникло желание заняться арбитражем. Для этого нужно, как минимум, создать коинтегрированный портфель. Самый простой коинтегрированный портфель состоит из двух одноименных символов: один у одного брокера, второй — у другого.
Возьмем, например, так популярный EURUSD и дадим символам для удобства соответствующие названия: EURUSD1 и EURUSD2. Важнейшее замечание, которое необходимо полностью осознать, что EURUSD1 и EURUSD2 — это совершенно разные символы. Они могли бы вообще подругому называться у брокеров, иметь сильно (на порядок, например) разные цены и другие отличия. Важно лишь только одно — они коинтегрированы. Но для простоты будем рассматривать элементарный случай: EURUSD1 и EURUSD2.
Перед тем, как сравнивать цены, делается алгоритмический маркап на них для того, чтобы внести в них все возможные торговые издержки (качество исполнения для каждого брокера и комиссии для каждого брокера). Будем далее считать, что все цены уже замаркаплены.
Итак, в каждом брокере у вас имеются торговые счета с определенными деньгами. Если очень примитивно смотреть на арбитраж, то требуется находить моменты Ask1 < Bid2 и Ask2 < Bid1. И в эти моменты открывать/закрывать противоположные позиции в каждом из брокеров.
Это наипростейшая и лобовая реализация. Сделаем небольшое отступление в сторону более обобщенного и универсального видения такой торговли.
В данном случае коинтегрированность портфеля говорит о том, что Synth = EURUSD1 / EURSD2 колеблется возле единицы. У этого Synth имеются свои Synth_Bid и Synth_Ask (Synth_Level2) цены. Если возможно построить ЗигЗаг с вершинками на Synth_Bid и низинками на Synth_Ask, то наш портфель Synth является арбитражным. Но это отвлечение.
Вернемся все же к более привычному для большинства взгяду на торговлю. На самом деле в некоторых случаях оправдано создание чего-то высокоуровневого для удобства торговли. И для арбитража это высокоуровневое делается так:
Берутся замаркапленные Level2_1 и Level2_2 и просто объединяются в Level2_All, которому начинает соответствовать созданный искусственный высокоуровневый символ EURUSD_All. Пишутся очень простые торговые функции, которые в состоянии торговать EURUSD_All. Например, если вы хотите продать EURUSD_ALL, то OrderSend(EURUSD_All, OP_SELL) отправляет SELL-приказ на того из брокеров, у которого Bid-цена наивысшая, т.е. его Bid-цена находится на наилучшем банде в Level2_All.
Тут нужно теперь сказать пару слов о Level2_All. В его внутреннем представлении банд теперь содержит не только цены и объем, но еще и название источника этих данных.
При такой реализации вам нужно всего лишь дожидаться ситуации, когда Ask_All < Bid_All и в этот момент одновременно открывать разнонаправленные позиции по EURUSD_All. В итоге получая высокоуровневую прибыль и отсутствие открытых позиций по EURUSD_All. Удобно, не правда ли? Советник на таком высокоуровневом языке занимал бы 10 строк: увидел отрицательные спред, проторговал его, ждем дальше.
Если же опуститься с высокого уровня видения такой торговли вниз, то мы заметим, что в момент, когда у нас нет позиций по EURUSD_All, мы будем иметь открытую позицию по EURUSD1 и противоположную ей по EURUSD2. Это в свою очередь будет вызывать естественные перекосы Equity1 и Equity2. Да, грубо говоря, Equity_All = Equity1 + Equity2 будет расти по мере торговли, но мы то знаем, что Equity1 и Equity2 обязаны быть, как минимум, положительными. А наши перекосы вполне могут счет на одном из брокеров просто обнулить, хоть другой и будет расти.
Как же решить эту проблему? Первое, что приходит в голову — это переливать деньги с одного брокера на другой. Т.е. заказывать снятие средств с брокера, где больше денег и отправлять их туда, где меньше. Но это долго, очень долго. К тому же еще и крайне дорого — банковские и другие виды переводов не бесплатны.
Но представьте себе, что появляется некто, кто говорит, что все перекосы будет нивелировать за небольшую плату. Этот некто — клиринг.

Простой агрегатор


Несложно было заметить, как удобно высокоуровнево торговать. При этом удобно торговать не только арбитраж, а вообще любую стратегию, т.к. цены EURUSD_All исходя из своего построения не могут быть хуже, чем EURUSD1 и EURUSD2. Т.е. искусственный символ более выгодный и профит на нем заведомо выше. Вот тут и приходит мысль создания подобных искусственных высокоуровневых символов для любого вида стратегий. При этом по одному и тому же принципу брать уже не два источника (брокеры в примере) коинтегрированных символов, а любое их количество. Очевидно, чем больше источников, тем выгоднее (цены лучше) высокоуровневые символы.
Такие высокоуровневые образования называются агрегаторами ликвидности. Очевидно, что это алгоритм — некий софт, который позволяет так торговать. Среди участвующих в жизни рынка компаний имеются софт-компании, которые занимаются именно подобными алгоритмами агрегации. Предоставляя своим клиентам возможность не заморачиваться с низкоуровневой торговлей, а торговать высокоуровнево, тратя свои интеллектуальные силы на другие вещи.
Среди этих софт-компаний наиболее известны Currenex и Integral. Они продают свой софт за комиссию с оборота. По этой причине, в частности, некоторые пишут свои собственные агрегаторы, чтобы быть конкурентноспособнее.

Создание торговой площадки


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

Далее агрегаторская софт-компания производит настройку своего агрегаторского софта с вашими источниками и прайм-брокером, с которым у него имеются договора на возможность такой деятельности, и выдает вам торговую площадку под ключ.
Заметьте, что источниками могут быть такие же агрегаторы, у них источниками — также какие-то агрегаторы. Все это может в итоге переплетаться и повторяться, что вызывает порой завышение (дублирование источников) объемов на некоторых бандах вашего Level2_All. Ну и, конечно, на самых концах этой сети находятся банки со своими ММ-алгоритмами.

PriceTaker и PriceGiver


Участники рынка всегда делятся на две категории: создающие (PriceGiver) рыночные предложения (цены и количество) и соглашающиеся (PriceTaker) с ними.
Сами рыночные предложения представляют из себя заявки: готов купить/продать столько-то по такой-то цене или лучше. Совокупность этих заявок (Level2) условно показывает текущую рыночную ликвидность.

Провайдер ликвидности


Liquidity Provider (LP) — так называет агрегатор свои источники цен, которые он объединяет в один единый виртуальный (высокоуровневый) Level2. Очевидно, LP — PriceGiver. Существенную долю PriceGivers занимают ММ-алгоритмы.

STP


STP — агрегатор, где клиенту разрешается быть только PriceTaker-ом. Это значит, что клиенты не в состоянии формировать свои заявки, на которые кто-либо смог бы согласитья. Они могут только принимать предложения от PriceGivers.
Как говорилось ранее, агрегатор представляет из себя некий высокоуровневый виртуальный торговый сервис. Поэтому все лимитные заявки клиентов STP-агрегатора являются виртуальными и хранятся на сервере агрегатора.
Как следствие, если кто-то возьмет в качестве LP себе STP-агрегатор, то он не в состоянии будет торговать с его клиентами. Почти все ММ-алгоритмы, запущенные на STP-агрегаторе, не будут давать положительный профит.

Простой STP-агрегатор


В простом STP все виртуальные клиентские торговые приказы приходят к его PriceGivers, как маркет-ордера. Например, у клиента стоит SellLimit. Как только происходит Bid >= SellLimit, на LP, которому соответствует Bid, отправляется маркет-ордер SELL. Ответ LP на такой торговый приказ и является результатом исполнения клиентского SellLimit.
Очевидно, при такой реализации происходят проскальзывания, среднее которых меньше нуля. Т.е. клиенты несут убытки.

Иной STP-агрегатор


Здесь все виртуальные клиентские торговые приказы приходят к его PriceGivers, как лимитные ордера (маркет-ордер — лимитник, по цене прилично (определяется STP-агрегатором) хуже текущей).
Разберем алгоритм исполнения на примере выше:
В момент Bid >= SellLimit, виртуальный SellLimit замораживается (выносится из учета системой исполнения, клиент ничего с ним не может сделать) и на соответствующий LP шлется такой же SellLimit. При этом все эти действия никак не влияют на ценообразование. Т.е. чуть позже заморозки (например, на 1 мс) может сформироваться Bid лучше (от других LP), но он уже почти (есть нюансы) никак не будет участвовать в исполнении нашего клиентского SellLimit.
LP, куда отправили SellLimit, отвечает, что исполнил одну часть SellLimit, а оставшуюся часть по разным причинам не исполнил — реджект (reject). После чего клиент получает высокоуровневую открытую SELL-позу на исполненный объем и размороженный SellLimit — на оставшийся.
Скорость и качество ответа LP зависит от множества факторов. Длительность ответа может доходить до нескольких секунд. Не исключены ситуации, когда от LP ответ не приходит.

Отметим, (при такой реализации STP) лимитники клиентов агрегатора не скользят в отрицательную зону. Более того, часты положительные проскальзывания, которые покрывают значительную часть постоянных торговых издержек — комиссия.

Здесь же вы можете видеть, как сильно отличается исполнение и ценообразование у бирж и FOREX.

Нюансы исполнения.

Очень сложно описать то множество тонкостей, влияющее на качество исполнения. Самое простое, что делается агрегаторами одним из первых — это улучшение каналов связи между LP. однако, определяющим все же качество исполнения (FillRate) являются алгоритмы исполнения STP-агрегатора. Это целый класс постоянно совершенствующихся (не всеми) интереснейших алгоритмов, некоторые из которых даже затрагивают ценообразование STP-агрегатора. Они во многом являются неафишируемыми конкурентными решениями и очень специфичными для справочника трейдера, поэтому рассказывать о них, скорее всего, не буду.
Факт заключается в том, что два STP-агрегатора, находящиеся в равных условиях, могут существенно отличаться по FillRate, благодаря использованию разных алгоритмов исполнения. Особенно это может быть заметно при токсике. Т.е. показатели торговой стратегии могут очень сильно зависить от используемого агрегатора, особенно при росте торговых объемов.

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


ECN/STP


ECN/STP — как агрегатор, алгоритмически идентичен STP. Единственное отличие — в агрегацию добавляется новый виртуальный LP — LP0: заявки клиентов агрегатора.
Таким простым приемом клиенты ECN/STP-агрегатора становятся еще и PriceGivers. Это обозначает, что клиенты могут совершать между собой сделки фактически напрямую.
Чем больший оборот приходится на LP0, тем выгоднее ECN/STP-агрегатору, т.к. в отличие от других LP, LP0 не требует за свое использование агрегатором платить комиссию. Более того, поток торговых приказов, приходящийся на LP0, ни в коей мере не может быть характеризован, как токсик. Т.к. это уже торговля клиентов между собой, даже если среди них будут ММ-алгоритмы.
Получается такой беспроблемный LP.
Но надо четко понимать, чтобы иметь возможность быть PriceTaker-ом для LP0-PriceGiver-ов ECN/STP-агрегатора, нужно быть его клиентом. Т.е. клиенты других агрегаторов не могут воспользоваться иногда великолепными (наилучшими) ценовыми предложениями LP0.
Например, вы торгуете в двух агрегаторах. В ECN/STP выставляете лимитник внутрь спреда, улучшив Bid или Ask. Но в другом агрегаторе вы не сможете сами у себя купить/продать по этой цене, т.к. они не видны. Т.е. вы купите/продадите, скорее всего, по менее выгодной цене, чем предложенная вашим лимитником.

Метаморфозы ECN/STP


Силище ECN/STP заключается в возможности обмениваться ликвидностью.
Представьте, что какой-то STP-агрегатор взял себе в качестве LP ECN/STP-агрегатор. Это автоматически обозначает, что клиенты STP-агрегатора становятся PriceTaker-ами ECN/STP-агрегатора, в частности (и других LP из списка STP-агрегатора). Получается, что в примере выше с двумя агрегаторами, вы бы в STP-агрегаторе увидели бы свою заявку, выставленную в другом ECN/STP-агрегаторе. И если бы она оказалась лучшей в итоговом STP-Level2, то вы бы могли совершить сделку сами с собой. Т.е. ваша заявка стала бы доступна гораздо большему количеству PriceTakers, а это значит, что вероятность исполнения вашей заявки возросла бы.
Нужно понимать, что у каждого агрегатора есть своя база PriceTakers, и такой простой прием позволяет обмениваться этими базами, увеличивая вероятность исполнения заявок PriceGivers. И это также выгодно PriceTakers, т.к. цены лучше.
Конечно, если два ECN/STP-агрегатора сделают взаимно друг-друга своими LP, то возникнет серьезное несоответствие в Level2 каждого — рекурсивно ликвидность будет увеличена в разы. Поэтому ECN/STP-агрегаторы обмениваются (точнее, могут) между собой внутренней (LP0) ликвидностью через определенные технические договоренности — tags.

Реальность.

LP-шками большинства агрегаторов являются банки с ММ-алгоритмами. Это значит, что проблема токсика в большинстве агрегаторов крайне насущная. Если один из таких LP замечает токсик от агрегатора, он оповещает об этом агрегатор. И тот, в свою очередь, ставится перед выбором: отключить LP (т.к. тот не хочет нести убытки), либо отключить своего клиента — источника токсика. Чаще всего агрегатор отказывается от прибыльного клиента, т.к. он менее выгоден. Это порочная для трейдеров схема действует в большинстве случаев.
Однако, есть и исключения, и это серьезный передел так давно хорошо себя зарекомендовавших правил на институциональном FOREX. Появились ECN/STP-агрегаторы, потенциально-способные превратить огромную ликвидность PriceTeker-ов в ликвидность PriceGivers. Т.е. замкнуть на себе трейдеров, существенно уменьшив доходы классических банковских ММ-алгоритмов. Стоит лишь сказать, что по скромным подсчетам разрозненный retail-FOREX имеет месячный оборот свыше триллиона USD. И почти весь этот оборот — мясо с костей кликеров, которые на данный момент обгладывают ДЦ (маркетмейкерская схема) и банки через классические STP и ECN/STP-агрегаторы.


Простой HFT ММ-алгоритм


Очевидно, что у ECN/STP-агрегатора имеется некоторая инсайдерская информация: кто и как через него торгует. Грамотный обладатель такой информации создает классификатор прибыльности клиентов. Например, в результате анализа он узнает, что клиенты агрегатора стабильно (и с нужной скоростью) сливают на GBPJPY с 12-ти до 17-ти часов каждой среды. Что значит сливают — это значит, что их деньги перетекают в LP, у которых на тот момент были наиболее конкурентноспособные цены.
Напрашивается вопрос, зачем отдавать слив кому-то, когда можно его забирать себе? Некоторые пойдут по серой схеме — отключат ECN/STP на это время и фактически превратятся в ДЦ по маркетмейкерской схеме. Но есть абсолютно взаимовыгодный белый путь — HFT ММ-алгоритм. Пусть он будет нашим.
В нашем примере каждую среду с 12-ти до 17 часов мы выставляем внутрь GBPJPY-спреда свои BuyLimit и SellLimit на минимальном расстоянии от внешнего (не нами сформированного) спреда и все время следуем (вот здесь и нужен HFT — быстрое перетаскивание ордеров) за ним. Это улучшает цены — сужает спред. И сливающие клиенты будут совершать сделки по более выгодным ценам. Однако (см. упоминание про анализ скорости слива), их слив будет перетекать уже к нам, т.к. они будут именно с нами совершать сделки.
Взаимовыгодность заключается в том, что мы получаем профит, а сливающие клиенты теряют деньги с меньшей скоростью, чем если бы мы не использовали HFT ММ-алгоритм. Ну и если владельцем такого ММ-алгоритма является сам ECN/STP-агрегатор, то комиссия, естесственно, за использование его же LP0 нулевая. А клиент за совершение сделки еще и комиссию в полном объеме заплатит агрегатору. Т.е. фактически для такого владельца комиссия даже отрицательная.

Адаптивный HFT ММ-алгоритм


Не обязательно обладать вышеупомянутой инсайдерской информацией. Можно ее нехитрым способом получить самому — зондирование.
Для этого понадобится, конечно, потратиться: создается по схеме выше свой спред, но только минимальным лотом. Клиенты ECN/STP будут всегда совершать сделки с вами, тем самым вы получите инсайдерскую информацию. Далее все также, как по схеме выше.
Адаптивность заключается в том, что инсайдерская информация берется скользящим окном, т.е. подстраивается (спорно, безусловно) под настроения клиентов и рынок.
Заметьте, что любой HFT ММ-алгоритм почти никогда не будет токсиком, т.к. берет деньги только PriceTakers, среди которых почти нет HFT ММ-алгоритмов.
Следует, наверное, упомянуть, что данные элементарные HFT ММ-алгоритмы придуманы мной сходу. И эксплуатируемые HFT ММ-алгоритмы куда интеллектуальнее. Однако, их суть примерно передана.

Один из взаимовыгодных вариантов привлечения HFT ММ-алгоритмов


ECN/STP-агрегатору всегда выгодно, когда среди его клиентов имеются HFT ММ-алгоритмы, т.к. они обеспечивают высокий оборот. Однако, для независимых HFT ММ-алгоритмов торговые издержки в виде комиссии — существенное препятствие ракрыть свои возможности полностью. По этой причине создается маркетинговая схема, могущая за собой иметь вполне четкие мат. расчеты, когда HFT ММ-алгоритму предоставляется отрицательная комиссия. Т.е. агрегатор за все заявки HFT ММ-алгоритма, что были исполнены на LP0, не берет с него комиссию, более того, выплачивает ему часть комиссии, взятую в полном объеме с другой стороны сделки — PriceTaker. О подобной схеме было вскользь упомянуто в описании биржевого алгоритма.

HFT ММ-алгоритмы: биржа vs FOREX


На FOREX далеко не все ECN/STP-агрегаторы предоставляют T&S-данные. На то может быть сразу несколько причин. Например, скрыть обороты и не дать явно проанализировать исходящий из ECN/STP токсик. Однако, все же некоторые ECN/STP-агрегаторы такую информацию предоставляют.
На биржах T&S имеется, но данные о классификации сделок (PriceGivers или PriceTakers) далеко не всегда имеют официальное (биржевое) происхождение. Чаще всего это независимая алгоритмическая классификация.
Как в случае с биржей, так и с ECN/STP-агрегатором правильно классифицированные T&S-данные показывают, когда PriceTakers/PriceGivers проигрывают/выигрывают. В таком случае для создания независимого простейшего HFT ММ-алгоритма не требуется (при должной тех. инфраструктуре — скорость) даже зондирование и какой-либо анализ динамики Level2. Т.к. соответствующим образом преобразованные и проанализированные T&S-данные — вышеупомянутый инсайд.

Off-market


На институциональном FOREX не редки внерыночные котировки. Они становятся больным вопросом, когда по ним совершаются сделки. И особенно больным, когда эти сделки имеют высокий (в абсолюте) профит, вне зависимости от его знака.
По разным причинам ММ-алгоритмы могут давать сбои, выдавая нерыночные котировки. На самом деле они вполне рыночные, раз предлагают купить/продать по ним. Но в заключенных соглашениях, как правило, есть явная лазейка, когда сделки, совершенные по внерыночным котировкам, могут быть отменены (и нередко отменяются).
Внерыночные цены определяются всегда задним числом через сравнение с историями цен от нескольких источников. Если сильный выброс, по сравнению, с остальными — значит внерыночная котира.

LastLook


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

Защита трейдера.

Неподкованного юридически прибыльного трейдера на институциональном FOREX могут легко «раздеть», через механизмы Off-market и LastLook. Поэтому разумно выбирать место для торговли через наиболее продвинутый агрегатор, который соседствует еще с сильным юридическим отделом.
Т.е. помимо того, что трейдер будет анонимно представлен в общем потоке агргегатора. Он еще будет получать бесплатную юридическую профессиональную помощь в разборе проблем с отменой сделок. Бесплатно, т.к. юр. отдел отстаивает не права трейдера, а лицо куда более крупного владельца агрегатора, от имени которого, в частности, совершал сделки этот самый трейдер. Для этого, конечно, должна быть принципиальная позиция владельца.


Виртуальный агрегатор


Как уже говорилось, агрегатор — высокоуровневое объединение коинтегрированных символов. Заметьте, никакого ограничения на реальность таких символов не накладывается.

Это значит, что если есть синтетические коинтегрированные символы, то их можно не только создавать, но и агрегировать.

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

Виртуальные агрегаторы обладают таким же свойством, как и классические — маскируют токсик, создают наилучшие цены, увеличивают моментальную ликвидность, повышают потолок ликвидности ТС и т.д.

Чаще всего создание виртуальных агрегаторов ложится на плечи алготрейдеров. Этим же могут частично заниматься и наиболее продвинутые классические агрегаторы: агрегировать не только явно существующие символы ЛП, но еще и их синтетики.

Примитивный пример визуализации самой простой части виртуального агрегатора — объединение синтетических фидов:
image

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

Грубый алгоритм получения T&S-данных из Level2


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

ECN (биржи)

Сраниваем между собой Level2[0] и Level2[1]. Если Bid[0] >= Ask[1], то в T&S попадают все банды из Level2[1]_Ask, которые не выше Bid[0]. Аналогично для ситуации Ask[0] <= Bid[1]. В остальных случаях в моделируемый T&S ничего не попадает.
Данный алгоритм легко проверить на лин. связи с официально предоставляемыми биржами T&S-данными. Затем навести некоторые улучшениче через неравномерные по бандам распределения и т.д… Вообщем, тема копается всегда с грубой модели выше.

STP (желательно много ЛП)

Vector_Ask[0] = Level2[0]_Ask — Level2[1]_Ask. У этого вектора суммируются от лучшего (по цене) банда все отрицательные значения, пока не встретится первый неотрицательный банд. Это сумма заносится в T&S[0]. С Bid — аналогично.

ECN/STP

Здесь посложнее, т.к. надо объединить два почти противоречащих друг-другу метода для ECN и STP. Расписывать не буду.

Зачем T&S?

Применимость в ММ-алгоритмах уже описывал. Также, например, можно оценивать ценовые уровни скопления серьезных объемов и анализировать их влияние на отдаленные (секунды, минуты, часы) ценовые цели.
На FOREX для того, чтобы оценивать взаимосвязи между всеми символами, иногда резонно использовать Level2 не символов, а валютных пар (самим строить синтетический Level2).

Аллокация ордеров


Так называется правило (алгоритм) распределения заполнения (при исполнении) лимитных заявок, расположенных на одном и том же банде.
Например, на лучшем банде располагается сразу несколько заявок, суммарный объем которых больше, чем пришедший объем маркет-ордера от PriceTaker. Понятно, что PriceTaker получит полный объем исполнения по цене на лучшем банде. Встает вопрос, а как этот объем распределить между заявками, что находились на банде?
И тут у каждой системы возникает свое видение, как это делать правильно.

Pro-Rata

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

FIFO

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

Volume (Weigth) FIFO

Термин сочинил на ходу. Приоритет идет не по времени выставления, а по объему заявки (или иному кастомному признаку — Weight).
Такая аллокация побуждает PriceGivers наполнять наилучшие банды максимальной ликвидностью. Для PriceTakers это одно из наилучших правил.

Weight Pro-Rata

Также термин сочинил. Это модификация Pro-Rata, где заявкам даются уже не одинаковые веса распределения, а в зависимости от признака Weight.
Например, может использоваться любое распределение (мат. термин) по времени выставления заявок: чем раньше выставил, тем выше вес. В частности, распространено использование мат. линейного распределения по времени (Time Pro-Rata).
Аналогично делается и по Volume и даже по более сложным признакам (например, Weigth = TimeLive * Volume).
При таком подходе применяются уже различные математически обоснованные методы оптимального выставления заявок — максимизация вероятности наибольшего по суммарному объему исполнения заявок от участника рынка. Т.е. находятся алгоритмы, как разбивать на куски заявку и в какой последовательности их отправлять на банд.

Что используют и зачем

Каждая площадка придумывает свои правила аллокации, либо использует уже кем-то наработанные. В зависимости от целей, что она преследует. Понятно, что основная цель — увеличение прибыли, т.е. увеличение оборота. И тут встает нетривиальный вопрос выбора алгоритма аллокации. Чтобы и PriceGivers мотивировать и активность PriceTakers не уменьшить. Тут все зависит от базы имеющейся клиентуры площадки и перспектив развития.
Чаще всего не заморачиваются и выбирают простые варианты: Pro-Rata и FIFO.
Единственный алгоритм, где не возникает коллизий с минимально допустимым объемом (лотом) — FIFO-варианты.

PriceTakers vs PriceGivers


Когда в T&S-данных есть классификация по направлениям, можно говорить об общих показателях торговли PriceTakers, либо же PriceGivers.
Будем считать далее, что упомянутое направление касается PriceTakers. Это условность на самом деле, т.к. PriceGivers-направления — просто с обратным знаком.
Вспомним, что каждый элемент T&S-последовательности представляет из себя данные по совершенной кем-то из PriceTakers сделке: цена, объем и ее направление.
Это значит, что мы вполне в состоянии построить динамику изменения суммарного Equity всех PriceTakers по каждому символу в отдельности и, соответственно, по любой совокупности символов. Более того, на FOREX, рассматривая все кроссы и мажоры одновременно, можно построить динамику изменения общего валютного профиля PriceTakers: сколько какой валюты «на руках» у PriceTakers.

Level3--

Есть такое понятие, как Level3 — это полная информация о текущем состоянии каждого из участников рынка. Грубо говоря, это хорошо охраняемый инсайд. Однако, как было сказано выше, мы можем к нему приблизиться, вычислив Equity_PriceTakers.
Напомню, фактическое предназначение PriceTakers — мясо для PriceGivers, среди которых есть очень сильные участники рынка. Т.е. само алгоритмическое ценообразование служит обогащению PriceGivers за счет слива PriceTakers.
Так что PriceGivers будут делать все, чтобы Equity_PriceTakers уменьшался. Поэтому исользование такого легко вычисляемого алгоритмического инсайда видится разумным с точки зрения природы современного электронного фин. рынка.

Организация перехода биржи на новый движок


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

Может так оказаться, что новый движок несовместим (такое бывает) со старым. Как перевести биржу на новый движок?

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

Поэтому делают ECN/STP-схему работы нового движка. Когда старый движок подключается по STP к новому в качестве единственного LP. А новый дает еще свою внутреннюю ECN.

Это позволяет торговать сразу через два движка.

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

В итоге со старого движка ликвидка практически вся переходит на новый. После чего старый закрывается полностью. И остается только новый уже без внешнего LP. Т.е. получается обновленная биржа (ECN) — абсолютно вся на новом совершенном движке.

Важно понимать, что биржевой движок (или движок любой другой торговой площадки) ничего не имеет общего с торговыми API. Т.е. никто, кроме самой биржи, не в состоянии как-либо влиять на работу этого внутреннего движка напрямую. Это можно делать только косвенно.

Для этого владелец движка пишет бриджи между своим внутренним движком и внешним торговым API. Чаще всего ограничиваются только одним таким реальным торговым API — FIX API (ПОЧТИ обязаловка — стандарт). Но бывают случаи, когда реальных торговых API несколько.

Торговые платформы со своими торговыми API — это не реальные торговые API площадки, а их обертка: иногда более высокоуровневая, иногда менее функциональная, но более простая в работе. Например, почти у всех торговых платформ имеющиеся торговые API на самом деле являются обертками. Поэтому торговля через них увеличивает торговые издержки за счет latency обертки.

Поглощение бирж


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

Для того, чтобы поглотить эти площадки (перелить всю их ликвидку на свою площадку), нужно создать ECN/STP-агрегатор, где все площадки-жертвы выступают в качестве LP. Такой способ создает новую торговую площадку с более выгодными ценами — демпинг цен.

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

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

Матчинг


Матчингом называется описанное ранее сведение двух разнонаправленных торговых заявок в рамках ECN. Заметьте, что STP-исполнение заявок не является матчингом.

Классификатор матчинга

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

Самоидентификация

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

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

Dark-pool


Ответом на него служит создание своего ECN/STP-движка, где ECN служит для матчинга внутриброкерских клиентов, а STP — для исполнения на внешней ECN (во избежании путаницы дальше по тексту будем называть внешнюю ECN биржей (чаще всего так оно и есть)). Данное решение дает несколько плюсов (и минусов), как для брокера, так и для его клиентов.

Брокер уже имеет свою торговую площадку, которая по отношению к бирже имеет свое название — dark-pool. Соответственно, комиссия от матчинга своих клиентов идет теперь к владельцу этой площадки, а не к владельцу биржи.

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

Но есть и неоднозначные для клиентов моменты. Если проводится STP-транзакция, то гарантированного исполнения клиентов уже не выходит. Т.е. FillRate (качество исполнения) < 100%. Как уже подробно разбиралось ранее, это следствие того, что заявки клиентов при STP-схеме больше не видны в Level2 биржи. Т.е. биржевые клиенты не могут на них реагировать. Грубо говоря, клиенты dark-pools становятся лишь только PriceTakers (не PriceGivers) для биржи.

Однако, они оставляют свое право PriceGivers внутри dark-pool, и это ни есть мало. Т.к. не забываем, что перед созданием (и ее причиной) dark-pool происходила адекватная вышеописанная самоидентификация. Также надо сказать, что dark-pool позволяет дать его клиентам анонимность перед биржей, т.к. все STP-транзакции идут теперь только от одного имени — имени dark-pool. Более того, dark-pool из-за своей обособленности по отношению к бирже создает дополнительную защиту от особо-агрессивных биржевых PriceGivers (ММ-алгоритмы и другие HFT-представители алготрейдинга), что не без оснований привлекает многих участников рынка переходить через торговлю с бирж в dark-pools.

Развитие dark-pools

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

Централизация vs Децентрализация


Как видите, создание dark-pools — это естественный эволюционный процесс, происходящий внутри рынка — его децентрализация. Ненулевая вероятность децентрализации заставляет централизованные биржи улучшать свои торговые условия. Т.е. децентрализация для бирж является неким механизмом, повышающим эффектиновсть данного вида рынка. Однако, существуют и отрицательные стороны излишней децентрализации, которые былы показаны на примере FOREX. Там та же ECN/STP-схема, как это не парадоксально, служит уже для централизации рынка и соответствующего улучшения торговых условий.

Т.е. через ECN/STP-образования можно, как децентрализовывать рынок путем создания dark-pools, так и централизовывать — создание высокоуровневой агрегации из тех же dark-pools, в частности.

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

Real-Time Tester


Любой алготрейдер сталкивается с задачей перевода тестерного робота в боевое состояние, готовое для работы на реальном рынке.

На самом деле существует только один способ грамотного перевода. К счастью, он практически универсален.

Боевой робот делится на две части: тестер и синхронизатор.

Тестер выдает торговое окружение тестерного робота на текущий момент истории (до настоящего).

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

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

Типы синхронизаторов


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

  1. Классический — через маркеты (а-ля лимитники по цене хуже текущей). Это самая простая схема, когда через маркеты копируется торговое окружение. Плюсы этого метода заключаются в полном повторении и простой наглядности. Минусы — отрицательные проскальзывания. Т.е. для ТС с низким мат. ожиданием это плохой вариант.
  2. Через лимитные приказы. Когда, например, копируемый BUY считается, как BuyLimit на цене открытия копируемой позиции. Также учитываются все копируемые лимитные приказы. Плюсом такого метода является нивелирование отрицательных проскальзываний. Минусом — реджекты лимитных приказов могут искажать результаты.

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

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

Манипуляционное использование сигнальных сервисов


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

Стоит упомянуть еще один минус такой синхронизации — манипуляционная составляющая. Описанная ниже техника может кому-то напомнить layering. Но все же это другое. Наперед скажу, что нижеизложенное имеет смысл только для ECN (биржи) и ECN/STP-площадок.

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

Выставляете БОЛЬШИЕ BuyLimit и SellLimit вовнутрь спреда и делаете «спусковой крючек» — небольшой SELL (продаете себе же — BuyLimit). Это вызывает лавину SELL-приказов со стороны ваших подписчиков. Начинает заливаться ваш BuyLimit, т.е. расти BUY-поза. Что вызывает снова лавину, но уже BUY-приказов со стороны ваших подписчиков. Т.е. начинает заполняться ваш SellLimit.

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

Конечно, не обязательно лимитники выставлять на мастер-счете. Это можно сделать на вашем личном другом счете. Тогда получите перелив на него. Но мастер-счет будет иметьт небольшую просадку, что может оттолкнуть подписчиков.

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

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

Любые торговые действия на ECN (биржи) — всегда перелив денег с одних торговых счетов на другие. Поэтому демонизировать саму технику перелива просто глупо. Нужно просто понимать, что к чему.
Не надо забывать, что задача почти любого ММ-алгоритма — создать взаимовыгодные условия для перелива денег с чужих счетов на свои. Взаимовыгодность заключается в том, что сливающие делают это с меньшей скоростью, чем могли бы, если бы ММ-алгоритма не было. Бывают и исключения — нет взаимовыгодности.

Рыночные закономерности (не HFT)


Рынок характеризуется наличием различного рода закономерностей в каждый момент времени. Если обозначить N(t), как функцию количества закономерностей в зависимости от времени и построить ее график. То сразу бросятся в глаза провалы — резкое уменьшение количества рыночных закономерностей.

Эти провалы почти всегда соответствуют важным событиям, > 90% из которых являются плановыми — экономические новости по расписанию.

При поиске рыночных закономерностей разумно выбрасывать из анализа подобные периоды провалов N(t), как плановые, так и форс-мажорные. Выбрасывают еще и периоды явных отсутствий искомых закономерностей — специальный автоматизированный фильтр.

Такие действия позволяют значительно увеличить вероятность нахождения закономерности.

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

P.S.


Спасибо sergeev-у, с чьей подачи получилось начать и системно продолжить написание данного ликбеза.
Tags:МаркетмейкерыТоксичный потокSTPECN/STPECNКвантыКоинтеграцияАрбитражМаркапагрегаторPriceTakerPriceGiverHFTММ-алгоритмLevel2биржаFOREXOff-marketLastlookT&SАллокация ордеровМатчингDark-pool
Hubs: Algorithms
Total votes 83: ↑72 and ↓11+61
Views96K

Popular right now