Действительно ли технические индикаторы информируют о будущих движениях цен? Какими бы шумными и несовершенными ни были данные о ценах на криптовалюты в таймсериях, небольшой исследовательский анализ данных часто заставляет задуматься, могут ли какие-либо из этих технических индикаторов даже отдаленно предсказывать будущее? Как узнать, на какие индикаторы смотреть? В этой статье мы рассмотрим почасовые данные о ценах 17 криптовалют с 2017 года по настоящее время (октябрь 2021 года) с использованием неконтролируемого машинного обучения, в частности анализа основных компонентов.

Не вдаваясь в математические подробности, анализ основных компонентов (PCA) - это способ получить наиболее информативные измерения из n-мерного векторного пространства. Цель состоит в том, чтобы построить модель PCA, которая учитывает 11 различных технических индикаторов и выводит два наиболее информативных основных компонента. Затем эти основные компоненты будут нанесены на график для каждого часа с 2017 года по настоящее время в зависимости от соотношения между ценой за 4 часа в будущем и текущей ценой. Надеюсь, визуализация данных таким образом позволит нам найти «карманы» этих индикаторов по этим двум измерениям, которые исторически были связаны с предсказуемыми изменениями цен. Для дальнейшей экстраполяции карманы, связанные с повышением цен, можно рассматривать как сигнал о покупке, карманы, связанные со снижением цен, можно рассматривать как короткие сигналы, а карманы, связанные с шумными непредсказуемыми будущими ценами, можно рассматривать как регионы, в которые вы должны направлять прозрачны и могут быть съедены торговыми сборами в долгосрочной перспективе.

Обзор

  1. Собирать данные
  2. Создавать ярлыки
  3. Добавить функции технического анализа
  4. Нормализовать
  5. Подходит для модели PCA
  6. Визуализируйте и интерпретируйте результаты

Сбор данных

Проект начинается с Binance API. Здесь мы соберем 1-часовые исторические klines с 1 января 2017 г. по 17 октября 2021 г. для 11 криптовалют.

Перебирая список криптовалют, мы можем собрать данные с помощью функции get_historical_klines () ниже. Используются следующие криптовалюты: ADA, ATOM, BAT, BNB, SOL, DOGE, UNI, VET, BTC, ONT, ETC, FIL, MKR, ETH, LTC, ZRX и NEO с ценой на USDT.

Создание этикеток

Далее нам нужно сгенерировать нашу цель для анализа. В частности, мы будем перебирать наши необработанные данные с Binance для каждой криптовалюты, смотреть вперед на 4 часа и получать соотношение: будущая цена / текущая цена. 4 часа были здесь несколько произвольным выбором, и их можно настроить для сравнения результатов с разной периодичностью. Следующий цикл выполняется для каждой из 17 криптовалют.

Добавление функций технического анализа

Теперь мы будем использовать библиотеку Python TA-Lib для вычисления функций технического анализа. TA-Lib - это библиотека, в которой есть практически все функции технического анализа, которые вы можете себе представить, уже реализованные для вас на Python. Это отличный инструмент для быстрой разработки функций без необходимости кодировать все утомительные математические преобразования.

Для целей этого проекта использовались только функции, которые попадают в нормализованный диапазон, например, показатели RSI находятся в диапазоне от 0 до 100. Причина этого в том, что, поскольку мы используем такой большой временной масштаб, функции, которые перемещаются вместе с ценой, будут не будет информативным при оптимизации для 4-часового временного окна. Например, знание того, что цена BTC составляла 30 000 долларов 4 месяца назад, не является полезной информацией при попытке предсказать будущее всего на 4 часа; поэтому сравнение скользящих средних неинформативно. Характеристики должны быть сопоставимы с инвариантом времени, чтобы модель могла сделать достаточные обобщения. Были выбраны следующие характеристики:

Volume CMF, Volume MFI, Volatility DCP, Trend Psar Down Indicator, Trend Psar Up Indicator, Trend STC, Momentum RSI, Momentum Stoch RSI, Momentum Stoch RSI K, Momentum Stoch RSI D, Momentum Stoch

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

Математическое и теоретическое описание каждого из них можно найти в документации TA-Lib.

Нормализация функций

Несмотря на то, что мы выбрали функции, которые попадают в стандартизованные диапазоны, они не обязательно находятся в одном масштабе друг с другом. Например, некоторые из них находятся между 0 и 100, а другие - между 0 и 1.

Предполагая, что неявное значение каждой функции является монотонным, мы можем нормализовать каждую функцию от 0 до 1, используя минимальную / максимальную нормализацию.

Модель анализа компонентов принципа построения

Теперь, когда у нас есть набор данных, организованный в нормализованные объекты, X, и метки y, мы можем приступить к адаптации нашей модели PCA. Для этого используется scikit-learn. Важное примечание об анализе основных компонентов заключается в том, что это неконтролируемый метод. Другими словами, модель не пытается узнать или предсказать что-либо о нашей метке прибыли / убытка. Фактически, у него нет никакой информации о этикетке; это просто разделение наших предыдущих 11 функций на 2 наиболее информативных направления и создание карты между ними. Преобразуя 11-мерные данные только в 2-х мерные, мы определенно теряем информацию; на самом деле нужно учитывать компромисс между сложностью и понятностью. Таким образом мы можем лучше визуализировать и интерпретировать наши данные и, надеюсь, определить пороговые значения между кластерами индикаторов, которые связаны с будущими движениями цен.

Визуализация результатов

Момент истины, давайте посмотрим.

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

Но помните, что конечная цель не в том, чтобы предсказать будущее движение цены для всех ~ 250 000 временных точек, включенных в этот график. Если мы сможем просто идентифицировать любую небольшую часть этого, которая может предсказывать будущее, мы потенциально можем получить наш сигнал о покупке (или короткой позиции). В частности, мое внимание привлекает крайний правый (положительный pc1) угол.

Вместо того, чтобы рассматривать каждую точку по отдельности, возможно, мы сможем лучше понять это, создав регионы и закрасив их средним движением цен в этом конкретном регионе. Ниже показаны те же данные, визуализированные в виде сетки 50x50, окрашенной средней ценой в каждой области координат pc1 и pc2.

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

Если мы немного увеличим масштаб, то увидим, что эта область в среднем связана с восходящим движением цен. Некоторые регионы приближаются к увеличению почти на 1% за временной шаг или за сделку, если бы мы теоретически торговали только в этом регионе.

В качестве дополнительного соображения можно задаться вопросом: сколько именно временных шагов представлено в каждом из этих регионов? Например, если регион связан с высоким изменением средней цены, но общее количество точек, включенных в регион, очень мало, это может быть бесполезным показателем. Здесь мы видим, что наша целевая синяя область, кажется, содержит достаточный размер выборки, чтобы быть полезной.

Заключительные мысли и идеи на будущее

  1. Эти данные в настоящее время представляют собой обобщение крупномасштабных усредненных данных за длительный период времени. Размышляя о вещах в меньшем временном масштабе, определенно нужно учитывать больше. Давления, которые не отражаются в этих данных, такие как новости, циклы роста и консолидации, социальные настроения и т. Д., Могут играть роль в прогнозировании будущих цен. Приведенные выше результаты основаны только на структуре цен за несколько дней до рассматриваемого момента времени.
  2. Объединив все 17 криптовалют в одном анализе, мы предполагаем, что все они имеют одинаковую или, по крайней мере, схожую структуру цен. В будущей итерации было бы интересно увидеть различия между криптовалютами.
  3. В настоящее время мы не разделяем по временным периодам, например, 2018 год может следовать другим моделям в структуре цен, чем 2019 год. Чтобы проверить эту гипотезу, можно провести точно такой же анализ, отфильтрованный по разным временным периодам, и посмотреть, появятся ли те же модели.

Полный код можно найти здесь.

Отказ от ответственности: эта статья предназначена только для информационных целей и не должна рассматриваться как финансовый совет.