Новый быстрый алгоритм поиска для парного трейдинга и параметр скорости возврата к среднему.
https://t.me/adaptivetradingВ этой публикации я попытаюсь показать как работает функция быстрого поиска подходящих комбинаций фьючерсов в программе для парного трейдинга Trading Plan для биржи Binance и как интерпретировать параметр скорости возврата к среднему.
Для начала немного поясню что такое парный трейдинг, так как стратегия необычная и нужно немного погрузится в контекст.
И так парный трейдинг это вид рыночной нейтральной стратегии, которая заключается в одновременной покупке одного актива и продаже другого актива, которые имеют высокую степень взаимозависимости.
Например, возьмём два графика фьючерсов atomusdt и gtcusdt вместе на одной шкале. На первый взгляд не особо понятно что в них такого примечательного.

Если посмотреть на них отдельно то это выглядит интереснее


А если их расположить рядом на одном графике но с разными шкалами слева и справа, то становится видно что график цены на этих фьючерсов очень похожи.

Так как цены этих фьючерсов отличаются, то для корректного применения стратегии вводят корректирующий множитель для одного из фьючерсов, часто этот множитель называют коэффициентом хеджирования.
И теперь график atomusdt и gtcusdt*5 на одной шкале выглядит вот так

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

Тот же график через несколько дней

Соответственно такой график показывает разницу цен, если график растет, то разница цен между фьючерсами увеличивается, и наоборот снижения графика показывает что разница между ценами уменьшается. Более того значения спреда могут быть как положительными так и отрицательными в зависимости от формулы вычисления.
Подбирая комбинации фьючерсов и коэффициент хеджирования, можно получить график спреда который будет обладать свойствами стационарного случайного процесса, как в этом примере который колеблется вокруг некого горизонтального уровня.
Торговля на стационарном процессе строится вокруг идеи того, что вероятность возврата цены к среднему уровню достаточно высока.
Существуют формальные математические методы позволяющие проверить два фьючерса на взаимосвязанность. И речь идет не о корреляции, а других статистических явлениях.
И так для того чтобы успешно торговать парный трейдинг нужно на рынке найти пары фьючерсов которые в моменте должны находится в выгодной для начала торговли ситуации. И у меня получилось реализовать алгоритм который умеет это делать. В этом алгоритме используются описанные в статистической литературе методы которые я адаптировал для трейдинга. В своей программе я использую библиотеки из статистического пакета, разработанного группой профессоров и специалистов в области математики и статистики.
Мой первый вариант алгоритма поиска подходящих пар был нацелен на более тщательную проверку и в силу сложности алгоритма он работает не быстро. Таким алгоритмом удобно проверять не большом количество фьючерсов.
В новой версии поиск таких пар осуществляется намного быстрее и также я добавил в алгоритм вычисление коэффициента реверсии, который показывает скорость возврата цен спреда к среднему уровню.
Поиск подходящих комбинаций фьючерсов осуществляется в несколько этапов или шагов.
- Выделить интересующие фьючерсы
- Загрузить историю цен
- Ещё раз выделить интересующие фьючерсы, данные по которым были скачаны
- нажать кнопку Start fs
- дождаться результата
Важно. Проверять имеет смысл только те фьючерсы у которых есть история на 1500 часов. Таблица фьючерсов Future Settings строится по списку который присылает Binance, и в этом списке есть не актуальные фьючерсы, и новые у которых истории ещё нет.
Теперь подробнее.
На вкладке настроек (Settings) в таблице торгуемых фьючерсов (Futures Settings) сначала нужно выбрать фьючерсы для проведения теста.
Если выбрать фьючерсы в столбце Select, то загрузятся данные только по этим фьючерсам, без учёта выделенных фьючерсов в столбце со звёздочкой. Галочка с фьючерсов в столбце Select после загрузки сбрасывается.
Столбец со звездочкой это Favorite фьючерсы. Если ничего не выбрано в столбце Select, то загрузятся данные только по Favorite фьючерсам, и галочка с них не снимается. Список Favorite фьючерсов сохраняется при выключении программы, или можно сохранить нажав на кнопку Save Favorite.
Столбец Favorite фьючерсы удобно использовать для регулярной проверки одних и тех же фьючерсов. Столбец Select используется для не регулярных действий с фьючерсами.

Затем нужно скачать историю цен этих фьючерсов за последние 1500 часов. Пока работает только такая комбинация параметров

Скорость скачивания ограничена правилами Binance. Нужно дождаться когда все данные загрузятся. О завершении скачивания будет написано в поле вывода результата. У меня скачиваются почти все фьючерсы за 3 - 4 минуты.


Запустить проверку фьючерсов можно двумя способами. После загрузки данных истории цен выделяю те фьючерсы которые хочу проверить или в столбце Select таблицы Futures Setting или устанавливаю галочку около кнопки Start FS чтобы проверить только фьючерсы из столбца Favorite futures.

Далее жму кнопку старт на новой вкладе поиска и жду пока завершится проверка.

У меня на проверке было 55 фьючерсов. Время проверки примерно 1,5 - 2 минуты.

После выполнения теста заполняется таблица содержащая следующие столбцы с параметрами для каждой комбинации фьючерсов.


Для сортировки таблицы нужно нажать на заголовок столбца и рядом появится стрелочка показывающая направление сортировки.
Тут я отсортировал по столбцу Pair N. Это номер найденной комбинации. В результате этой проверки найдено 1492 комбинации.

Параметр adf pv
Этот параметр показывает есть ли взаимосвязь между фьючерсами. Этот параметр положительное число и чем меньше это число, тем лучше. В таблицу не попадают комбинации у которых значение этого параметра больше чем 0.05
Я отсортировал таблицу по параметру adf pv. И самый худший вариант оказался вверху таблицы.

Ниже график комбинации с наихудшим параметром adf pv = 0.049 из текущего списка. Можно сказать что график "ходит" вокруг среднего уровня (на рисунке это синяя линия), но так сказать с "натяжкой".

Следующий вариант с наилучшим параметром adf pv = 0.0000000018 из текущего списка.

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

Коэффициент Rev
Rev это cкорость возврата к среднему (reversion rate parameter). Этот параметр чем ближе по модулю к единице, тем лучше. Обычно параметр Rev отрицательный, и тогда чем он меньше, тем лучше. Смысл параметра можно понять сравнив графики с плохим и хорошим значением.
Теперь список отсортирован по коэффициенту rev

и ниже график комбинации из верхней строки списка с наихудшим значением Rev из текущего списка. График как бы "плавает" то выше, то ниже среднего уровня и не торопится возвращаться к среднему значению. Правда и значение adf pv не самое хорошее.

Поэтому возьмём другую комбинацию у которого adf pv уже хороший, но Rev чуть лучше, чем у предыдущей комбинации.

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

Теперь возьмем хороший Rev и хороший adf pv.

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

Ещё одна комбинация с двумя хорошими показателями Rev и adf pv.

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

Если переставить местами 1-ый и 2-ой фьючерс из предыдущего примера,

то параметры изменяются не "симметрично", и график выглядит очень похожим на перевернутый с предыдущим.

Поэтому имеет смысл оценивать комбинации с переставленными фьючерсами.
Ниже еще один интересный вариант, у которого всё хорошо по параметрам adf pv и rev, но также еще эта комбинация в конце графика доходила почти до третьего стандартного отклонения в течении последних пару суток.


Для примера предыдущий вариант, но с переставленными местами фьючерсами.

