Меня зовут Денис, я алгоритмический трейдер и разработчик.
Когда я только начинал в алготрейдинге, мне хотелось использовать машинное обучение. Но тогда я почти ничего не знал о ML и Data Science. Сейчас я уже разбираюсь, но понимаю, что не все трейдеры готовы тратить месяцы на изучение этих тем.
Поэтому я создал библиотеку dquant — чтобы прогнозировать волатильность без углублённого знания ML. Достаточно знать Python и уметь получать сырые данные: open, close, high, low, volume.
Это не полный гайд, а базовый пример. За подробностями — в документацию.
Процесс из двух шагов
- Подготовка сырых данных (open, close, high, low, volume)
- Обучение и прогноз — всего 3 строки кода
Что происходит под капотом
- Данные разделяются на входные и выходные
- Из входных данных генерируются фичи, из выходных — таргеты
- Выборка делится на обучающую и валидационную
- Обучение может остановиться досрочно, если модель начинает переобучаться
- После обучения выводится график ошибок
Модель можно использовать сразу или сохранить для последующего применения.
Все зависимости (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:
- Установите и запустите MetaTrader 5 (например, через брокера FxPro)
- Установите Python-библиотеку MetaTrader5
Сохранение модели
Обученную модель можно сохранить и использовать позже — например, для торговли в реальном времени.
Как попробовать прямо сейчас
Запустить код можно прямо в браузере через Jupyter Notebook.
Библиотека dquant с открытым исходным кодом (лицензия MIT). Если найдёте баг или хотите новую функцию — создавайте Issue. Отвечаю оперативно.