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

★7

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

....все тэги



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