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

Парный трейдинг: 2 из 3 способов поиска пар (ДФ)

В прошлой статье мы рассмотрели первый способ поиска пар для стратегии «Парного трейдинга», который работал относительно быстро, но результаты требовали тщательной обработки напильником. То есть дополнительной визуальной проверки графиков для выбора подходящих кандидатов.

В этот раз мы рассмотрим метод поиска коинтеграции (подробнее здесь) по методу Дики-Фуллера.

В предыдущих сериях

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

История каждого актива должна удовлетворять следующим требованиям:

  • Длина историй должна быть одинаковой.
  • Значения должны быть переведены в относительные величины.
  • Каждая история цен не должна быть стационарной.

Здесь можно ознакомиться с общими принципами стратегии и тем, что надо искать. А здесь рассмотрена подготовка историй цен акций для поиска пар.

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

  • Американский рынок.
  • История за предыдущие 360 календарных дней.
  • Цена более $10.
  • Средний объем более 500 тыс. акций в день.
  • ATR за 13 дней более $0.40.

Всего таких ~1500 штук, минимальная длина истории 245. После фильтрации на отсутствие коинтеграции осталось 1028 штук, что дает нам 0,5 млн. пар.

2 из 3: тест Дики-Фуллера

Данный тест проверяет времянной ряд (историю изменения цены) на стационарность (наличие коинтеграции). Осуществляется проверка наличия у времянного ряда единичного корня, о чем подробнее написано в Вики. Реализован в библиотеке statsmodels.

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

Выбираем пары с оценкой ниже 5% критического порога и p-значением меньше 0,001. Код поиска пар ниже: Исходный код на Quantrum.me

На февраль 2017 года метод нашел 1599 пар (~0.13%), в 4 раза меньше, чем прошлый способ. Поиск загружал все ядра процессора, кроме одного и занял почти 2 часа. Вот пять пар с наименьшим p-значением:

  • XIV, SVXY
  • TRN, AMAT
  • IPHI, TRN
  • COMM, KN
  • TRN, TNA

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

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

В проверке будут участвовать следующие пары:

  • TRN, AMAT
  • COMM, KN
  • AEL, MRC

TRN, AMAT

TRN — диверсифицированная промышленная компания.
AMAT — технологическая компания, занимающаяся полупроводниками и дисплеями.

Спред действительно стационарен и дает сигналы для торговли.

Парный трейдинг: 2 из 3 способов поиска пар (ДФ)

COMM, KN

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

График удовлетворяет задаче и дает хорошее количество сигналов.

Парный трейдинг: 2 из 3 способов поиска пар (ДФ)

AEL, MRC

AEL — американская страховая компания.
MRC — промышленная компания, поставщик труб и сопутствующего оборудования для энергетической промышленности.

График стационарен и дает хорошее количество сигналов.

Парный трейдинг: 2 из 3 способов поиска пар (ДФ)

Вывод

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

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

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

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

Александр Румянцев aka «iamraa»
Автор Quantrum.me
12 Комментариев
  • evgen000
    27 апреля 2017, 09:33
    я бы еще добавил в качестве признака  - отсутствие важных новостей у парных акций за последние дни
      • evgen000
        27 апреля 2017, 14:03
        Александр Румянцев, по идее есть google api который можно использовать для признака есть/нет новостей, так же можно использовать SeekingAlpha https://seekingalpha.com/market-news/top-news в ленте которой новость уже обработана, куда попадают только важные новости. По крайне мере я бы делал так. 
  • localcreator
    15 июля 2023, 19:04
    Не понятно, как ты ищешь пары с помощью ДФ теста. В adfuller(X) у тебя указана 1 переменная и этот тест всего-лишь определяет стационарен ли ряд или нет 

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

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