В этой статье описывается методика прогнозирования поведения рынка. Вторая часть демонстрирует применение подхода в торговой стратегии.
Вступление
Рыночные данные представляют собой последовательность, называемую временными рядами. Обычно исследователи используют только данные о ценах (или доходности активов) для создания модели, которая прогнозирует следующее значение цены, направление движения или другие выходные данные. Я думаю, что лучший способ - использовать для этого больше данных. Идея состоит в том, чтобы попытаться объединить разнообразные рыночные условия (волатильность, объемы, изменение цен и т. Д.)
Первый тип потенциальных характеристик - это различные производные ценовых данных. Второй тип - это набор производных по объему.
Эти функции будут описывать текущее состояние рынка более сложным, чем необработанные рыночные данные или простые доходы.
Вы увидите эти возможности в следующей части статьи. Что касается моделирования, мы будем использовать скрытую марковскую модель.
Скрытая марковская модель (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 (определение этих критериев см. В этом сообщении). Просадка слишком велика, но намного меньше просадки бенчмарка.
Заключение
- Предложил подход, основанный на универсальных характеристиках цены и объема в виде последовательностей.
- Осуществлена интерпретация скрытых состояний модели.
- Построил модель с использованием скрытой марковской модели на данных за 4 года.
- Создал простую торговую стратегию, которая тестировалась на выборочных данных (1,5 года) без переобучения, включая комиссию и проскальзывание.
- Эта стратегия превосходит контрольные показатели покупки и удержания, и у нее положительная альфа, а бета близка к 0.
- Артефакты исследования загружены на GitHub.
Способы улучшения достигнутого результата:
- Добавьте в модель новые функции.
- Поэкспериментируйте с длиной окна.
- Постройте модель с разным количеством скрытых состояний.
- Попробуйте сформулировать новые интерпретации скрытого состояния и правила использования в стратегии.
- Создайте портфолио на основе нескольких активов.
- Добавьте простые правила торговли, такие как тейк-профит, стоп-лосс и т. Д.
Эти улучшения могут помочь получить более сложный результат стратегии: уменьшить просадку до 15–20%, увеличить альфа и sortino, увеличить емкость.
С наилучшими пожеланиями,
Примечание редакторам Data Science. Хотя мы разрешаем независимым авторам публиковать статьи в соответствии с нашими правилами и рекомендациями, мы не поддерживаем вклад каждого автора. Не стоит полагаться на работы автора без консультации с профессионалами. См. Подробности в наших Условиях для читателей.