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

20 дней назад

При торговле по стратегии "Парного трейдинга" часто встречаются пары🎏, где цены каждого актива сильно отличаются друг от друга. Для получения лучшей доходности📈 и сокращения риска📉 необходимо правильно определить размер⚖ сделки по каждому активу.Сегодня мы рассмотрим расчет дельты позиций используя метод наименьших квадратов (МНК).Тестировать будем в Quantopian, а код пишем на Python🐍.

🗃Краткая справка

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

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

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

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

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

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

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

🏁Вывод

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

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

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

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

🎓Обучение «Парному трейдингу» у профессионалов.👍

Авторы получают вознаграждение, когда пользователи голосуют за их посты.
Голосующие читатели также получают вознаграждение за свой голос.
Порядок сортировки:  Популярное
68
  ·  19 дней назад

Ваш пост поддержали следующие Инвесторы Сообщества "Добрый кит":
iamraa
Поэтому я тоже проголосовал за него!
Если Вы проголосуете за этот комментарий, то поможете сделать "Доброго Кита" сильнее!