Блог им. openfx

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

    • 01 ноября 2013, 17:08
    • |
    • openfx
  • Еще
Перед прочтением настоятельно рекомендую ознакомиться с прошлыми записями (если еще не сделали это):
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. традиционно напомню, что вы можете так же способствовать продвижению света в массы поставив + этой и предыдущим записям. Говорю прямо — для меня не маловажно, что-бы этот материал не канул в лету, а был прочитан максимальным количеством людей и повысил их грамотность.
★50
11 комментариев
Неужели бывает что бид по Евро у одного брокера больше чем аск у другого????
Арбитраж — это следствие ненулевого latency. Ненулевой latency — следствие ненулевого географического расстояния между источниками цен и не бесконечной вычислительной мощности.
Т.е. наличие арбитража (без учета торговых издержек) — ЗАКОН жизни.
avatar
openfx, если не хочешь чтобы материал канул в лету, пиши мне.
вывел пост на главную
openfx,
1 Вы серьезно хотите делать лэтэнси арбитраж? Вы считаете, что сможете конкурировать со стратегиями, которые обрабатываются на уровне железа, а не софта, или Вы считаете, что на Смарт-лабе есть такие?
Это очень маленькая ниша бизнеса, увы
2 Если думаете, что можно сарбитражить кухню, поговорите с создателем прады, можно, и даже особо не напрягаясь, но тяжело вывести с кухни
3 С прайм брокерами иметь дела вообще нельзя. Их комиссия перекроет любой арбитраж. Прайм брокера только для инвестиционной торговли подходят
avatar
Lafert, кухни это совсем необязательно, можно брать брокеров вроде саксо банка, которые предоставляют собственные cfd
avatar
Давно уже руки чешутся попробовать поискать торговые стратегии для синтетической цены. Быть может, например, что в синтетике ES — NQ будет проще найти закономерности. Думаю прибыль на единицу инструмента будет ниже, но ниже и риск. Вопрос только в том, можно ли получить лучшее соотношение прибыли и риска.
avatar
ivanovr, ES NQ не арбитраж, а парный трейдинг :> И кстати вместо nq лучше брать YM — корреляция там получше.
avatar
v3Rtex, ну если «EURUSD1 и EURUSD2 — это совершенно разные символы. Они могли бы вообще подругому называться у брокеров, иметь сильно (на порядок, например) разные цены и другие отличия. Важно лишь только одно — они коинтегрированы», то я бы арбитражем это не называл. Скорее таки парный трейдинг.
avatar
Хороший материал, есть над чем подумать.
avatar
Все возможности такого арбитража предусмотрены механизмом реджекта в течении 200 мс… Ваши прибыльные сделки просто не выполнять. Теория хорошо, а на практике ;(
avatar

теги блога openfx

....все тэги



UPDONW
Новый дизайн