Блог им. 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

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

Читайте на SMART-LAB:
Стабильно высокий рейтинг Х5
Агентство «Эксперт РА» подтвердило наш высший кредитный рейтинг на уровне ruAAA со стабильным прогнозом. Среди факторов подтверждения рейтинга...
🖥 Дуров поднял VK
Акции соцсети растут на 3% на фоне новостей об обвинении Павлу Дурову по уголовному делу о содействии террористической деятельности....
Фото
Уровень «Дзен». Цены на облигации снова начали расти
Дмитрий Пучкарёв Аналитики Альфа-Инвестиций создали для клиентов модельные портфели и следят за их актуальностью. В этом материале...
Мой Рюкзак #67: Стратегическое плечо под дивиденды
Мой Рюкзак #68: Было страшно с плечом, но пора и прибыль знать. Дальше без меня в одной истории с хорошим концом
Последний раз писал пост 14 июля  smart-lab.ru/mobile/topic/1328022/ Счет тогда медленно растворялся в биржевом вулкане, но был слоган...

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

....все тэги



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