Парный трейдинг: 1 из 3 способов поиска пар

11 месяцев назад

Первый из трех способов автоматического поиска пар🎏 на Python🐍 для торговли по стратегии "Парного трейдинга". Исходя из результатов предыдущей статьи, во всех примерах мы будем использовать только поиск коинтеграции.Кратко о "Парном трейдинге": в основе стратегии лежит предположение, что есть две акции, которые имеют глубокую экономическую связь друг с другом, и их цена движется в одном направлении с разной скоростью. Когда отстает акция А, мы ее покупаем и одновременно продаем в короткую акцию Б. И наоборот.

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

📏Подготовка к поиску

Для правильной работы необходимо соблюсти следующие условия:

  1. Истории цен должны быть равной длины. (Результат сравнения историй за 200 дней и за 20 дней может быть непредсказуем).
  2. Значения должны быть переведены в относительные величины. (Тяжело сравнивать активы за $200 и за $1).
  3. Каждая история не должна обладать стационарностью сама по себе. (Важна именно стационарность спреда пары, а не отдельного актива в ней).

Коинтеграцию каждого времянного ряда будем проверять с помощью метода Дики-Фуллера из библиотеки statsmodels. Код подготовки ниже:

Код доступен на Quantrum.me

☝Выбор акций для поиска

Искать пары будем среди активов торгующихся на рынке, включая ETF, ограничив следующими условиями:

  • Цена более $10.
  • Средний объем более 500 тыс. акций в день.
  • ATR за 13 дней более $0.40.

Проверяем на ликвидных активах с хорошим движением внутри дня. Из 6 тысяч американских акций, торгующихся на биржах, нам подходят ~1500 активов. Тестировать будем предыдущий год (360 календарных дней).

🔍1 из 3: Простой коинтеграционный тест

Использую самую первую попавшуюся на глаза функцию для проверки пары на стационарность.  Это тест на наличие единичных корней найден в библиотеке statsmodels.

Функция проверки стационарности: statsmodels.tsa.stattools.coint(X, Y)

Функция поиска пар получает словарь с историей относительного изменения цен и последовательно проверяет каждую пару. Для 1500 активов это примерно 1.1 миллиона вариантов.

Выбираем пары с оценкой ниже 5% уровня ошибки и p-значением меньше 0,001. Код поиска пар ниже:

Код доступен на Quantrum.me

На момент написания статьи тест нашел 6400 пар (~0.6%), поиск загружал 1 ядро процессора и длился порядка 45 минут. Вот первые несколько пар с наименьшим p-значением:

  • XIV, SVXY
  • IWB, SPY
  • IVV, SPY
  • DUST, GDX
  • SPY, SPXU
  • ...

Видно, что это ETF на индексы и первые два действительно имеют стационарный спред, а вот начиная с IVV и SPY найти проблемы нам помогут графики.

🎏Проверка найденных пар

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

  • XIV, SVXY
  • DUST, GDX
  • XLK, QQQ
  • PRU, C
  • TMUS, WCG

👎XIV, SVXY

XIV - ETN (аналог ETF) обратный индексу страха $VIX.
VSXY - ETF обратный индексу страха $VIX.

На графике история цен и сигнальная линия z-оценки. SVXY домножен на коэффициент для приведения цен к единой величине. Видно, что график хорош, но два месяца назад (ноябрь-декабрь 2016) спред уменьшился. Причина в моем поставщике данных. Ранее была бо́льшая погрешность в цене, которую нивелировали.

Код z-оценки: Код доступен на Quantrum.me

👎DUST, GDX

DUST - 3х-кратный обратный ETF к GDX.
GDX - ETF компаний-золотодобытчиков.

График разочаровывает и подобных графиков в результатах много. Данные активы обратно-скоррелированы - этот факт в их природе существования. Функция coint(X, Y) на вход получает два времянных ряда и сама проверяет их стационарность. Видимо эта функция использует в основе проверку корреляции и дополнительно подгоняет ряды.

👍XLK, QQQ

XLK - ETF на индекс технологических компаний.
QQQ - ETF на индекс NASDAQ-100, где преимущественно технологические компании.

Здесь результаты лучше, но так как в QQQ также много компаний из XLV (здравоохранение), то в январе 2017 XLK сумел вырваться вперед.

👌PRU, C

Копнем поглубже и возьмем несколько компаний.

PRU - Prudential Financials, страховая компания.
C - Citibank, банк.

Большую часть года компании шли в ногу, что не удивительно, так как обе в XLF (финансовый сектор) и обе выигрывают от роста ставок. Но за январь 2017 появилось расхождение.

👍TMUS, WCG

TMUS - T-Mobile US, американский сотовый оператор. 

WCG - WellCare Health Plans, компания из сектора здравоохранения.

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

🏁Вывод

Данный метод имеет право на существование. Удается найти хорошие пары, которые достойны участия в бэктестинге. Но одновременно к нам приходит большое количество шлака💩, что заставляет отсматривать👀 результаты вручную. Лучше себя проявил поиск с помощью метода Дики-Фуллера, о котором я буду писать в следующей статье.

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

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

Александр Румянцев aka "iamraa"
Автор Quantrum.me
Интересуетесь алготрейдингом на Python? Присоединяйтесь к команде. Пишите в личку или на email.
Авторы получают вознаграждение, когда пользователи голосуют за их посты.
Голосующие читатели также получают вознаграждение за свой голос.
Порядок сортировки:  Популярное

Привет! Я робот. Хозяин поручил мне проголосовать за Ваш пост! Я нашла похожий контент, который может быть интересен читателям ГОЛОСа:
https://quantrum.me/911-parnyj-trejding-1-iz-3-sposobov-poiska-par/

@iamraa Поздравляю! Вы добились некоторого прогресса на Голосе и были награждены следующими новыми бейджами:

Вы получили свою первую выплату

Вы можете нажать на любой бейдж, чтобы увидеть свою страницу на Доске Почета.
Чтобы увидеть больше информации о Доске Почета, нажмите здесь

Если вы больше не хотите получать уведомления, ответьте на этот комментарий словом стоп

Голосуя за это уведомление, вы помогаете всем пользователям Голоса. Узнайте, как здесь.

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