Блог им. egenui

Quantitative trading for dummies. Part 2 (Корреляция коинтеграция)

Добрый день! Перед вами вторая часть цикла статей Quantitative trading for dummies. Сегодня поговорим о корреляции и коинтеграции.  И так, я снова постараюсь обьяснить все максимально доступно и без страшных формул.

    В качестве примера для объяснения я возьму часто приводимый жизненный пример «Пьяницы и собака».
Представьте себе что два алконавта идут по улице, движение алконавтов случайно. Это можно изобразить следующим образом.
Quantitative trading for dummies. Part 2 (Корреляция коинтеграция)
    Теперь представим что на сторонах улицы находятся бары, и каждый алконавт услышав рекламу бара шагает в его сторону с определенной вероятностью. О таких временных последовательностях говорят что они коррелированны. На графике это можно представить следующим образом. 
Quantitative trading for dummies. Part 2 (Корреляция коинтеграция)

    Представьте, что один из алконавтов идет с собакой на поводке, движение алконавта по прежнему случайно, но вот движение собаки ограничено поводком ( тут кстати можно поспорить, чье движение случайно, а чье ограничено поводком). Несмотря на то что по отдельности кривые очень напоминают случайно блуждание они никогда не расходятся на расстояние большее чем поводок, и всякий раз, после разбредания в разные стороны, они снова стремятся друг другу, так как величина поводка ограничена. О таких временных последовательностях говорят, что они коинтегрированы. Коинтеграция является гораздо более важным понятием в теории временных рядов, чем корреляция.
Quantitative trading for dummies. Part 2 (Корреляция коинтеграция) 
    Теперь вернемся к финансам. Представьте что вы нашли две акции движение цен которых сильно коррелировано друг с другом, значит ли это что  если их движение сильно разошлось то можно продать дорогую бумагу и купить дешевую (продать спред). Нет не значит! Цена может не сойтись никогда! Совершенно другое дело когда два ряда коинтегрированны, если в какой-то момент времени их цены разошлись то мы можем продать дорогую и купить дешевую. Только вот вопрос, как найти такой ряд.

Коинтеграция  
    Прежде всего, стоит все-таки определить, что такое коинтеграция. Существует точное математическое определение коинтеграции: 

  • Если некоторая линейная комбинация двух временных рядов имеет порядок интегрирования меньший чем порядок интегрирования каждого из рядов, то говорят, что временные ряды коинтегрированы.
Определение тяжеловато, и слишком общее, разберемся подробнее. 
   
    Что такое стационарный временной ряд? Если совсем просто, то это временной ряд свойства которого не меняются во времени. Т.е. если мы возьмем некий его отрезок, посчитаем стандартные статистические характеристики, такие как математическое ожидание или дисперсию, мы должны получить одинаковые величины, в пределах погрешности, естественно. Пример чистого стационарного ряда это к примеру случайное блуждание, либо синусойда.
data <- rnorm(50)  
plot(data, type='l', col='red')
Quantitative trading for dummies. Part 2 (Корреляция коинтеграция) 
Стационарный временной ряд имеет порядок интегрирования 0. Обратное не верно. Возьмем теперь стационарный ряд X1, X2… Xn, и преобразуем его в следующий ряд: Y1 = X1, Y2 = Y1 + X2,… Yn = Yn-1 + Xn  получившийся ряд имеет порядок интегрирования 1. Если вернуться к определению, то временной ряд имеет порядок интегрирования 1 если ряд его приращений имеет порядок интегрирования 0. Аналогично можно определить более высокие порядки интегрирования. Рассмотрим пример ряда, интегрированого с порядком 1: 
data <- cumsum(rnorm(500))  
plot(data, type='l',col="red")
 Quantitative trading for dummies. Part 2 (Корреляция коинтеграция)
Сумма случайных блужданий является примером такого ряда. Теперь мы можем переформулировать определение коинтеграции в применении для цен.

  • Два временных ряда цен коинтегрированны если мы можем найти такую их линейную комбинацию, которая является стационарным временным рядом.
 Прочтите еще раз определение и поймите его! Представьте скажем что вы посчитали спред, построили его на графике, а он выглядит вот так.
Quantitative trading for dummies. Part 2 (Корреляция коинтеграция) 
В таком случае вам конечно же не придется проверять ряд на стационарность, по графику и так все видно.

Перейдем к практике
    В реальной жизни вы конечно же не получите спред похожий на синусойду. Возьмем цены двух компаний, пусть будут TATN и TATNP. Посчитаем спред и проверим полученный ряд на стационарость, что бы понять, являются ли наши ряды (TATN, TATNP) коинтегрированны. И если это так, то мы можем торговать статистический арбитраж. И так, для начала построим отношение цен акции TATN к TATNP, спред можно строить так же вычитая TATN- TATN * hadge coeficent. Что такое hadge coeficent это коэффициент b полученный из линейной регрессии, вы можете прочесть об этом в первой части. И так, строим спред!
getSymbols("TATN", from=Sys.Date()-360, src="Finam", period='day')
getSymbols("TATNP", from=Sys.Date()-360, src="Finam", period='day')
data <- cbind(Cl(TATN),Cl(TATNP))
data <- data[complete.cases(data)]
ratio <- c(data[,1]/data[,2])
chartSeries(ratio, theme = chartTheme("white", up.col='black'), name = 'TATN/TATNP')
 Quantitative trading for dummies. Part 2 (Корреляция коинтеграция)
 
И так, мы видим на глаз что спред все же похож на стационарный ряд, давайте проверим это! Для этого существует тест Тест Дики-Фуллера это далеко не единственный тест на стационарность, но в данном примере мы используем именного его. Результат: 

Quantitative trading for dummies. Part 2 (Корреляция коинтеграция) 
Видим, что. p-value мал, и отсюда можем утверждать, что действительно TATN и TATNP коинтегрированны. Что подтверждается визуально на графике: 
plot(as.vector(TATN$TATN.Close), col='blue', type='l', main='Cointegration TATN и TATNP', ylab='price')  
lines(as.vector(TATNP$TATNP.Close*coef(model)[2]+coef(model)[1]), col='red', type='l')
Quantitative trading for dummies. Part 2 (Корреляция коинтеграция)
Обратите внимание на строку в коде TATNP$TATNP.Close*coef(model)[2]+coef(model)[1]. В первой часте я писал что линейная регрессия потребуется в парном трейдинге. Можно ее переписать так.
TATN$TATN.Close = TATNP$TATNP.Close*coef(model)[2]+coef(model)[1].
Это линейное уравнение, линейной регрессии из первой части, где coef(model)[2] — Коэффициент b, а coef(model)[1] — коэффициент a, а сам спред по сути является остатками (Residuals). Обо всем это я писал в предыдущей части!

Заключение: И так, мы разобрались что же такое корреляция и коинтеграция, и убедились что ряд цен акции TATN и TATNP коинтегрированны, а следовательно годятся для торговли стратегии статический арбитраж. Теперь вы можете строить свои арбитражные стратегии опираясь на полученный опыт. Не стоит сбрасывать со счетов корреляцию, опираясь на этот эффект существует целый пласт импульсных стратегий, об этом поговорим в других частях. 
★30
17 комментариев
у Вас интересные статьи. у Вас есть план публикаций? было бы очень полезно, если бы кто-то осилил публикации, как говорится «от и до», а не дискретно, разбирая какой-то метод. P.S: лично мне больше нравится торговать спреды по сетке (у Давида Серебрянникова) есть цикл статей на эту тему. Так же у Carol Alexander есть много по коинтеграции, но красиво в теории, а на практике как-то не очень здорово.
avatar
sheffield, плана нет, я думаю будет не более 20 статей. Серебрянникова читал, про баскет трейдинг тоже будет.
avatar
кто-нить стабильно зарабатывает на парном трейдинге?
avatar
Mr. Bean, Феникс точно, так же команда робота aspirant торгует статистический арбитраж
avatar
Евгений, на чём такая уверенность основана?
avatar
Mr. Bean, Ну они сами говорили об этом, по крайне мере феникс говорил что его стратегии в основном маркет-нетрал, арбитраж. Про команду аспиранта www.fomag.ru/ru/news/intlife.aspx?news=2106
avatar
Mr. Bean, стабильно зарабатывает пока не сольет. это тоже происходит стабильно с парщиками
Добрый человек, вы зря так считаете. Да, бывают случаи, когда ломается арбитраж, но из этого есть выход. И ни какого слива не происходит.
avatar
Yuri Chebotarev, я конкретно про парный. арбитраж на то и арбитраж что практически безубыточный
Как спред из двух НЕСТАЦИОНАРНЫХ рядов может быть стационарным? Коинтеграция — это херня, которая в реальности не работает. Только в воспаленных фантазиях теоретиков и околорыночников. В свое время торговал много спредов, которые не коинтегрированы, но которые давали хороший профит, возвращаясь к среднему.

А вообще не рекомендую торговать парный трейдинг категорически. При тех-же результатах, если не хуже — вы платите удвоенные комиссии и прочие издержки.
avatar
Злой Инвестор, может быть. Только речь идет о квази-стационарности рядов. Для этого и применяется тест Дики-Фуллера.
avatar
Убедился в том, что на бирже работают замечательные куклороботы, которые фигачат спред между базовым активом (акциями, валютой) и фьючерсами. Их просто так не переиграешь.
Правда, бывают шпильки, но без робота их поймать нереально.
Интересная статья, спасибо! А поясните, пожалуйста, почему TATN сравнивается с линейной регрессией TATNP? Ведь для покупки при арбитраже будет испоьзована цена TATNP, кот. может быть в моменте как больше значения своей лин. регрессии, так и меньше — и это существенно повлияет на фин. результат…
avatar
_xXx_, мы выражаем стоимость акции TATN через акцию TATNP! по формуле TATN = TATNP*b+a ( коэффициенты a,b получены из модели линейной регрессии) И тогда можно представить два ряда TATN(данный) и TATN1(выраженный через TATNP), в идеале они полностью совпадают(если ошибки отсутствую), и если происходит расхождение то мы это торгуем. Линия регрессии, она для двух активов, а не для одного.
avatar
Спасибо. Грамотно написано. Сам использую аналогичную стратегию, но в собственной редакции. Кому интересно, рассказал немного о своей стратегии коинтегрального арбитража здесь — www.youtube.com/watch?v=v8WufjalX9w
avatar
Ждем следующие статьи. Успехов.
avatar

теги блога evgen000

....все тэги



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