Метод классификации данных о ценах по рыночным состояниям

🐍 Кодовая база найдена здесь

🙋‍♂️ Интро

«Путь черепахи» Кертиса Фейта — это книга, которая заставила меня переоценить то, как я думаю о трейдинге. Это дало мне представление о трейдинге как о системе, определяемой правилами, которые можно построить и протестировать. Для инженера это была отличная новость, поскольку системы знакомы. Любая торговля, в которой я принимал участие заранее, была мучительной догадкой.

Кертис говорит нам, что хорошая торговая стратегия дает трейдерам преимущество над рынком. Однако это преимущество, вероятно, со временем исчезнет, ​​поскольку рынки меняются и адаптируются. Поэтому стратегии должны быть пересмотрены. Совет состоит в том, чтобы начать с простого и тщательно протестировать свою систему на истории, чтобы убедиться, что она выигрышная.

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

Технический анализ (ТА) — это область финансового анализа, которая пытается прогнозировать движение цен. Эти типы преобразований использовались в систематических торговых стратегиях. ТА основан исключительно на исторических данных и дает указания (известные как сигналы) на потенциально хорошие возможности для входа или выхода с рынка.

Инвестопедия определение технического анализа

Кертис приводит примеры генерации сигналов с помощью ТА. Стратегии могут быть такими же простыми, как расчет скользящей средней рыночной цены. Затем генерируются сигналы для входа и выхода из рынка, когда цена пересекает скользящую среднюю. Или генерация сигналов может быть более сложной, объединяя несколько технических индикаторов для генерации одного сигнала.

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

💡 Обратите внимание, что управление рисками выходит за рамки этого поста, но чрезвычайно важно!

🪖 Цели поста

  1. Создавайте технический анализ ценовых данных временных рядов.
  2. Используйте k-mean для кластеризации функций технического анализа и маркировки данных о ценах.
  3. Просмотрите результаты.

🌦 Типы рыночных условий

  1. Трендовый относится либо к восходящему, либо к нисходящему тренду. В восходящем тренде мы видим, как цена поднимается к более высоким максимумам и более высоким минимумам. В то время как нисходящий тренд описывается более низкими максимумами и более низкими минимумами. Определение тренда Investopedia
  2. Ранжирование относится к циклическому изменению цены между верхней и нижней границей без выраженного восходящего или нисходящего тренда. Определение ранжирования Инвестопедии

💿 Данные

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

Используемые данные представляют собой валютную пару EURUSD и были взяты с интервалом в 1 минуту. HistData.com является поставщиком этих данных и предостерегает от их использования для информирования любого торгового решения из-за неэффективности точности.

💶 Цены

График ниже представляет собой фрагмент данных. У нас есть четыре цены для каждого 1-минутного интервала.

  1. open — цена открытия (начальная цена интервала).
  2. high — самая высокая цена за интервал.
  3. low — самая низкая цена за интервал.
  4. close — цена закрытия (конечная цена перед следующим интервалом).

🎪 Пример данных

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

Определение рыночного цикла Investopedia

🧐 Технический анализ

🐍 Библиотека Python

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

💡 Ссылка на документы TA-Lib здесь

👍 Выбор функций

Анализ основных компонентов (PCA) использовался для выбора функций ТА, используемых в этом посте. Функции захватили значительные объемы дисперсии данных. Только 3 были выбраны, чтобы сделать анализ объяснимым.

Комбинация включает в себя 2 индикатора импульса: индекс товарного канала и осциллятор Арун. И 1 индикатор цикла, преобразование Гильберта — доминирующая фаза цикла. Однако могут быть и другие комбинации, которые хорошо работают.

🚚 Индикаторы импульса

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

📺 Индекс товарного канала (CCI)

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

Его выход колеблется в диапазоне от -200 до 200. Где -200 показывает состояния перепроданности, а 200 - состояния перекупленности. В восходящем тренде CCI обычно показывает положительные значения. В то время как в нисходящем тренде он обычно показывает отрицательные значения.

💡 Подробное объяснение CCI здесь

🔺🔻Осциллятор Арун

Колеблется между -100 и 100. Где -100 сигналов перепроданности и 100 сигналов перекупленности. Aroon более чувствителен, чем CCI. Поэтому кажется, что он лучше подходит для обозначения трендов, а не пиков и впадин.

💡 Далее Арун объяснил здесь

🚴‍♂️ Индикатор цикла

Используется для выделения повторяющихся циклических паттернов, известных как циклы; сигнализирует о начале или конце цикла. Все индикаторы циклов, предлагаемые в TA-Lib, используют преобразование Хиберта. Это метод, также используемый при обработке сигналов, для разбивки сигналов на составляющие сигналы, которые составляют общий вход. Определение Wiki Hilber-Transform

🧞‍♂️ Преобразование Гильберта — доминирующая фаза цикла (HTDP)

Отслеживает фазу доминирующего цикла в данных о ценах. Он находится в диапазоне от 0 до 360 (включая все градусы окружности) и, как говорят, сигнализирует о наиболее вероятном периоде. Начало нового цикла указывается, когда фаза доминирующего цикла достигает 360 и перескакивает с 360 на 0.

💡 Подробное объяснение протокола HTTP здесь

🧐 Анализ технических индикаторов

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

🚚 Импульс

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

🚴‍♂️ Цикл

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

🧩 Добавлена ​​сложность

Этот пример рыночного цикла позволяет относительно легко анализировать три индикатора. В действительности ценовые движения и паттерны не так четко выражены визуально.

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

👩‍💻 Кластеризация K-средних

Используя k-means, мы можем объединить результаты технического анализа в один индикатор, классифицирующий состояния рынка. Поэтому упрощаем анализ, чтобы облегчить интерпретацию.

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

K-means — хороший первый шаг к кластеризации. Это довольно простой алгоритм кластеризации, который часто используется при изучении наборов данных для выявления общих черт в данных.

Из-за своей простоты алгоритм k-средних требует от пользователя указать количество средних перед запуском кластеризации.

🥇 Оптимальное количество кластеров

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

Таким образом, для определения оптимального количества средних хорошим вариантом является использование оценки силуэта. Оценка объединяет расстояние между кластерами и расстояние между точками данных внутри кластеров. Небольшое расстояние внутри кластеров и большое расстояние между кластерами дает более высокий балл, сигнализируя о лучшем соответствии.

Мы можем видеть пики графика оценки силуэта при 3 средних значениях. Таким образом, 3 кластера оптимальны при разделении данных.

💡 Подробное описание силуэта здесь

🧐 Кластерный анализ

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

Кластер 0:

  • Значения HTDP (ht), распределенные в основном между 200–360, сигнализируют о том, что большинство точек данных появляется ближе к концу цикла.
  • Значения Aroon находятся в среднем диапазоне с отрицательным средним значением, что предполагает тенденцию цен в пределах диапазона к нисходящему тренду.
  • CCI показывает самые отрицательные значения по сравнению с другими кластерами, это говорит о том, что точки данных имеют нисходящий тренд и появляются ближе к концу цикла, где происходят развороты цены.

Кластер 1:

  • Среднее значение HTTPP составляет около 0. Следовательно, этот кластер точек данных обычно находится в начале нового цикла.
  • Арун показывает самое отрицательное среднее из всех кластеров, предполагая, что это сигнализирует о нисходящем тренде, что приводит к перепроданности цен, которые могут развернуться.
  • CCI в среднем отрицателен, как и кластер 0, что указывает на точки данных нисходящего тренда. Однако этот кластер с меньшей вероятностью показывает ценовые развороты.

Кластер 2:

  • HTDP имеет самое широкое распределение среди кластеров, но в среднем находится в среднем диапазоне, предполагая, что этот кластер обычно состоит из точек данных в середине цикла.
  • Значения Aroon положительные, с несколькими отрицательными выбросами, что предполагает восходящий тренд и перекупленность цен, которые могут развернуться.
  • Показатели CCI в среднем положительные, что свидетельствует о восходящем тренде. Включает большие положительные выбросы, предупреждающие о развороте цены от цен позиции перепроданности.

⏳ Кластеры в представлении временных рядов

График цены с кластерами, выделенными цветом, помогает выявить поведение кластеров. Как и при анализе коробчатой ​​диаграммы, кластеры 1 и 2 (красный и зеленый) выделяются тем, что демонстрируют восходящий и нисходящий тренды. В то время как кластер 0 (синий) указывает на конец цикла, сигнализируя о консолидации цены.

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

Цены, происходящие после даты и времени 20220104 113600 ближе к концу графика, показывают рынок в диапазоне между 1,1289 и 1,1295. Однако ни один класс не сигнализирует о состоянии диапазона. Вместо этого наши классы часто меняются, поскольку модель, кажется, выделяет небольшие циклы в цене.

🧪 Классификация тестовых данных

На приведенном ниже графике показаны кластерные прогнозы для последнего 1% данных о ценах. Это было упущено на этапе обучения наших моделей. График выделен зеленым для кластера 2 (восходящие тренды и пики) и красным для кластеров 1 и 0 (нисходящие тренды и консолидация цен в конце цикла).

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

Поэтому для долгосрочных стратегий этот метод потребует некоторой настройки.

🎬 Заключение

👀 Где можно использовать эту классификацию?

  1. Для упрощения технического анализа при использовании нескольких индикаторов.
  2. Имеет потенциал для включения маркировки в генерацию торговых сигналов.
  3. Используется как единая метрика для проверки состояния многих рынков (тяжелую работу делает код).
  4. Обзор эффективности торговли в условиях рынка.

💪 Сильные стороны

  1. Анализ технических индикаторов был упрощен до единого четкого изображения цены, размеченной кластерами состояния рынка.
  2. При использовании Python Scikit-Learn и TA-Lib кодирование этого решения относительно простое. Кроме того, результаты были получены быстро, и их можно масштабировать/обобщить на другие рынки.
  3. Было важно включить индикаторы циклов, поскольку они показывали явную разницу между тремя кластерами. Следовательно, это, вероятно, сильная функция для разделения данных. Однако включение этого показателя затрудняет использование классификаций для обозначения долгосрочных тенденций.

❤️‍🩹 Слабые стороны

  1. С помощью метода неконтролируемого обучения был возможен только визуальный просмотр классификаций моделей. Обычно мы использовали больший набор тестовых данных с известными метками для получения показателей производительности модели.
  2. Невозможность указать состояния ранжирования с помощью одного класса. Это можно проследить до выбранных технических индикаторов.
  3. Трудно постоянно маркировать долгосрочные тенденции. Только индикаторы импульса регулируются по времени. Таким образом, включение индикатора цикла ограничивает то, как мы приспосабливаемся ко времени. Индикаторы импульса, как правило, лучше всего работают с периодом времени по умолчанию 14 тиков в сочетании с индикатором цикла. Однако мы могли бы усреднить входные данные, чтобы уловить долгосрочные тренды, а не увеличивать временной период технических индикаторов.

🕵️ Дальнейшая работа

  1. Увеличение количества кластеров может привести к улучшению пиков и впадин сигналов.
  2. Создание правил на основе кластеризации и обратного тестирования.
  3. Изучение использования различных комбинаций технического анализа.
  4. Настройка временного диапазона для выявления более длительных трендов путем усреднения входных данных.

💡 Кодовая база найдена здесь