Стратегия парного трейдинга очень популярна на рынке. Она основана на чистой статистике, что делает ее привлекательной для алгоритмической торговли. Общий смысл сводится к нескольким шагам: найти пару, проверить ее поведение, определить границы входа в позицию и направление (лонг/шорт).
Пары ищут с помощью корреляции, но корреляция в чистом виде может сослужить плохую службу. Спред пар должен быть стационарным и обладать коинтегрированностью. Весь представленный код на Python.
В статье рассмотрены:
Времянной ряд — статистические данные исследуемого процесса собранные в разные моменты времени.
Корреляция — статистическая взаимосвязь двух и более случайных величин. В нашем случае времянных рядов.
Коинтеграция — свойство нескольких нестационарных временных рядов, заключающееся в существовании некоторой их стационарной линейной комбинации.
Стационарность — свойство процесса не менять свои характеристики со временем.
P-значение — величина используемая при тестировании статистических гипотез.
Простыми словами: две акции будут коинтегрированы, когда спред разницы их истории цен будет находиться в пределах фиксированных границ и не будет обладать трендом.
Есть две акции, которые имеют глубокую экономическую связь и их цены всегда меняются в одном направлении со скоростью, характерной для каждой акции.
Если мы вычтем данные одного временного ряда из другого, то данный спред должен нарисовать кривую, двигающуюся вокруг среднего значения всех элементов спреда. При этом данные каждого времянного ряда должны быть нестационарны.
Сигналами являются минимальные и максимальные отклонения спреда от нуля. Когда спред на минимуме — необходимо купить акцию А и продать в шорт акцию Б. Когда спред на максимуме — покупаем акцию Б и продаем в шорт акцию А. В обоих случаях закрываем позицию около нуля.
Здесь будут рассмотрены два временных ряда сформированных из набора произвольных значений нормального распределения. Считаем, что произвольный набор — это данные о прибыли/убытке в определенный момент времени. Для получения графика изменений посчитаем кумулятивную сумму значений элементов — это первый времянной ряд.
Для получения второго ряда используем первый, добавив в него произвольного шума и сместив значение на фиксированную величину.
Нарисуем графики обоих рядов: Исходный код на Quantrum.me.
Нарисуем график спреда: Исходный код на Quantrum.me.
Проверив значения коинтеграции и корреляции, видим что спред пары стационарен, p-значение рядом с нулем, и имеет высокую корреляцию около 95%. Код для получения значений оценки ниже: Исходный код на Quantrum.me.
Однако, есть случаи, когда ряды имеют высокую корреляцию без коинтеграции. Пара с таким свойством не подходит для парного трейдинга. Для изучения сформируем два независимых произвольных времянных ряда: Исходный код на Quantrum.me.
И нарисуем спред: Исходный код на Quantrum.me.
Видим, что оба ряда имеют высокую корреляцию около 99% и проваливают тест на коинтеграцию с p-значением 0.885 (рядом с единицей). Мы видим, что спред имеет тенденцию роста со временем.
Завершим знакомство примером стационарной пары без корреляции. Возьмем набор данных из нормального распределения и сравним его с квадратной волной: Исходный код на Quantrum.me.
Теперь тесты показывают p-значение равное нулю, что говорит о наличии коинтеграции пары и корреляцию рядом с нулем, а также указывает на отсутствие корреляции между ними. Эти две пары подходят для парного трейдинга, так как спред всякий раз возвращается к нулю.
Здесь раскрыт общий смысл стратегии Парного трейдинга, а примеры показывают, какие пары надо искать и какие инструменты для этого можно использовать. Конечно, для торговли этого не достаточно, но уже позволяет избежать грубых ошибок. В следующих статьях я опишу 3 способа поиска пар для торговли: проверка коинтеграции, тест Дики-Фуллера и положение средних.
В комментариях задавайте вопросы и напишите, где не хватает подробностей, а что можно описать иначе.
Александр Румянцев aka «iamraa»
Автор Quantrum.me
Странно, что она никак здесь не упоминается! Сам автор то давно их торгует? Подозреваю, что нет.
Первая вещь. Такой спрэд будет быстро сведен к близкому по издержкам.
Вторая вещь. Один из инструментов умрёт. Нафига на рынке два одинаковых инструмента?
В парном трейдинге обычно выбирают пары которые взаимосвязаны… одна область, сектор, а лучше что бы они похожи были, а еще лучше что бы это один инструмент был ).
Но надо ли это, вопрос ведь встает сможем ли мы просто узнать когда спред разбежался, так что мы его не сможем больше торговать, и в связи с этим можем выбирать активы которые по каким то причинам случайно корелируют и коинтегрируют?
И тут не понятно что проверять и на каком периоде. можно изменение волотильности мерять или же тупо по стандартным отклонениям?
Второй вопрос, построение среда, можно ведь торговать непосредственно его или же отклонение от среднего, но тогда каой период средней брать, ведь среднее значение каждый раз меняется.?
хм… хватит ли одного этого условия?
У меня еще вопрос есть, вы у вас на сайте zыcore считаете сами, а почему не стандартной функцие которая имеется в scipy?
ну и раз такая пьянка, как часто пересчитываете значение хэджа? и меняете ли его в открытой позиции?
Denis, подходит любая пара. Взаимосвязь компаний из разных секторов никто не исключает. Причины могут быть неизвестны.
Можете использовать библиотеку для z-score. Это не принципиально. Только проверьте предварительно, как там считается.
При тестировании в открытой позиции доли участников не менял. Я на этом вообще не заострял внимание, а покупал активы на равные суммы. Расчет правильных долей достоин отдельной статьи, и даже не одной.
возьмите 350 дневных баров, по первым 250барам постройте кучу спредов, и затем продолжите этот спред без изменения коэфтов на ООС.
вот нечто подобное делал автор тут
goo.gl/RzU7kG
там есть намайненные спреды в pdf
quantsniper.files.wordpress.com/2013/05/spreads1.pdf
Поправьте, пожалуйста.