Блог им. HsergeyF

Продвинутые инструменты парного трейдинга и портфельного роботостроения.

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

Когда речь идет о корреляции на финансовом рынке, в первую очередь думаешь об арбитраже или диверсификации портфеля. Для построения арбитражной стратегии нет ничего проще, чем посмотреть корреляцию в Excel, но результат, увы, ограничится 2-3 инструментами. Что делать, если у нас портфель роботов или акций? Тут есть два известных мне способа:

1.Посмотреть корреляцию в Wealth-e  или TSLab-е

2. Воспользоваться Rstudio

В первом случае задача решается как кодом, так и кубиками. Проблема в том, что визуализация именно корреляции получается ужасная, особенно если выводить еще и графики баров на отдельную панель. Если искать зависимость 3 и более инструментов, то интерпретировать получившийся хаос невозможно – режет глаз, да и просто неудобно. Единственный плюс такого подхода в том, что программа приводит к общему виду неровные финамовские данные и их не придется подгонять вручную.
Продвинутые инструменты парного трейдинга и портфельного роботостроения.

Второй способ, на мой взгляд самый лучший, хотя требует немного времени для того, чтобы стандартизировать датасеты, скачанные с Финама. При загрузке данных в Rstudio, оказалось, что все инструменты имеют разное количество строк. С тиковыми данными разброс переваливает за тысячу. Логично предположить, что чем выше таймфрейм, тем более однородные данные мы получим. Это связано с тем, что некоторые свечи на нижних таймфреймах просто не записываются в csv файл. 
Продвинутые инструменты парного трейдинга и портфельного роботостроения.

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

Осталось только построить матрицу корреляций и нарисовать имеющиеся связи:

1.загружаем пакеты:

library(igraph)
library(dplyr)
library(ggplot2)

2. при помощи функции mutate добавляем в наши датасеты колонку с разностью цен.

RTS = mutate(RTS, Rts = log(X.CLOSE.)-log(X.OPEN.))
...

3. Убираем остальные ненужные нам колонки, используя команду select.

RTS = select(RTS,Rts )
...

4. группируем разность цен всех наших тикеров в один датасет (cbind).

Common =cbind(RTS,SI,SBRF,GOLD,EU,BR,GAZP)<br>...

5. Считаем корреляцию(corr) и превращаем матрицу корреляции в датафрейм (as.data.frame).

CMX=cor(Common)
CMX= as.data.frame(CMX)
...

6. Далее для каждого инструмента ищем модуль числа корреляции. Это делается для корректной визуализации (отрицательные значения не считаются за связь).

CMX$Rts = abs(CMX$Rts)<br>...

7. Последним шагом будет отсеивание связей, которые ниже уровня корреляции, заданного нами (n). Если корреляция есть, то присваиваем значение 1, если ее нет – 0.

CMX$Rts[CMX$Rts==1 ]=0
CMX$Rts[CMX$Rts<n ]=0
CMX$Rts[CMX$Rts>n]=1
...

 Дальше остается только нарисовать графы (пакет igraph), связи выделяются автоматически. Сначала превратим наш датасет обратно в матрицу(as.matrix.data.frame), а затем получившуюся матрицу преобразуем в граф (graph.adjacency). Следующим шагом будет выделение сообществ(fastgreedy.community) и, наконец, отображение получившихся связей(plot).

Кстати, вид графика можно менять произвольно. Параметров там куча, поэтому разобравшись, можно нарисовать и красивее.

Продвинутые инструменты парного трейдинга и портфельного роботостроения.
Продвинутые инструменты парного трейдинга и портфельного роботостроения.

После нахождения корреляционных пар следует выяснить, реально ли значима корреляция. Для этого воспользуемся следующей командой: summary(lm(RTS~SI). Это команда выдает статистику по построенной регрессионной модели между двумя тикерами. 
Продвинутые инструменты парного трейдинга и портфельного роботостроения.

Здесь нас волнует только одно значение – это p -value(вероятность ошибиться в утверждении, что связь между инструментами есть). Звездочки – наглядное представление p-value. Если наше значение меньше критического (0.05), то модель рабочая и в паре инструментов наблюдается связь.

 Этот метод не столько привлекателен для поиска зависимых инструментов, сколько для диверсификации портфеля роботов. Для этого просто нужно подгрузить в R эквити каждого из них и посмотреть результаты.

Возможные недостатки данного подхода заключаются в работе с Финамовскими данными. Эту проблему, вероятно, можно обойти с помощью пакетов quantmod или rusalgo.

Инструмент не такой сложный, разобраться в нем сможет любой желающий, но если будут вопросы, — обращайтесь, каждый день сижу в онлайн офисе InStrate. Там могу подсказать что-то по r, или рассказать о скрипте. Приглашение в офис тут: vk.com/instrate_team

Данная публикация является личным мнением автора. Мнение владельца сайта может не совпадать с мнением автора.
577 | ★7

Читайте на SMART-LAB:
Фото
Инвестиции без спешки: торгуем в выходные
Алексей Девятов Клиенты Альфа-Инвестиций могут совершать сделки в выходные . Торги в эти дни не отличаются волатильностью, но если всё-таки...
Фото
Т-Инвестиции отзывают рекомендацию по Яндексу после атак БПЛА
В пятницу, 9 октября, был атакован второй дата-центр компании в Калуге. Накануне, также из-за атак дронов, вышел из строя ЦОД в Рязанской...
Фото
💬 На связи с инвесторами
За цифрами отчётности и корпоративными новостями всегда есть детали, о которых хочется узнать больше. Как работает отдельное направление,...
Фото
Что год грядущий нам готовит? Смотрим на долги самых доходных облигаций на нашем рынке

теги блога Сергей Фролов

....все тэги



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