Коинтеграция — свойство нескольких нестационарных временных рядов, заключающееся в существовании некоторой их стационарной линейной комбинации. Концепция коинтеграции впервые была предложена Грэнджером в 1981 году. В дальнейшем данное направление развивали Энгл, Йохансен, Филипс и другие.
Представьте, что у вас много торговых инструментов. Если существует возможность купить/продать эти инструменты таким образом, чтобы прибыль колебалась возле какого-то не сильно изменяющегося значения, то такие инструменты коинтегрированы. Такая комбинация инструментов называется коинтегрированным портфелем. Классический пример такого портфеля: актив и фьючерс на него.
Арбитраж — совершение сделки по коинтегрированному портфелю так, чтобы после ее закрытия был положительный профит. Любой портфель имеет Bid и Ask-цены. Более того, имеет свой Level2 (несложно вычисляется из Level2 инструментов, в него входящих).
Маркап — ухудшение цены (Level2) на определенную величину. Например, брокер может ухудшать цены, чтобы зарабатывать на этом. Может пойти на маркетинговый шаг — обнуление комиссии (кликеры не любят сложностей), но занесение ее в маркап.
Допустим возникло желание заняться арбитражем. Для этого нужно, как минимум, создать коинтегрированный портфель. Самый простой коинтегрированный портфель состоит из двух одноименных инструментов (для форекс) : один у одного брокера, второй — у другого.
Возьмем, например, EURUSD и дадим инструментам для удобства названия: EURUSD1 и EURUSD2. Важно понимать, что EURUSD1 и EURUSD2 — это совершенно разные инструменты. Они могли бы вообще по-другому называться у брокеров, иметь на порядок разные цены и другие отличия. Важно лишь только одно — они коинтегрированы.
Но для простоты будем рассматривать элементарный случай: EURUSD1 и EURUSD2.
Перед тем, как сравнивать цены, делается алгоритмический маркап на них для того, чтобы внести в них все возможные торговые издержки (качество исполнения для каждого брокера и комиссии для каждого брокера). Будем далее считать, что все цены уже замаркаплены.
Итак, у каждого брокера у вас имеются торговый счет с определенными деньгами. Если очень примитивно смотреть на арбитраж, то требуется находить моменты Ask1 < Bid2 и Ask2 < Bid1. И в эти моменты открывать/закрывать противоположные позиции у каждого из брокеров. Это простейшая и лобовая реализация. Сделаем небольшое отступление в сторону более обобщенного и универсального алгоритма.
В данном случае коинтегрированность портфеля говорит о том, что S = EURUSD1 / EURSD2 колеблется возле единицы. У этого S имеются свои S_Bid и S_Ask (S_Level2) цены. Если возможно построить ЗигЗаг с экстремумами на S_Bid и S_Ask, то наш портфель S является арбитражным.
Часто оправдано создание чего-то высокоуровневого для удобства торговли.
Для арбитража это высокоуровневое делается так: Берутся замаркапленные 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 — агрегатор, где клиенту разрешается быть только PriceTaker-ом. Это значит, что клиенты не в состоянии формировать свои заявки, на которые кто-либо смог бы согласиться.
Они могут только принимать предложения от PriceGivers. Как говорилось ранее, агрегатор представляет из себя некий высокоуровневый виртуальный торговый сервис.
Поэтому все лимитные заявки клиентов STP-агрегатора являются виртуальными и хранятся на сервере агрегатора. Как следствие, если кто-то возьмет в качестве LP себе 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 — как агрегатор, алгоритмически идентичен STP. Единственное отличие — в агрегацию добавляется новый виртуальный LP — LP0: заявки клиентов агрегатора.
Таким простым приемом клиенты ECN/STP-агрегатора становятся еще и PriceGivers. Это обозначает, что клиенты могут совершать между собой сделки фактически напрямую.
Чем больший оборот приходится на LP0, тем выгоднее ECN/STP-агрегатору, т.к. в отличие от других LP, LP0 не требует за свое использование агрегатором платить комиссию. Более того, поток торговых приказов, приходящийся на LP0, ни в коей мере не может быть характеризован, как токсик. Т.к. это уже торговля клиентов между собой, даже если среди них будут ММ-алгоритмы.
Но надо четко понимать, чтобы иметь возможность быть PriceTaker-ом для LP0-PriceGiver-ов ECN/STP-агрегатора, нужно быть его клиентом. Т.е. клиенты других агрегаторов не могут воспользоваться иногда великолепными (наилучшими) ценовыми предложениями LP0.
Например, вы торгуете в двух агрегаторах. В ECN/STP выставляете лимитник внутрь спреда, улучшив Bid или Ask. Но в другом агрегаторе вы не сможете сами у себя купить/продать по этой цене, т.к. они не видны. Т.е. вы купите/продадите, скорее всего, по менее выгодной цене, чем предложенная вашим лимитником.
Достоинство 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-агрегаторы.
С наступающем Новым Годом!!!