← Atrás

Арбитраж и все все все

Бодрого дня, уважаемые коллеги и примкнувшие к ним товарищи. Ветка это есть продолжения краткой дискуссии про тематические парки и куртизанок, что была в скайпе. Предлагаю обсудить тему арбитража. Но прежде чем начать, хотел бы сразу попросить «выступить» всех у кого есть, что сказать по делу и они готовы это сказать. Утверждения типа «на этом можно хорошо зарабатывать имея и пару лямов» и прочие утверждения в стиле Капитана Очевидности лучше пока оставить для скайпа. Если готовы обсуждать открыто (благо форум закрытый – значит можно палить граали), то давайте попробуем. Так же хочу отметить, что я в этой теме пока как свин в апельсинах. Это связано в первую очередь с возможно не самыми глубокими познаниями в статистике и рядом других причин. Но для затравки попробую выступить первым. Хочу сразу поставить все точки над «и» в вопросах терминологии. Есть много разных обзывательств, касательно арбитража. Я предлагаю утвердить слудующее:

  • математический арбитраж – арбитраж при котором вероятность благоприятного исхода (гарантированного схождения)близка к 100% - это например игрища со спрэдами между ближним и дальним фьючом. Конечно говорить о 100% удаче не совсем корректно – черных леблядей никто не отменял.
  • риск-арбитраж – арбитраж между акциями компаний, затеявших сделку по слиянию (поглощению). В рамках данной темы предлагаю это не трогать ибо на нашем рынке это не актуально, а для буржуйского имеет смысл при наличии больших денег, кучи времени и хорошего понимания фундаментальных факторов.
  • межрыночный арбитраж – купили на ММВБ, продали на LSE. Трогать не будем ибо это дорого. -статистический арбитраж (парный трейдинг) – это именно то, что нам нужно. Назовем это арбитражем при котором ожидается, что спрэд (у нас вроде как это раздвижкой зовется) вернется к своему среднему значению в случае отклонения. При этом «среднее» может быть как и реально mean-reversing, так и 0-reversing (написал с ошибками наверно). Что брать за среднюю обсудим чуть позднее. «Участниками» парной торговли могут быть – акция+акция (для РФ работает), акция + индустриальный ETF (для РФ не работает), фьючерс-фьючерс (корзина фьючерсов – на РФ возможна, хотя и не всегда приятна), фьючерс-акция (возможна в РФ), ряд других вещей, которые на скудном рынке РФ никак не реализуются. Нас будет интересовать только два варианта: акция-акция (в том числе и американский рынок) и фьюч-фьючи (в том числе и американский рынок) Теперь посмотрим из каких «частей» складывается правильная «парная» торговля:
  • определение торгуемых инструментов
  • определение веса каждого инструмента в паре
  • определение точки (причины) входа в позицию
  • определение причины выхода из позиции -ведение позиции в течении сделки

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

1.Определение торгуемых инструментов. Для буржуев пары подбираются с учетом следующих факторов: акции должны находиться в одном секторе\индустрии, их корреляция должна быть как можно ближе к 1(-1). Первое требование обусловлено тем, что акции одного сектора будут одинаков реагировать на рыночные риски, имеют схожие операционные модели, ну и «слабые» всегда будут стремиться за «сильными». При работе с фьючерсами обычно также ищут фундаментальные взаимосвязи (например Нефть разных марок, индексы разных стран и т.д.) Что касается корреляции – тот тут я не встретил в литературе единого мнения – как правило указывается, что акции должны коррелировать и значения в 0.5 типа как уже достаточно. «Пацаны» на буржуйских форумах все-таки склоняются к тому, что это значение не должно быть ниже 0.7-0.8. Для нашего рынка это не актуально  ибо акции которыми можно торговать у нас имеют 0.9 и называются Газпромосбербанк. Некоторые продвинутые участники упоминают еще и необходимость коинтеграции, но мой скудный статистических багаж подсказывает, что добиться коинтеграции у высоко коррелированных инструментов гораздо проще. Но тут я могу быть не прав.

2.Определение веса инструмента. Тут опять же есть несколько подходов. Самый простой и самый неправильный – поделить один инструмент на другой и полученное значение будет множителем для определения веса инструмента в паре. Более продвинутые предлагают использовать формулу (цена А/бета А)/(цена Б/ бета Б). Даная фишка применима исключительно для акций, торгуемых в штатах (и условно применима для наших). Такой формулой мы учитываем волатильность инструментов относительно «эталона» которым в данном случае выступает индекс. Не могу сказать какие тут минусы ибо «глубоко» протестить это дело трудно так как самому бету считать заманаешься, а исторических данных найти в свободном доступе трудно. Еще одним способом является простое ATR A/ATR B. Работает для акций и фьючей но не совсем подходит для торговле фьюч-корзина фьючей (использует товарищь Кауфман). Попадались и иные способы (например с учетом исторической волатильности), но так или иначе все они учитывают волатильность инструментов и гораздо точнее работают нежели простая «дележка» инструментов. Для корзинки фьючей наибольший интерес предлагает метод предложенный (но не до конца раскрытый) Тарасом в его публикациях на русском трейдере.

3.Определение точки входа. Тут так же есть туча вариантов. Одни строят график спрэда и при отклонении на величину более 1.5-2-2.5(кто как) стандартного отклонения за некий промежуток времени открывают позу в надежде на возврат цены к своему среднему (стоит отметить что ст-откл. также можно посчитать по разному), кто-то в качестве фильтра еще считает Density curve. Однако у данного метода есть один неприятный момент – спрэд может не возвращаться к своему среднему значению достаточно продолжительное время. Нам же интересен короткий горизонт – не далече 3дней (ну или интрадейные колебания). Другие товарищи считают спрэд не по цене, а через формулу стохастика (без усреднения) и спрэдом для них являются разница двух стохастиков (это предлагает делать Кауфман) или же стохастик построенный по этой разнице взятый за несколько дней (автор он же). Тут у нас решается проблема возврата к «0». Есть и более изощренный вариант «от Тараса», где цена нормируется с целью избавления от «трендовой» составляющей и предполагается торговля при отходе от среднего.

4.Выход из позиции и управление позицией. Выход прямо зависит от причины входа – это или возвращение к «0» или к средней. Так же используется стоп при достижение порогового значения риска или стоп по времени удержания позы. Управление позой предполагает добавление к позиции с целью смещения точки безубыточности в случае неверного движения. Однако этот метод весьма требователен к депозиту и устойчивости задницы трейдера.

Ну вот собственно у меня все. Предлагаю высказаться по пунктам у кого есть что сказать.

¿Le resultó útil este tema?

Compartir tema

Comentarios (41)

Iniciar sesión o Crear cuenta, Inicie sesión o regístrese para dejar un comentario

Church
Church

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

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

library(rusquant)

getSymbols("SBER", from=Sys.Date()-30, src="Finam", period="15min")
getSymbols("SRZ1", from=Sys.Date()-30, src="Finam", period="15min")

spread <- OpCl(SBER) - OpCl(SRZ1)*100
plot(spread)

a = cbind(OpCl(SBER), OpCl(SRZ1))
cor(a, use="complete.obs")

Корреляция: OpCl.SBER OpCl.SRZ1 OpCl.SBER 1.000000 0.906915 OpCl.SRZ1 0.906915 1.000000

Разумеется, это не совсем корректный способ, зато простой и интуитивно понятный. Статистически более корректная процедура: http://quanttrader.info/public/testForCoint.html

Mikhail Sukhov
Mikhail Sukhov

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

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

Да, а ты чем рисует спред?

gambler_max
gambler_max Autor

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

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

library(rusquant)

getSymbols("SBER", from=Sys.Date()-30, src="Finam", period="15min") getSymbols("SRZ1", from=Sys.Date()-30, src="Finam", period="15min")

spread <- OpCl(SBER) - OpCl(SRZ1)*100 plot(spread)

a = cbind(OpCl(SBER), OpCl(SRZ1)) cor(a, use="complete.obs")

> 
> Корреляция:
>           OpCl.SBER OpCl.SRZ1
> OpCl.SBER  1.000000  0.906915
> OpCl.SRZ1  0.906915  1.000000
> 
> 
> Разумеется, это не совсем корректный способ, зато простой и интуитивно понятный. Статистически более корректная процедура: http://quanttrader.info/public/testForCoint.html

1.это на R? Блин я его вааще не понимаю...этоб...в экселе там....или еще куда :-(
2.По поводу ссылки. Не совсем понял почему предлагается в начале считать спрэд а потом проверять его? В книге на которую он ссылается более правильный ИМХО подход
gambler_max
gambler_max Autor

Mikhail Sukhov:

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

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

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

Church
Church

Mikhail Sukhov:

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

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

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

Комнтеграция тоже не страхует от того что модель рассыплется. В 2008 за пару месяцев статарб хеджфонды просели На 30-40% ак раз потому что конъюнктурные изменения разорвали коинтеграцию по некоторым инструментам.

График строился встроенными средствами R plot(spread)

Church
Church

gambler_max:

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

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

library(rusquant)

getSymbols("SBER", from=Sys.Date()-30, src="Finam", period="15min") getSymbols("SRZ1", from=Sys.Date()-30, src="Finam", period="15min")

spread <- OpCl(SBER) - OpCl(SRZ1)*100 plot(spread)

a = cbind(OpCl(SBER), OpCl(SRZ1)) cor(a, use="complete.obs")

> >
> > Корреляция:
> >           OpCl.SBER OpCl.SRZ1
> > OpCl.SBER  1.000000  0.906915
> > OpCl.SRZ1  0.906915  1.000000
> >
> >
> > Разумеется, это не совсем корректный способ, зато простой и интуитивно понятный. Статистически более корректная процедура: http://quanttrader.info/public/testForCoint.html
> 
> 1.это на R? Блин я его вааще не понимаю...этоб...в экселе там....или еще куда :-(
> 2.По поводу ссылки. Не совсем понял почему предлагается в начале считать спрэд а потом проверять его? В книге на которую он ссылается более правильный ИМХО подход
R - та еще сволочь, там реализованы все стат методы в мире, поэтому решение задачи сводится к поиску нужного пакета и чтению доков, чтобы разобраться, как именно автор предполагал использование его пакета. В результате получается быстро, но больно (сначала). Кроме того, предполагается статистическая подготовка. 

В статье я сам не разбирался, нагуглил и линканул. Но я знаю, что робастое тестирование коинтеграции - не самая простая штука.
Church
Church

Кстати, высокая коинтеграция при низкой корреляции означает что спреды больше, а значит и профит mean reversion стратегий выше.

gambler_max
gambler_max Autor

Church: Кстати, высокая коинтеграция при низкой корреляции означает что спреды больше, а значит и профит mean reversion стратегий выше. следовательно сильно выше и риск. а в принципе, если взять и составить "блок-схему" вычисления коинтеграции, то наверно можно силами того же Си-шарпа реализовать ее в виде ДЛЛ к софту по трейдингу - тому-же Амиброкеру к примеру. http://quanttrader.info/public/betterHedgeRatios-slides.pdf - очень интересно (там есть еще и текстовый вариант) Но в любом случае - он считает спрэд как разницу двух инструментов (как я понял) и вопрос перевода из R в приятное что-то не отпадает

Mikhail Sukhov
Mikhail Sukhov

Church: Кстати, высокая коинтеграция при низкой корреляции означает что спреды больше, а значит и профит mean reversion стратегий выше.

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

Church
Church

Без R ты без проблем можешь строить спреды и изучать графики в экселе. Регрессию фитить вроде тоже можно, с помощью дополнительных пакетов, и весь процесс довольно извращенный. Не думаю, правда, что это будет эффективно. Переводить все в C#, мне кажется, имеет смысл уже только для продакшна (разумеется если продакшн в C#).

gambler_max
gambler_max Autor

Church: library(rusquant) getSymbols("SBER", from=Sys.Date()-30, src="Finam", period="15min") getSymbols("SRZ1", from=Sys.Date()-30, src="Finam", period="15min") spread <- OpCl(SBER) - OpCl(SRZ1)*100 plot(spread) a = cbind(OpCl(SBER), OpCl(SRZ1)) cor(a, use="complete.obs") Вернемся к нашему гондурасу. В начале пара вопросов по коду. ВОт это spread <- OpCl(SBER) - OpCl(SRZ1)*100 как я понимаю "в простом" языке говорит "Из сбера вычесть фьюч). Вопросы 1.OpCl - это как правильно интерпретировать? 2.Почему фьючь умножается на 100? Ведь во фьюче и так 100 акций?. Не правильнее ли умножать сам сбер

Church
Church

gambler_max:

Church: library(rusquant) getSymbols("SBER", from=Sys.Date()-30, src="Finam", period="15min") getSymbols("SRZ1", from=Sys.Date()-30, src="Finam", period="15min") spread <- OpCl(SBER) - OpCl(SRZ1)*100 plot(spread) a = cbind(OpCl(SBER), OpCl(SRZ1)) cor(a, use="complete.obs") Вернемся к нашему гондурасу. В начале пара вопросов по коду. ВОт это spread <- OpCl(SBER) - OpCl(SRZ1)*100 как я понимаю "в простом" языке говорит "Из сбера вычесть фьюч). Вопросы 1.OpCl - это как правильно интерпретировать? 2.Почему фьючь умножается на 100? Ведь во фьюче и так 100 акций?. Не правильнее ли умножать сам сбер OpCl это Close/Open. И да, вы правы, этот код неправильный (писал второпях). Правильный:

#install.packages("quantmod")
#install.packages("rusquant", repos="http://R-Forge.R-project.org")

library(rusquant)

getSymbols("SBER", from=Sys.Date()-2, src="Finam", period="5min")
getSymbols("SRZ1", from=Sys.Date()-2, src="Finam", period="5min")

spread <- Cl(SBER)*100 - Cl(SRZ1)
plot(spread)

a = cbind(OpCl(SBER), OpCl(SRZ1))
cor(a, use="complete.obs")

Правильная картинка:

gambler_max
gambler_max Autor

А можно ли пример результата по такому арбитражу - чтобы бэнчмарк какой-то иметь. Я тут поупрожнялся немного Пока посчитаем спрэд «по колхозному» - берем формулу =(Закрытие-МИН(закрытий за предыдущие 8 баров))/(МАКС(Хай за 8 баров)-МИН(Лоу за 8 баров)) и вычисляем для Сбера и его Фьюча. После этого берем эти два значения и вычисляем разницу (спрэд) между ними. Берем этот спрэд и через формулу=100*(спрэд на текущем баре-МИН(спрэд за 8 баров))/(МАКС(спрэд за 8 баров)-МИН(спрэд за 8 баров)) получаем значение спрэда который колбасится в виде стохастика. Далее пишем, что если этот стохастико_спрэд меньше 5 баим сбер и селим фьюче_сбер и если он больше 95 то наоборот. Выход при пересечении спрэдом 50 в ту или иную сторону. Далее достаем из широких штанин бабло в размере достаточном для торговли 100 лотами акций (100*100=10000 акций) и примерно 100 штук фьюча. Соотношение ног ходит в диапазоне от 90 до 130 контрактов фьюча к 100лотам живых акций. Имеем просто граальную картинку Задерг в самом конец вызван скорее всего какими то кривостями в котировках. Грааль нарисован на промежутке в 3 месяца на 5 минутках. В итоге вот что имеем: профит 252 000рублей. Комиссии и проскальзывание не учитываем (для чистоты эксперимента) При этом около 154000 принес «живой сбер» и 94000 его фьюч. Если прикинуть в рублях сколько денег вливается в сделки то доходность этого грааля около 20% за 3 месяца или что-то коло 80% без реинвестирования в год А теперь печалько. Было совершено 1292 входа в позу. Учитывая что мы оперируем 100 лотов на акции 100 контрактов фьюча – мы имеем то, что спрэд + комиссия +прочая хрень делает этот вариант арбитража на 5 минутках не самым благодарным занятием. Ну вот поэтому хотелось бы понять какой на какой резалт стоит обратить внимание

Church
Church

Не понял логику таких вычислений. Да и зачем так. Главный игрок у нас тут - спред, т.к. именно от него образовывается Финансовый результат. Думаю для классического арбитража нужно что-то такое: Построить временной ряд спреда за последние дни, убедиться (визуально) что он стационарный Вычислить средний спред и сатандартное отклонение Выбрать порог входа и порог выхода. Например, входим когда спред уходит в +1 станд.откл. от средней, выходим когда он уходит в -0.5 - и наоборот. Так же выбрать стоп, например, 5 стд. откл. Все что нужно для бэктеста есть (лучше на тиках).

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

gambler_max
gambler_max Autor

Church: Не понял логику таких вычислений. Да и зачем так. Главный игрок у нас тут - спред, т.к. именно от него образовывается Финансовый результат. Думаю для классического арбитража нужно что-то такое: Построить временной ряд спреда за последние дни, убедиться (визуально) что он стационарный Вычислить средний спред и сатандартное отклонение Выбрать порог входа и порог выхода. Например, входим когда спред уходит в +1 станд.откл. от средней, выходим когда он уходит в -0.5 - и наоборот. Так же выбрать стоп, например, 5 стд. откл. Все что нужно для бэктеста есть (лучше на тиках).

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

ну так расчет и строится на спрэде. Ты в своем примере делишь опен на клоуз, я делю приращение закрытия на диапазон. Другое дело что у тебя спрэд в последствии должен усредняться (как ты и говоришь в последнем посте) я же его перевожу в вариант стохастика. У нас фьючи тяготеют не к направленному движению а к "расколбасу" (хотя не так ярко выраженно как тот же Рассел или Сиплый), поэтому логично вполне делать его вокруг "0". Хотя я не настаиваю что вариант едиснтвенно верный и правильный.

А если у вас результат отрицательный...значит надо искать еще :-)

Church
Church

В моем изначальном примере была неправильная формула. Правильная: spread <- OpCl(SBER) - OpCl(SRZ1)*100 В случае когда арбитраж детерминированный и спред обречен на mean reversion.

gambler_max
gambler_max Autor

Church: В моем изначальном примере была неправильная формула. Правильная: spread <- OpCl(SBER) - OpCl(SRZ1)*100 В случае когда арбитраж детерминированный и спред обречен на mean reversion. не понял - тогда опять возвращаемся к вопросу - почему фъюч на 100 умножаем. У нас тогда перекос получается

gambler_max
gambler_max Autor

gambler_max:

Church: В моем изначальном примере была неправильная формула. Правильная: spread <- OpCl(SBER) - OpCl(SRZ1)*100 В случае когда арбитраж детерминированный и спред обречен на mean reversion. не понял - тогда опять возвращаемся к вопросу - почему фъюч на 100 умножаем. У нас тогда перекос получается сам себе отвечу - а зачем там вообще нужно на 100 умножать любую из сторон???

Church
Church

gambler_max:

gambler_max:

Church: В моем изначальном примере была неправильная формула. Правильная: spread <- OpCl(SBER) - OpCl(SRZ1)*100 В случае когда арбитраж детерминированный и спред обречен на mean reversion. не понял - тогда опять возвращаемся к вопросу - почему фъюч на 100 умножаем. У нас тогда перекос получается сам себе отвечу - а зачем там вообще нужно на 100 умножать любую из сторон??? Блин, потому что я опять не ту формолу процитировал. :( см. правильную выше. Потому что фьючь котируется в размере 100 акций базиса.

gambler_max
gambler_max Autor

Church:

gambler_max:

gambler_max:

Church: В моем изначальном примере была неправильная формула. Правильная: spread <- OpCl(SBER) - OpCl(SRZ1)*100 В случае когда арбитраж детерминированный и спред обречен на mean reversion. не понял - тогда опять возвращаемся к вопросу - почему фъюч на 100 умножаем. У нас тогда перекос получается сам себе отвечу - а зачем там вообще нужно на 100 умножать любую из сторон??? Блин, потому что я опять не ту формолу процитировал. :( см. правильную выше. Потому что фьючь котируется в размере 100 акций базиса. блин я то недоумеваю про это OpCl(SRZ1)*100 - тут не важно что у тебя умножается, раз ты опен на клоуз делишь то 100 не спасет, а вот если слоуз акции тогда согласен :-)

Jeta
Jeta

В данном случае "OpCl(SRZ1)*100" - неправильно, автор также ведь потом исправился))) Правильно будет: spread <- OpCl(SBER)100 - OpCl(SRU2) plot(spread) Ведь иначе, смысл арбитража теряется. Мы должны получить "справедливую цену" спота, чтобы отлавливать спред. Умножая спот100, мы тем самым, приводим цены спота, к общему знаменателю, в последствии удобным для торговли фьючерсом... Использование OpCl(SRZ1) - думаю (если я не прав, поправьте!) попытка усреднить спред за определенный интервал времени...

VirKato
VirKato

jTr: В данном случае "OpCl(SRZ1)*100" - неправильно, автор также ведь потом исправился))) Правильно будет: spread <- OpCl(SBER)100 - OpCl(SRU2) plot(spread) Ведь иначе, смысл арбитража теряется. Мы должны получить "справедливую цену" спота, чтобы отлавливать спред. Умножая спот100, мы тем самым, приводим цены спота, к общему знаменателю, в последствии удобным для торговли фьючерсом... Использование OpCl(SRZ1) - думаю (если я не прав, поправьте!) попытка усреднить спред за определенный интервал времени...

Хм, как я понял сообщения выше: OpCl - это доход инструмента за период. Тогда логика его использования следующая: если спот двинулся на 1% вверх, а фьюч двинулся на 3%, то велика вероятность, что в следующий момент времени бумага будет двигаться быстрей фьюча. В конце концов на экспирации они должны быть в одной точке. Только вот зачем там коэффициент 100, если это доходность? (Sber(t)*100)/(Sber(t-1)*100) == Sber(t)/Sber(t-1)

p.s. ну да, gambler max до меня уже этим интересовался, но ему так и не ответили.

Jeta
Jeta

Кстати, вопрос в тему, как Вы тестируете арбитражные стратегии? С помощью каких инструментов? Для себя лишь выделил следующее: -Matlab; -R; Честно, разрываюсь между Matlab и R. Поделитесь, если не затруднит, на чем из 2-х выше перечисленных, стоит остановиться и если возможно, простенький примитивный пример...

Юрий1969
Юрий1969

Jeta: Кстати, вопрос в тему, как Вы тестируете арбитражные стратегии? С помощью каких инструментов? Для себя лишь выделил следующее: -Matlab; -R; Честно, разрываюсь между Matlab и R. Поделитесь, если не затруднит, на чем из 2-х выше перечисленных, стоит остановиться и если возможно, простенький примитивный пример...

По тестированию можно сюда обратиться http://robinzonmoney.livejournal.com/ Там же и готовая платформа для торговли любого количества пар. Правда только для ФОРТСа

Андрей Шабанов
Андрей Шабанов

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

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

Mikhail Sukhov
Mikhail Sukhov

Андрей Шабанов: По своему опыту:

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

MatLab лучше R по множеству парамертров. Исчерпывающее сравнение на английском http://stackoverflow.com/a/1738309

Другое дело, что вопрос стоит наверняка в плоскости, что лучше, МатЛаб, приобретенный через торрент, против Р. Ведь МатЛаб стоит денег, а R бесплатен. И Матлаб стоит для компании куда дороже, чем для частного использования.

transdex
transdex

Однако, старовата ссылочка... Вот поновее: http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

Mikhail Sukhov
Mikhail Sukhov

transdex: Однако, старовата ссылочка... Вот поновее: http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

Ссылочка рассказывает о языках вообще. На Сях не видел ни одной платформы по трейдингу. Вот более менее предметная статистика (фильтр по финансовой группе):

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

transdex
transdex

Неправильное использование Google Trends детектед. Почему неправильно и как правильно см. тут Поэтому должно получится что-то вроде этого. Или как-то так.

Ну и отдельно по группам языков можно посмотреть тут: http://lang-index.sourceforge.net/

Откуда следует, что каждого своя правда... Но Python пока рулит.

А вот и Грааль 😀 Statistical arbitrage with Python

NOTE: For the impatient/curious, the model gives about 12% annual returns with Sharpe ratio=5 and maximum drawdown=0.5% with $0.005/per share transaction costs. Jump to the end of this notebook to see the plots.

PS. По поводу бесплатности R. Местами да, местами нет. Слышал краем уха, что десктоп версия "Revolution R Enterprise" стоит $4500.

JaguarFX
JaguarFX

Михаил, можно попросить вас сделать в следующей версии S#.API тестовый пример парного трейдинга!!! Иначе все эти разговоры про парный трейдинг на основе платформы StockSharp для рядовых пользователей так и остаются только разговорами - разобраться как спрограммировать такую стратегию самостоятельно практически не представляется возможным. Так я потратил массу времени и сил в попытке запустить парный трейдинг через WeightedIndexSecurity, но выяснил что продать/купить в нужном направлении сразу несколько инструментов продавая/покупая в стратегии WeightedIndexSecurity невозможно.

RomSunZ
RomSunZ

Что мешает запустить несколько отдельных стратегий на покупку/продажу разных инструментов?

devruss
devruss

RomSunZ: Что мешает запустить несколько отдельных стратегий на покупку/продажу разных инструментов?

4 раза пересекать bid/ask spread убивает львиную долю прибыли

Сергей Гаврилов

devruss:

RomSunZ: Что мешает запустить несколько отдельных стратегий на покупку/продажу разных инструментов?

4 раза пересекать bid/ask spread убивает львиную долю прибыли А синтетика пересекать не будет что ли?

RomSunZ
RomSunZ

devruss:

RomSunZ: Что мешает запустить несколько отдельных стратегий на покупку/продажу разных инструментов?

4 раза пересекать bid/ask spread убивает львиную долю прибыли

😳 Есть другие варианты?

JaguarFX
JaguarFX

Доходность того варианта парного трейдинга, который я хочу закодить (http://robotcraft.ru/vstroeniestrategii/arbitrag/89-arbitrag-difference) не зависит от пересечений стакана, а только от частоты колебания спреда за период в достаточно узком канале. Вариант с 2-мя одновременно работающими стратегиями совсем не лучшее решение, так как аналитика там единая.

Сергей Гаврилов

lebedevsrg: Доходность того варианта парного трейдинга, который я хочу закодить (http://robotcraft.ru/vstroeniestrategii/arbitrag/89-arbitrag-difference) не зависит от пересечений стакана, а только от частоты колебания спреда за период в достаточно узком канале. Вариант с 2-мя одновременно работающими стратегиями совсем не лучшее решение, так как аналитика там единая.

А... Это стратегия, которую Давид Серебренников "многоуровневым маркетмейкингом" называет. Уже как 7 лет о ней говорит, даже хедж-фонд под нее создал... Особо не обольщайтесь.. В принципе эта стратегия рабочая, но требует использования множества пар для диверсификации..

RomSunZ
RomSunZ

lebedevsrg: Доходность того варианта парного трейдинга, который я хочу закодить (http://robotcraft.ru/vstroeniestrategii/arbitrag/89-arbitrag-difference) не зависит от пересечений стакана, а только от частоты колебания спреда за период в достаточно узком канале. Вариант с 2-мя одновременно работающими стратегиями совсем не лучшее решение, так как аналитика там единая.

Запускайте котирование на вход/выход по инструментам из Вашей единой аналитики, там же и следите за позициями и ценами входа, в чем сложность-то? S# по барабану сколько котирований запущено и по каким направлениям...

JaguarFX
JaguarFX

Понятно что все можно реализовать написав кучу кода. Но это концептуально неверно - если в StockSharp имеется инструмент типа WeightedIndexSecurity, то стратегия (объект типа Strategy) должна с ним нормально работать:

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

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

Mikhail Sukhov
Mikhail Sukhov

lebedevsrg: если в StockSharp имеется инструмент типа WeightedIndexSecurity, то стратегия (объект типа Strategy) должна с ним нормально работать

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

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

С т.з. разработки - это неправильно. Мы предоставляем возможность и для pair trading и для арбитража. Инструменты есть. Работают они на низком уровне. Делать надстройки нет ни причины ни возможностей. Это все равно что создавать разработчикам платформы еще и стратегии. Этим занимаются сами пользователи.

JaguarFX
JaguarFX

Михаил, вполне возможно что отсутствие таких функций дает дополнительный простор для творчества пользователей... Но все же было бы очень здорово если в S.API Samples появился бы хоты бы один простой пример.

Mikhail Sukhov
Mikhail Sukhov

Повторюсь.

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