Этот пост представляет собой общий обзор платформы, которую мы разработали для машинного обучения с рыночными данными.
Рыночные данные
Мы будем говорить о потиковых рыночных данных уровня 1 и уровня 2, доступных на биржах: это данные о сделках, котировках (или верхней части книги) и книге заявок (или глубине книги). Торговая запись состоит из безопасности, метки времени, цены, размера, условий сделки. Котировки состоят из ценной бумаги, метки времени, цены предложения, размера предложения, цены предложения, размера предложения. Данные книги ордеров состоят из безопасности, метки времени, цены предложения, размера предложения, цены предложения, размера предложения для каждого уровня, доступного в книге ордеров. Данные рынка по ордерам разбивают его на отдельные лимитные ордера.
Две вещи, которые следует отметить в отношении рыночных данных: они хорошо структурированы (поставляются с простой фиксированной схемой) и их много (особенно данных книги заказов). Следует также отметить, что это данные временного ряда: каждая запись имеет временную метку соответствующего события.
Создание функции
Есть много сделок, котировок и обновлений книги ордеров, но использование их всех для обучения моделей вряд ли полезно для большинства задач прогнозирования. Преобразование данных в соответствующие функции гораздо более важно с точки зрения производительности, объяснимости и осуществимости. Мы будем использовать задачу предсказания внутридневного объема (прогнозирование объема торгов в следующие 10 минут) в качестве примера для демонстрации нашей структуры. Особенности, которые были рассмотрены в этой задаче, включают объемы в предыдущих интервалах, волатильность в предыдущих интервалах, статистику о стакане заявок в предыдущих интервалах. Другие функции, которые приходят на ум, включают объем аукциона открытия/закрытия и объемы связанных инструментов.
Доступ к тиковым данным (в отличие от баров или ежедневных данных) обеспечивает наибольшую гибкость при создании функций. Возможность создавать функции из огромного количества потиковых данных зависит от способности легко и эффективно их обрабатывать. Именно здесь вступают в игру платформы управления тиками. У нас есть собственный OneTick для выполнения этой работы. OneTick поставляется с рядом функций, которые упрощают и ускоряют извлечение признаков. Мы взаимодействуем с OneTick с помощью API-интерфейса Python, похожего на pandas, который называется otp. Подробнее об отп здесь и здесь.
Млопс
Иметь рыночные данные и инструменты для создания функций — это нормально для быстрого эксперимента по науке о данных, но этого недостаточно для готовой к производству платформы машинного обучения. Мы собрали инфраструктуру MLOps, которая поддерживает несколько пользователей, отслеживание экспериментов, параллельную настройку гиперпараметров и работу с GPU/CPU/специальными рабочими процессами. Подробная информация о том, как мы используем Docker, JupyterLab, JupyterHub, MLFlow, Ray, Kubernetes и Airflow, будет опубликована в отдельной статье.
Структура науки о данных
Итак, у нас есть рыночные данные, эффективный способ создания функций и структура MLOps. Немного поэкспериментировав с ним, мы заметили, что большая часть кода для выбора данных, выбора модели и оценки одинакова и естественным образом вписывается в общую библиотеку/структуру обработки данных. Мы написали фреймворк, который стандартизирует большую часть работы по науке о данных и при необходимости позволяет настроить эксперимент, отредактировав файл YAML или даже используя пользовательский интерфейс внутри Jupyter. Как обычно, об этом будет отдельный пост.
Пример использования: прогноз объемов в течение дня
Мы продемонстрируем все вышеперечисленное на задаче предсказания внутридневного объема. По нему есть немного литературы. Несколько ссылок, которые нам понравились больше всего, это Моделирование внутридневного объема и прогнозирование для алгоритмической торговли и Прогнозирование внутридневного объема торговли: подход с фильтром Калмана. Как вы уже догадались: наш подход описан в этом посте (будут блокноты Jupyter с исходным кодом). Мы ищем другие проблемы с машинным обучением, связанные с рыночными данными. Мы не фанаты предсказания цен, но предсказание волатильности в нашем списке (в нем есть недавний Kaggle). Так же как и предсказание дивидендов. Дайте нам знать, какие проблемы вы считаете важными.