Перед прочтением настоятельно рекомендую ознакомиться с прошлыми записями (если еще не сделали это):
1. Немного о маркетмейкерах.
2. Моделирование рынка.
3. Биржевой алгоритм.
4. Исполнение лимитных ордеров на бирже.
5. Маркетмейкинг, STP, ECN/STP.
6. Небольшая, но важная, терминология.
Торгуем арбитраж.
Допустим возникло желание заняться арбитражем. Для этого нужно, как минимум, создать коинтегрированный портфель. Самый простой коинтегрированный портфель состоит из двух одноименных символов: один у одного брокера, второй — у другого.
Возьмем, например, так популярный 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. Ну и, конечно, на самых концах этой сети находятся банки со своими ММ-алгоритмами.
p.s. традиционно напомню, что вы можете так же способствовать продвижению света в массы поставив + этой и предыдущим записям. Говорю прямо — для меня не маловажно, что-бы этот материал не канул в лету, а был прочитан максимальным количеством людей и повысил их грамотность.
Т.е. наличие арбитража (без учета торговых издержек) — ЗАКОН жизни.
вывел пост на главную
1 Вы серьезно хотите делать лэтэнси арбитраж? Вы считаете, что сможете конкурировать со стратегиями, которые обрабатываются на уровне железа, а не софта, или Вы считаете, что на Смарт-лабе есть такие?
Это очень маленькая ниша бизнеса, увы
2 Если думаете, что можно сарбитражить кухню, поговорите с создателем прады, можно, и даже особо не напрягаясь, но тяжело вывести с кухни
3 С прайм брокерами иметь дела вообще нельзя. Их комиссия перекроет любой арбитраж. Прайм брокера только для инвестиционной торговли подходят