Александр Румянцев
Александр Румянцев личный блог
17 августа 2017, 22:10

Парный трейдинг: использование МНК для расчета дельты позиций

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

Сегодня мы рассмотрим расчет дельты позиций используя метод наименьших квадратов (МНК).

Тестировать будем в Quantopian, а код пишем на Python.

Краткая справка
  • За основу статьи взяты материалы с Quantopian.
  • Стратегия «Парного трейдинга» подробно описана в этой статье.
  • Поиск пар для торговли можно изучить здесь.
  • Выбор основания для сигналов z-оценки здесь.
  • Регрессионный анализ описан в Вики.
  • Линейная регрессия доступна в Вики.
  • Метод Наименьших Квадратов (МНК, Ordinary Least Squares, OLS) описан в Вики.

Тестировать будем на парах, найденных в прошлых статьях:

  • CIT, STT
  • ALNY, DATA
  • DRE, O
 

Зачем нам линейная регрессия?

Мы нашли пару активов, которые имеют связь. Следующим шагом мы должны определить пропорции этой связи. В этом нам поможет регрессионный анализ зависимости цен одного актива относительно цен другого.

Парный трейдинг: использование МНК для расчета дельты позиций

Слева на графике показан разброс значений зависимости цен хорошей пары, а справа — плохой пары. Прямая линия на каждом графике — это регрессия по найденным неизвестным. Линия строится по формуле:

  \[ Y = a + b * X \]

a — смещение по оси Y.
b — угол наклона. Эту величину мы будем использовать для расчета размера позиций.

 

Алгоритм расчета размера позиции

Для получения величины зависимости мы будем использовать Python-пакет statsmodels. Ниже исходный код использования OLS метода:
Исходный код доступен на Quantrum.me

В массив X необходимо добавить колонку с постоянной величиной, для нахождения значения a.

В алгоритме мы используем 20-дневный период для построения регрессии, чтобы зависимость была наиболее актуальной. Сигнальную z-оценку мы также построим относительно значений угла регресии. Исходный код алгоритма:
Исходный код доступен на Quantrum.me

 

CIT, STT

Парный трейдинг: использование МНК для расчета дельты позиций

На всех графиках под доходностью показана стоимость открытых позиций в обе стороны. Результат торговли с помощью МНК (верхний график) значительно хуже и обладает большей просадкой относительно торговли на равные суммы (следующий график).

На верхнем графике:

  • торговля с помощью OLS;
  • сигналы по z-оценке на основе OLS;
  • без проверки коинтеграции.

На нижнем графике:

  • торговля позициями на равные суммы;
  • сигналы по z-оценке на основе доходности;
  • фильтр по наличию коинтеграции за предыдущие 120 дней.

Парный трейдинг: использование МНК для расчета дельты позиций

ALNY, DATA

Парный трейдинг: использование МНК для расчета дельты позиций

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

Парный трейдинг: использование МНК для расчета дельты позиций

DRE, O

Парный трейдинг: использование МНК для расчета дельты позиций

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

Парный трейдинг: использование МНК для расчета дельты позиций

Код в студию

Исходный код доступен на Quantrum.me

Вывод

Результаты разочаровали. Но это можно было предвидеть взглянув на следующие графики. Это наложение цен обоих активов одной из пар друг на друга: слева — без изменений; центр — использование коэффициента регрессии; справа — использование отношения цен друг к другу в первый день. Вряд ли коэффициент, полученный при помощи МНК, может быть полезен в определении размеров позиций.

Парный трейдинг: использование МНК для расчета дельты позиций

Как объяснить успех торговли равными долями? Данные пары были найдены на спреде относительных значений. То есть мы сравнивали спреды ежедневных изменений цены и ушли от самих цен. Торговать таким спредом достаточно на равные суммы. Дополнительно мы постоянно проверяем стационарность спреда.

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

В комментариях напишите, какие еще могут быть проблемы плохой результативности? Где я мог допустить ошибку? Что можно изменить?

Александр Румянцев aka «i.am.raa»
Автор Quantrum.me
Интересуетесь алготрейдингом на Python? Присоединяйтесь к команде. Пишите в личку или на email.

Обучение «Парному трейдингу» у профессионалов.
4 Комментария
  • oreshkinalexey
    17 августа 2017, 22:16
    слова - фильтр по наличию коинтеграции
    и — здесь может помочь фильтр по коинтеграции спреда доходности, но это уже переоптимизация — как бэ намекают что автор неочень.
  • MadQuant
    18 августа 2017, 15:18
    Кто ж так делает (если я все правильно понял, что вы написали). Цены, как правило, растут, а поэтому понятно, что OLS-ом вы там намеряете что угодно. Регрессию надо делать по доходностям, или, на худой конец, по приращениям цен (если мы рассматриваем небольшой период времени, и считаем, что цены в нем примерно стационарны)

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

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