Александр Румянцев
Александр Румянцев личный блог
11 апреля 2017, 21:11

Парный трейдинг: описание стратегии на Python

Стратегия парного трейдинга очень популярна на рынке. Она основана на чистой статистике, что делает ее привлекательной для алгоритмической торговли. Общий смысл сводится к нескольким шагам: найти пару, проверить ее поведение, определить границы входа в позицию и направление (лонг/шорт).

Пары ищут с помощью корреляции, но корреляция в чистом виде может сослужить плохую службу. Спред пар должен быть стационарным и обладать коинтегрированностью. Весь представленный код на Python.

В статье рассмотрены:

  • Введение в корреляцию/коинтеграцию на простом примере.
  • Корреляция без коинтеграции.
  • Коинтеграция без корреляции. 

Основные понятия

Времянной ряд — статистические данные исследуемого процесса собранные в разные моменты времени.

Корреляция — статистическая взаимосвязь двух и более случайных величин. В нашем случае времянных рядов.

Коинтеграция — свойство нескольких нестационарных временных рядов, заключающееся в существовании некоторой их стационарной линейной комбинации.

Стационарность — свойство процесса не менять свои характеристики со временем.

P-значение — величина используемая при тестировании статистических гипотез.

Простыми словами: две акции будут коинтегрированы, когда спред разницы их истории цен будет находиться в пределах фиксированных границ и не будет обладать трендом.

Предположение

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

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

Парный трейдинг: описание стратегии на Python
Пример стационарного спреда пары

Сигналами являются минимальные и максимальные отклонения спреда от нуля. Когда спред на минимуме — необходимо купить акцию А и продать в шорт акцию Б. Когда спред на максимуме — покупаем акцию Б и продаем в шорт акцию А. В обоих случаях закрываем позицию около нуля.

Введение в корреляцию/коинтеграцию

Здесь будут рассмотрены два временных ряда сформированных из набора произвольных значений нормального распределения. Считаем, что произвольный набор — это данные о прибыли/убытке в определенный момент времени. Для получения графика изменений посчитаем кумулятивную сумму значений элементов — это первый времянной ряд.

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

Нарисуем графики обоих рядов: Исходный код на Quantrum.me.

Нарисуем график спреда: Исходный код на Quantrum.me.

Парный трейдинг: описание стратегии на Python
График изменений
 Парный трейдинг: описание стратегии на Python
Спред

Проверив значения коинтеграции и корреляции, видим что спред пары стационарен, p-значение рядом с нулем, и имеет высокую корреляцию около 95%. Код для получения значений оценки ниже: Исходный код на Quantrum.me.

Корреляция без коинтеграции

Однако, есть случаи, когда ряды имеют высокую корреляцию без коинтеграции. Пара с таким свойством не подходит для парного трейдинга. Для изучения сформируем два независимых произвольных времянных ряда: Исходный код на Quantrum.me.

И нарисуем спред: Исходный код на Quantrum.me.

Парный трейдинг: описание стратегии на Python
График изменений
 Парный трейдинг: описание стратегии на Python
Спред

Видим, что оба ряда имеют высокую корреляцию около 99% и проваливают тест на коинтеграцию с p-значением 0.885 (рядом с единицей). Мы видим, что спред имеет тенденцию роста со временем.

Коинтеграция без корреляции

Завершим знакомство примером стационарной пары без корреляции. Возьмем набор данных из нормального распределения и сравним его с квадратной волной: Исходный код на Quantrum.me.

Парный трейдинг: описание стратегии на Python
График изменений
 Парный трейдинг: описание стратегии на Python
Спред

Теперь тесты показывают p-значение равное нулю, что говорит о наличии коинтеграции пары и корреляцию рядом с нулем, а также указывает на отсутствие корреляции между ними. Эти две пары подходят для парного трейдинга, так как спред всякий раз возвращается к нулю.

Вывод

Здесь раскрыт общий смысл стратегии Парного трейдинга, а примеры показывают, какие пары надо искать и какие инструменты для этого можно использовать. Конечно, для торговли этого не достаточно, но уже позволяет избежать грубых ошибок. В следующих статьях я опишу 3 способа поиска пар для торговли: проверка коинтеграциитест Дики-Фуллера и положение средних.

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

Александр Румянцев aka «iamraa»
Автор Quantrum.me


Обучение «Парному трейдингу» у профессионалов.
28 Комментариев
  • vlad1024
    11 апреля 2017, 21:40
    Говорят что стационарные спреды на Западе умерли году так в 2000-2002. На биржевых данных, я таких ни разу не видел. )
  • Igr
    11 апреля 2017, 22:55
    буду ждать продолжения 
  • Константин Автухов
    11 апреля 2017, 23:25
    возможно когда вы говорите, что есть стационарные пары, вы имеете ввиду американский рынок? Потому что на нашем рынке ни баскет ни парный трейдинг не работает, рано или поздно все связи ломаются и пары расходятся очень сильно. проверял сам на коинтеграцию тест дики фуллера. из недавнего, на мощном бычьем тренде на мамбе большинство хороших до этого момента пар, разорвало так что мама не горюй
  • Roman Ivanov
    11 апреля 2017, 23:27
    Самая сложная составляющая стратегии статарбитража — это стратегия выхода. Имеется в вид когда спред неожиданно расширяется и конца этому не видно.
    Странно, что она никак здесь не упоминается! Сам автор то давно их торгует? Подозреваю, что нет.
      • CloseToAlgoTrading
        12 апреля 2017, 09:44
        Александр Румянцев, Ну вы хоть бы картинки поменяли говоря о том что статья Ваша. Еще в 2015 году некий Delaney Granizo-Mackenzie на квантопии это описал.
  • Sergey Pavlov
    12 апреля 2017, 06:29
    Чисто логическое рассуждение. Если есть два инструмента, между которыми строится стационарный спрэд такой клёвый как у вас на картинках, причем по амплитуде этот спрэд явно больше транзакционных издержек на этот спрэд, то из этого следуют две вещи.

    Первая вещь. Такой спрэд будет быстро сведен к близкому по издержкам.

    Вторая вещь. Один из инструментов умрёт. Нафига на рынке два одинаковых инструмента?
    • CloseToAlgoTrading
      12 апреля 2017, 09:56
      Sergey Pavlov, ivanovr, Вот автор хорошо тему поднял, я тут как раз спросить хотел :)
      В парном трейдинге обычно выбирают пары которые взаимосвязаны… одна область, сектор, а лучше что бы они похожи были, а еще лучше что бы это один инструмент был ).
      Но надо ли это, вопрос ведь встает сможем ли мы просто узнать когда спред разбежался, так что мы его не сможем больше торговать, и в связи с этим можем выбирать активы которые по каким то причинам случайно корелируют и коинтегрируют?
      И тут не понятно что проверять и на каком периоде. можно изменение волотильности мерять или же тупо по стандартным отклонениям?

      Второй вопрос, построение среда, можно ведь торговать непосредственно его или же отклонение от среднего, но тогда каой период средней брать, ведь среднее значение каждый раз меняется.?

      • Sergey Pavlov
        12 апреля 2017, 10:02
        Denis, ответы на эти вопросы означают какую-то подгонку под историю, из которой никак не следует, что будет в будущем. Проблема в том, что статарбитраж как парный трейдинг это продажа волатильности по смыслу действий такого трейдинга. Отсюда растут все ужасные последствия такого трейдинга, которые, однако, не обязательно затронут конкретного трейдера на периоде его торговли.
        • CloseToAlgoTrading
          12 апреля 2017, 15:52
          Александр Румянцев, ну полностью исключить убытки это не нужно. т.е. тестить на стационарность и как только вышли за какой то порог закрываем позу? и если стационарность вернулась к нужному уровню опять рассматриваем как рабочий вариант?
          хм… хватит ли одного этого условия?
  • CloseToAlgoTrading
    12 апреля 2017, 10:20
    Александр Румянцев, просмотрел ваш сайт, вы там описываете как отбираете пары. А не пробовали отбирать именно по подсекторам, а не так со всего что есть?

      • CloseToAlgoTrading
        12 апреля 2017, 16:07
        Александр Румянцев, вот я вопросы выше задавал, я никак не могу в себе побороть дилему. С одной стороны логика говорит что пары должны быть как бы взаимосвязаны, хоть область что бы была, но с другой, если мы все ровно проверяем стационарность, то любая пара подходит, будь то случайный активы или схожи.

        У меня еще вопрос есть, вы у вас на сайте zыcore считаете сами, а почему не стандартной функцие которая имеется в scipy?

        ну и раз такая пьянка, как часто пересчитываете значение хэджа? и меняете ли его в открытой позиции?
          • CloseToAlgoTrading
            12 апреля 2017, 17:08
            Александр Румянцев, в нете документ гуляет, там пишут что через total least squares отлично считается. Сам я как то считал через OLS. а zscore брал из стандартной либы, помнится у меня на некоторых спрэдах разные значения получались если методом как у вас считать и стандартной функцией, но может я и ошибся где тогда :)
  • kaus_bonus
    12 апреля 2017, 20:59
    если бы привели исследования, как ведет себя спред на ООС, было бы другое дело. на истории куча красивых спредов.
    возьмите 350 дневных  баров, по первым 250барам постройте кучу спредов, и затем продолжите этот спред без изменения коэфтов на ООС.
    вот нечто подобное делал автор тут
    goo.gl/RzU7kG
    там есть намайненные спреды в pdf
    quantsniper.files.wordpress.com/2013/05/spreads1.pdf




  • Konstantin Nikolski
    02 марта 2024, 19:13
    Ссылки, ведущие на сайт quantrum.me, битые.
    Поправьте, пожалуйста.

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн