Это заключительная статья по автоматическому поиску пар для «Парного трейдинга» с помощью Python. Способ самый быстрый и самый эффективный. Хотя эффективность достигается уже благодаря анализу полученного набора пар.
В основе данного способа лежит анализ скользящих средних каждого актива. Идея была взята здесь.
«Парный трейдинг» — стратегия торговли двух скоррелированных акций, двигающихся в одном направлении с разной скоростью. Надо одновременно купить отстающую и продать убежавшую. Рекомендовано к ознакомлению: Описание стратегии, Первый способ поиска пар, Второй способ поиска пар.
Экспоненциальные скользящие средние у пар, подходящих для «Парного трейдинга» будут находиться рядом и их можно отобрать по фильтру среднего значения спреда пары.
На 10 февраля 2017 таких всего 1287 штук, минимальная длина истории 245. После фильтрации на отсутствие коинтеграции осталось 1028 штук, что дает нам 0,63 млн. пар. Подготовка историй цен подробно рассмотрена здесь.
Попробуем сравнивать спред между EMA-50 (средние за 50 дней). Фильтр по порогу среднего значения спреда давал много шлака, что склонило меня к использованию 70% перцентиля. То есть нам подойдут пары, если максимальное абсолютное значение 70% спреда меньше трех. Три — это произвольное число и для себя можете попробовать использовать любое другое.
Дополнительно необходимо проверять найденные пары на стационарность. Вспоминая прошлые наблюдения, эта проверка является крайне прожорливой к ресурсам, но в этот раз на нашей стороне предварительный фильтр по спреду EMA-50 и нам необходимо проверить только найденные пары, коих будет не много.
Стационарность проверяем методом Дики-Фуллера отсюда:
statsmodels.tsa.stattools.adfuller(X)
По порядку:
Код на Python: Исходный код на Quantrum.me
На 10 февраля 2017 года метод нашел 2056 пар (~0.32%), включая не стационарные. Поиск загружал все ядра процессора, кроме одного и занял почти… 3 минуты, в отличие от 2 способа, затянувшегося на 2 часа.
В этот раз, для исключения шлака, проведем сбор дополнительных данных и отфильтруем плохие пары. А искать будем следующее:
Отфильтруем резкое падение стандартного отклонения за последние 2 месяца, оставим только стационарные пары и упорядочим по количеству пересечений z-оценки нуля. Нам будет доступна всего 1731 пара. Это много и код ниже позволит вам отфильтровать пары по необходимым признакам.
Код на Python: Исходный код на Quantrum.me
Вот пять пар с наибольшим количеством пересечений нуля z-оценкой:
За время экспериментов заметил, что истории цен различаются в зависимости от источника. В частности, с этим связано добавление фильтра падения сигмы за последние два месяца.
В проверке будут участвовать следующие пары:
SNV — банк.
KBWB — ETF на банки.
Спред стационарен и дает сигналы для торговли.
ETFC — инвестиционный брокер.
SCHW — инвестиционный брокер.
Одна группа, стационарный спред, достаточное количество сигналов.
XLI — ETF на промышленный сектор.
DIA — ETF на промышленный индекс Доу Джонс.
Единая направленность фондов, достаточное количество сигналов и визуальное соответствие.
Анализ результатов поиска данным способом оставляет положительные впечатления. Все найденные пары, включая пары с минимальным количеством пересечений нуля сигнальной z-оценкой (мин. 8), удовлетворяют базовым требованиям стратегии «Парного трейдинга». Способ работает очень быстро и подходит для беглого обзора рынка.
В следующий раз вернемся к бэктестингу найденных пар на платформе Quantopian. Бэктестинг проведем, используя пары, найденные текущим способом.
В комментариях напишите, чего вам не хватает в этой статье или укажите на ошибки. Если нужен полный исходный код, также упомяните об этом в комментариях.
Обучение «Парному трейдингу» у профессионалов.Александр Румянцев aka «iamraa»
Автор Quantrum.me
Есть желание создать команду алготрейдеров. Пишите в личку или на email.
я в моно на алоре, удалось присобачить их библиотеку.
ясно дело линукс. Поэтому аренда сервака — 200р в мес, все консольное. В этом дело, смекаете?
убунтовод.
сервер убунту с моной, но можно и дебиан ставить на выбор.
проблема коробочных решений, в т.ч. и Quantopian в том, что они коробочные:) Во-первых, сам механизм бектеста не очень прозрачный. Во-вторых, качество маркет-даты тоже не очень понятное. Я не говорю, что оно плохое. Практически у любого поставщика есть косяки с котировками. Только когда ты напрямую работаешь — есть возможность эти косяки отфильтровать и тд.
Но в целом решение для начала неплохое.
Я думаю, что это жжж не спроста. Вы можете взять совсем другой период для анализа и снова выбрать подходящие пары, скажем, быстрым третьим способом. Я почти уверен, что при тщательном долгосрочном анализе у Вас почти ничего, кроме пар типа ЕТФ-ЕТФ, и, возможно, обычная акция против привилегии того же эмитента не останется.
Во-первых, относительно низкая доходность, вынуждающая работать с плечами и платить повышенные комиссы и нести транзакционные издержки
во-вторых, трудно поддающийся контролю риск.
Если на рынке или у одного эмитента происходит крах, в паре безбожно рвет. Следовательно, критически важно изучить особенности относительного движения в парах в зонах кризиса и ярких корпоративных событиях.
Не исключаю, что при тщательном изучении вопроса может обнаружиться, что торговать как раз нужно события выхода пары из квазистационарного состояния.
любопытно, я тоже к этому 2 раза приходил — торговля некоррелированных инструментов, и поиск именно раскорреляций между собой или с индексом.
Вот из-за таких крупиц отличной информации и не бросил еще заходить на этот срачный смартлаб