В этой статье описывается методика прогнозирования поведения рынка. Вторая часть демонстрирует применение подхода в торговой стратегии.

Вступление

Рыночные данные представляют собой последовательность, называемую временными рядами. Обычно исследователи используют только данные о ценах (или доходности активов) для создания модели, которая прогнозирует следующее значение цены, направление движения или другие выходные данные. Я думаю, что лучший способ - использовать для этого больше данных. Идея состоит в том, чтобы попытаться объединить разнообразные рыночные условия (волатильность, объемы, изменение цен и т. Д.)

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

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

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

Скрытая марковская модель (HMM) - это статистическая марковская модель, в которой моделируемая система считается марковским процессом с ненаблюдаемыми (то есть скрытыми) состояниями. Наблюдаемые данные - это наши рыночные особенности, скрытые состояния - это наше рыночное поведение.

Наша цель - интерпретировать скрытое состояние после моделирования и создать торговую стратегию на основе этих знаний.

Базовая фигура скрытой марковской модели выглядит так

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

Разработка и моделирование функций

Я думаю, что сочетание кода и объяснений - хороший способ погрузиться в исследование. Приступим к кодированию.

Наши библиотеки

Этот код загружает данные для BTC / USD из Quandl.

Затем мы можем построить данные о цене и объеме.

После этого мы получаем эту цифру

Теперь мы готовы к кодированию функций проектирования и моделирования.

Выделим период поездов на период до 01.01.2018. Следующий код запускает разработку функций и визуализирует ее.

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

В приведенном выше коде мы также создали столбец future_return, который сдвинут на одну задержку для last_return. Это первый ключ для понимания скрытых состояний. Давайте изобразим это значение как кумулятивную сумму по каждому штату.

Как видим, состояние №0 имеет тенденцию к снижению. Состояние №1 не имеет четкой тенденции. Последнее состояние №2 имеет сильную тенденцию к росту. Этот простой трюк с кумулятивной суммой future_return позволяет нам понять, как каждое состояние соответствует следующему движению цены.

Второй ключ - исследовать каждое состояние по характеристикам. После этого мы можем связать эти два события (будущее движение и текущее состояние). Давайте смоделируем код и визуализируем особенности каждого состояния.

Теперь вы можете увидеть, как каждое состояние описывает текущее состояние. Например, состояния # 0 и # 2 имеют большое отклонение громкости, это означает, что эти состояния часто представлены на большой громкости, а состояние # 1 - на низкой. Кроме того, состояния №0 и №2 часто указываются на высокой волатильности.

Интересен тот факт, что состояние № 0 имеет низкие значения для last_return и ma_ratio. Вероятно , состояние # 0 соответствует текущему состоянию нижней границы (в настоящее время). Обратная ситуация для государства №2.

Интерпретация этих двух выводов такова:

Если рынок имеет текущее состояние # 0, у нас в основном неблагоприятное состояние рынка (второй ключ) в текущей ситуации, и эта тенденция будет продолжаться (первый ключ).

Если у рынка текущее состояние №1, у нас есть неопределенность в отношении тенденции.

Если у рынка текущее состояние # 2, у нас в основном положительное состояние рынка (второй ключ) при текущей ситуации, и эта тенденция будет продолжаться (первый ключ).

Следующая строка кода сохраняет обученную модель в файл.

заявка

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

Логика проста: короткое замыкание в состоянии № 0, отсутствие позиции в состоянии № 1, длинное в состоянии № 2.

Наша стратегия будет реализована на фреймворке Catalyst. В этом посте я продемонстрировал краткое введение в Catalyst. Стратегия будет содержаться в отдельном py-файле. Давайте запрограммируем основные функции и подключим библиотеки

Основные параметры загрузки модели содержатся в функции initialize

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

Последняя функция дополнительная. Рисуем цифры и печатаем результат.

Давай запустим стратегию

Как видим, предложенный алгоритм явно превосходит эталонный. Похоже, стратегия пытается поймать тренд и следовать за ним. Плохое условие для стратегии - отсутствие периода тренда.

Общий доход: 1.4889661611137708

Коэффициент Сортино: 1.8800527725096972

Максимальная просадка: -0.30508556497453887

альфа: 0,5672854146797404

бета: -0,1541654082608784

Альфа положительная, бета очень близка к 0 (определение этих критериев см. В этом сообщении). Просадка слишком велика, но намного меньше просадки бенчмарка.

Заключение

  1. Предложил подход, основанный на универсальных характеристиках цены и объема в виде последовательностей.
  2. Осуществлена ​​интерпретация скрытых состояний модели.
  3. Построил модель с использованием скрытой марковской модели на данных за 4 года.
  4. Создал простую торговую стратегию, которая тестировалась на выборочных данных (1,5 года) без переобучения, включая комиссию и проскальзывание.
  5. Эта стратегия превосходит контрольные показатели покупки и удержания, и у нее положительная альфа, а бета близка к 0.
  6. Артефакты исследования загружены на GitHub.


Способы улучшения достигнутого результата:

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

Эти улучшения могут помочь получить более сложный результат стратегии: уменьшить просадку до 15–20%, увеличить альфа и sortino, увеличить емкость.

С наилучшими пожеланиями,

Сергей

Примечание редакторам Data Science. Хотя мы разрешаем независимым авторам публиковать статьи в соответствии с нашими правилами и рекомендациями, мы не поддерживаем вклад каждого автора. Не стоит полагаться на работы автора без консультации с профессионалами. См. Подробности в наших Условиях для читателей.