Прогноз волатильности в 3 строки кода без знания машинного обучения

Прогноз волатильности в 3 строки кода без знания машинного обучения

Меня зовут Денис, я алгоритмический трейдер и разработчик.

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

Поэтому я создал библиотеку dquant — чтобы прогнозировать волатильность без углублённого знания ML. Достаточно знать Python и уметь получать сырые данные: open, close, high, low, volume.

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

Процесс из двух шагов

  1. Подготовка сырых данных (open, close, high, low, volume)
  2. Обучение и прогноз — всего 3 строки кода

Что происходит под капотом

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

Модель можно использовать сразу или сохранить для последующего применения.

Все зависимости (pandas, numpy, xgboost, lightgbm, matplotlib) устанавливаются автоматически.

Быстрый старт: прогноз волатильности EURUSD

Для получения данных используем Yahoo Finance. Сначала установим библиотеку yfinance.

Само обучение и прогноз занимают 3 строки. До этого — только получение данных.

Что вы увидите

  • График обучения: ошибка на train и validation
  • Красная гистограмма — историческая волатильность
  • Зелёная гистограмма — прогноз на следующие 20 баров

Готово. Результат можно использовать для установки стопов или калибровки размера позиции.

Разбор кода

Первая строка

Создаём класс VolClustXGB, использующий модель XGBoost. Первые два аргумента — пустой словарь и default=True. Это означает, что будут использоваться гиперпараметры по умолчанию. early_stopping=True — обучение остановится, если начнётся переобучение.

Если вы хотите задать свои гиперпараметры, укажите default=False и передайте непустой словарь. Но это не обязательно — библиотека создавалась как раз для тех, кто не хочет углубляться в ML.

Вторая строка

Здесь происходит разметка данных и обучение.

  • df — сырые данные
  • input_bars=70 — модель использует 70 баров на входе. После обучения именно столько данных нужно подавать для прогноза
  • horizon=20 — прогноз на 20 баров вперёд. Для часовых данных — это 20 часов
  • trees_count=200 — максимальное количество деревьев. При early_stopping=True обучение остановится раньше, если начнётся переобучение
  • show_results=True — после обучения отобразится график ошибок на обучающей и валидационной выборках

Третья строка

Модель обучена — делаем прогноз.

  • df.iloc[-70:].copy() — последние 70 баров, которые подаются на вход модели
  • show=True — отображает результат на графике. Аргумент можно опустить, если график не нужен

Результат всегда записывается в переменную rez, независимо от того, показан ли график.

Проблема с Yahoo Finance

Библиотека yfinance не позволяет получать внутридневные данные за период больше 730 дней. Чтобы получить больше данных, можно использовать MetaTrader 5. Чем больше данных — тем дольше обучение, но точность прогнозов обычно выше.

Для работы с MetaTrader 5:

  1. Установите и запустите MetaTrader 5 (например, через брокера FxPro)
  2. Установите Python-библиотеку MetaTrader5

Сохранение модели

Обученную модель можно сохранить и использовать позже — например, для торговли в реальном времени.

Как попробовать прямо сейчас

Запустить код можно прямо в браузере через Jupyter Notebook.

Библиотека dquant с открытым исходным кодом (лицензия MIT). Если найдёте баг или хотите новую функцию — создавайте Issue. Отвечаю оперативно.

Читать оригинал