Model-based gym environments for limit order book trading
Джозеф Джером, Леандро Санчес-Бетанкурт, Рахул Савани, Мартин Хердеген · University of Liverpool / King’s College London / University of Warwick · 16 сентября 2022 · ICAIF 2022
Оригинал: Jerome, J., Sánchez-Betancourt, L., Savani, R., Herdegen, M. «Model-based gym environments for limit order book trading», 2022 — arxiv.org/abs/2209.07823 (PDF); код: github.com/JJJerome/mbt_gym.
Первые три автора внесли равный вклад. Перевод выполнен для личной коллекции с указанием источника.
Ключевые слова: книга лимитных заявок (LOB); маркетмейкинг; оптимальное исполнение; предоставление ликвидности; инвентарный риск; обучение с подкреплением; gym; векторизованные среды.
Аннотация
В литературе по математическим финансам накоплен богатый каталог математических моделей для задач алгоритмической торговли — маркетмейкинга и оптимального исполнения — в книгах лимитных заявок (limit order book, LOB). Статья представляет mbt_gym — Python-модуль с набором gym-сред для обучения агентов обучения с подкреплением (reinforcement learning, RL) на таких model-based торговых задачах. Модуль спроектирован расширяемым: компоненты разных моделей можно комбинировать. Поддерживаются высокоэффективные векторизованные среды, ускоряющие обучение RL-агентов. В работе мотивируется вызов применения RL к model-based LOB-задачам матфинансов, объясняется дизайн gym-среды и демонстрируется её использование на стандартных и нестандартных задачах из литературы. В конце намечена дорожная карта развития модуля; код открыт на GitHub как точка сборки RL-исследований в model-based алгоритмической торговле.
1. Введение
Существенная доля финансовых рынков сводит покупателей и продавцов через механизм книги лимитных заявок (Gould et al., 2013). Поэтому LOB — центральный объект математических финансов. Разработан широкий спектр моделей динамики цены и приходов заявок; на них анализируют маркетмейкинг и оптимальное исполнение. Модели различаются прежде всего стохастическими процессами цены и потока заявок, доступными действиями агента и функцией вознаграждения.
Обычно такие задачи решают (часто приближённо) методами теории уравнений в частных производных (PDE): формулируют уравнение Гамильтона–Якоби–Беллмана (HJB) и численно решают его схемами Эйлера или конечными разностями. Однако:
- Численный HJB требует схем, заточенных под конкретные стохастические процессы модели. Желательны более модельно-агностичные подходы.
- HJB особенно сильно страдает от проклятия размерности, что сужает класс решаемых моделей.
- При работе с HJB часто ищут полуявные решения и поэтому ограничиваются «хорошими» функциями, что сужает спектр изучаемых торговых задач.
Обучение с подкреплением решает задачи управления методом проб и ошибок. После революции глубокого обучения RL дал ряд ярких успехов. Применение RL к model-based LOB-задачам важно и перспективно:
- для математических финансов — как комплементарный к PDE метод, позволяющий решать более богатые и реалистичные модели;
- для RL-сообщества — как новый класс задач для разработки и понимания алгоритмов.
Model-free RL в принципе позволяет решать модели с предположениями, плохо совместимыми с HJB, применять один метод обучения ко многим моделям и работать в более высоких размерностях. Авторы представляют открытый бенчмарк-модуль с рядом LOB-моделей и торговых задач из литературы матфинансов вместе с RL-решениями. Цель — показать потенциал RL и упростить дальнейшие исследования.
Известная слабость RL — низкая sample efficiency. К счастью, model-based торговые задачи допускают крайне эффективную векторизацию сред; авторы используют это и показывают, что параллелизация критична для почти оптимальных решений на бенчмарках.
Основные вклады.
- Открытый репозиторий унифицированных gym-сред для спектра model-based LOB-задач.
- Оптимальные baseline-агенты для бенчмаркинга RL-алгоритмов.
- Модульный дизайн: можно взять вознаграждение из одной модели, а процессы цены и исполнения — из другой.
- Интеграция со Stable Baselines 3 (SB3): plug-and-play обучение на ранее не изученных задачах. Демонстрация — быстрое почти оптимальное решение популярной задачи маркетмейкинга методом proximal policy optimisation (PPO; Schulman et al., 2017) благодаря кастомным векторизованным средам.
- Дорожная карта дальнейшего развития бенчмарка — как по моделям и задачам, так и по RL-алгоритмам.
Модуль: https://github.com/JJJerome/mbt_gym.
1.1. Обзор литературы
1.1.1. Математические финансы
Задача маркетмейкинга с лимитками введена Ho and Stoll (1981) и математически формализована спустя три десятилетия Avellaneda and Stoikov (2008). С тех пор литература огромна. Guéant et al. (2013) дают явное решение с инвентарными ограничениями. Более реалистичные модели — Guilbaud and Pham (2013), Cartea et al. (2014). Расширения с сигналами — Cartea et al. (2018), Cartea and Wang (2020) (непрерывные и бинарные действия). Сообщество продолжает работать по опционам (Baldacci et al., 2021), FX (Barzykin et al., 2022) и автоматизированному маркетмейкингу (Cartea et al., 2022).
Литература по оптимальному исполнению не менее обширна: Bertsimas and Lo (1998), Almgren and Chriss (2001). Фокус дизайна моделей — как рынок перерабатывает поток заявок ликвидатора и как строить и эксплуатировать сигналы (Cartea and Jaimungal, 2015, 2016; Gatheral et al., 2012; Forde et al., 2022; Neuman and Voß, 2022; Donnelly and Lorig, 2020; Kalsi et al., 2020; Cartea et al., 2020). Далее — стохастическая волатильность и ликвидность (Almgren, 2012), стохастический price impact (Barger and Lorig, 2019; Fouque et al., 2022), латентность и трения (Moallemi and Sağlam, 2013; Cartea and Sánchez-Betancourt, 2021). Учебники: Cartea et al. (2015), Guéant (2016).
1.1.2. RL для высокочастотной торговли
Краткий обзор RL для HFT с акцентом на динамику среды обучения — главный фокус статьи. Основное внимание — маркетмейкингу (большинство сред mbt_gym сейчас именно про MM); кратко затронуто и RL для оптимального исполнения.
Три главных подхода к моделированию рынка в RL-среде:
- Market replay — воспроизведение исторических данных в симуляторе, агент взаимодействует с ними.
- Model-based — категория данной статьи.
- Агентные симуляторы — hand-crafted агенты, моделирующие участников, взаимодействуют через биржевой механизм с обучаемым агентом.
Сравнение достоинств подходов — Balch et al. (2019).
Market replay для HFT: Nevmyvaka et al. (2006) и Jerome et al. (2022) — Nasdaq; Spooner et al. (2018) — LSE; Zhong et al. (2020) — фьючерсы CME; Xu et al. (2022) — XSHE; Patel (2018), Sadighian (2019), Gašperov and Kostanjčar (2021) — криптовалюты.
Model-based маркетмейкинг: Chan and Shelton (2001) — пуассоновская модель в духе Glosten–Milgrom; Kim and Shelton (2002) — скрытая марковская модель на Nasdaq; Lim and Gorse (2018) — модель Cont et al. (2010); Spooner and Savani (2020) — робастная adversarial-версия задачи из Cartea et al. (2015, §10.2).
Агентные HFT-симуляторы для RL: Ganesh et al. (2019), Kumar (2020), Karpe et al. (2020), Amrouni et al. (2021).
1.1.3. Место mbt_gym среди подходов
Market replay максимально близок к данным, но страдает от отсутствия контрфактиков: действия агента не меняют историю стакана (или меняют её эвристически). Агентные симуляторы (ABIDES и др.) дают интерактивность многих участников, но калибровка hand-crafted агентов трудна, а «оптимум» обычно неизвестен. Model-based среды mbt_gym жертвуют микроструктурной детализацией полного стакана в пользу аналитической ясности: процессы цены и потока задаются явно, часто существует HJB-решение, можно мерить regret относительно оптимума.
Для исследования самих RL-алгоритмов это преимущество: задача становится контролируемым бенчмарком вроде классических Mujoco-сред, но с финансовой семантикой (инвентарь, спред, fill). Для калибровки под конкретный тикер и продакшен-исполнение по-прежнему нужны replay или гибриды; модуль позиционируется как research harness и «мост» между PDE-литературой и deep RL.
2. Дизайн модуля
Принципы: расширяемость, общность, минимум дублирования кода. Все gym-среды наследуют класс TradingEnvironment и разделяют общие функции step и обновления состояния.
Функция step не специфична для конкретной торговой задачи: она копирует текущее состояние, вызывает _update_state(action), проверяет терминальность по времени, считает вознаграждение через выбранную RewardFunction и возвращает кортеж (state, rewards, dones, infos) в стиле OpenAI Gym / Gymnasium.
Состояние агента кодируется NumPy-массивом. Базовые индексы:
CASH_INDEX = 0— кэш $X_t$;INVENTORY_INDEX = 1— инвентарь $Q_t$;TIME_INDEX = 2— время $t$;- далее — состояние mid-price процесса, процесса приходов и модели fill probability.
Конструктор принимает горизонт terminal_time, число шагов n_steps (шаг $\Delta t = T/n$), модели mid-цены / приходов / fill, тип действий (limit, touch, limit_and_market), начальные кэш и инвентарь, ограничения и число траекторий num_trajectories для векторизации.
Функция _update_state специфична для торговли, но едина для многих стандартных LOB-моделей, потому что у них общий порядок зависимостей стохастических процессов:
- процесс приходов обновляется первым;
- он влияет на mid-цену;
- затем обновляется модель fill probability.
Схематично:
arrivals = arrival_model.get_arrivals()
if action_type in ["limit", "limit_and_market"]:
depths = limit_depths(action)
fills = fill_probability_model.get_fills(depths)
else:
fills = post_at_touch(action)
_update_agent_state(arrivals, fills, action)
_update_market_state(arrivals, fills, action)
Обновление агента учитывает рыночные заявки (для limit_and_market), исполнения лимиток на touch или на выбранных глубинах и сдвигает время на step_size. Инвентарь и кэш клипуются по заданным максимумам.
Пространство наблюдений — Box с границами по кэшу, инвентарю, времени и диапазонам состояний трёх стохастических процессов. Пространство действий зависит от action_type (см. §2.4).
Архитектура TradingEnvironment подробнее
Единый каркас среды строится вокруг композиции трёх стохастических процессов и функции вознаграждения. На каждом дискретном шаге времени длины $\Delta t=T/n_{\mathrm{steps}}$ среда:
- семплирует индикаторы приходов рыночных заявок на bid/ask из
ArrivalModel(пуассон или Хокс); - по типу действия вычисляет глубины лимиток или факт выставления на touch;
- семплирует исполнения через
FillProbabilityModel(независимо по сторонам, условно на глубинах); - обновляет кэш и инвентарь агента (и опционально рыночные заявки агента);
- прогоняет
updateу процессов приходов, mid-цены и fill — в фиксированном порядке; - записывает новые состояния процессов в вектор наблюдения и начисляет reward.
Вектор наблюдения имеет вид
$[X_t,\, Q_t,\, t,\, \mathbf{s}^{\mathrm{mid}}_t,\, \mathbf{s}^{\mathrm{arr}}_t,\, \mathbf{s}^{\mathrm{fill}}_t]$,
где последние три блока — внутренние состояния соответствующих процессов (для пуассона mid-цены это часто просто $S_t$; для OU-дрифта — $(S_t,\alpha_t)$; для Хокса — интенсивности $\lambda^{\pm}_t$). Именно поэтому observation space автоматически расширяется при смене модели без переписывания step.
Начальный инвентарь может быть детерминированным целым или парой границ для равномерного целочисленного семплирования — это важно для exploration в policy gradient, когда без случайного старта агент редко видит большие $|Q|$.
Клиппинг кэша и инвентаря — защитный механизм численной устойчивости: при выходе за max_inventory / max_cash значения обрезаются, а в лог пишется предупреждение. Для теоретических бенчмарков лимиты выбирают достаточно широкими, чтобы не искажать оптимум.
Почему один _update_state покрывает много моделей
Классические постановки Avellaneda–Stoikov, Cartea–Jaimungal, Guéant–Lehalle–Fernandez-Tapia и CJR с Хоксом/OU-скачками различаются деталями SDE и fill-функций, но разделяют одну причинно-следственную схему: внешний поток liquidity takers → движение mid (возможно с импактом) → вероятность fill лимиток маркетмейкера как функция глубины. Пока эта схема сохраняется, модульная композиция процессов достаточна. Задачи, где агент сам задаёт торговую скорость и непрерывный temporary/permanent impact (классика Almgren–Chriss и последователи), требуют нового типа действий и отдельного impact-класса — это вынесено в дорожную карту (§5).
2.1. Процессы приходов
Пуассоновский процесс
Класс PoissonArrivalModel — наиболее частая модель приходов в литературе по маркетмейкингу. Приходы рыночных заявок на покупку/продажу моделируются пуассоновскими процессами $(M^{\pm}_{t})_{t\ge 0}$ с интенсивностями $\lambda^{\pm}\in\mathbb{R}^{+}$.
Процесс Хокса
Самовозбуждающийся механизм Хокса реализован в HawkesArrivalModel (см. также Appendix A.3 в Cartea et al., 2015). Для простоты — экспоненциальные ядра. Пусть $(\lambda^{\pm}_{t})_{t\ge 0}$ — стохастические интенсивности потока buy/sell, $(M^{\pm}_{t})_{t\ge 0}$ — соответствующие считающие процессы. Реализованы чуть более общие стохастические интенсивности:
где $\kappa>0$ — скорость возврата к среднему (для стационарности Хокса $\kappa$ должно быть достаточно большим), $\bar{\lambda}>0$ — базовая интенсивность, $\gamma$ — размер скачка.
2.2. Процессы mid-цены
Ниже $(W_{t})_{t\ge 0}$ — стандартное броуновское движение. Реализованные mid-price модели делятся на две группы: (i) броуновские mid-цены и (ii) динамика со mean-reverting дрифтом.
Броуновское движение
BrownianMotionMidpriceModel — арифметическое броуновское движение:
где $\mu\in\mathbb{R}$ — дрифт, $\sigma\in\mathbb{R}^{+}$ — волатильность.
GeometricBrownianMotionMidpriceModel — геометрическое броуновское движение:
BrownianMotionJumpMidpriceModel (Guéant et al., 2013, §5.2) включает импакт исполненных заявок:
где $M^{\pm}_{t}$ — рыночные заявки liquidity takers, $\xi^{\pm}\in\mathbb{R}^{+}$ — параметры постоянного price impact.
Mean-reverting дрифт
Класс OuMidpriceModel покрывает Ornstein–Uhlenbeck (OU) динамику mid-цены (Bergault et al., 2022; Cartea et al., 2021). На его базе — OuDriftMidpriceModel: mid-цена имеет краткосрочный альфа-сигнал в виде OU (Lehalle and Neuman, 2019; Micheli et al., 2021; Cartea and Jaimungal, 2016):
где $\sigma^{S}>0$ — волатильность mid-цены, $W^{S}$ — броуновское движение, а $(\alpha_{t})_{t\ge 0}$ — OU-процесс:
\[ \mathrm{d}\alpha_{t}=\kappa^{\alpha}(\bar{\alpha}-\alpha_{t})\,\mathrm{d}t+\sigma^{\alpha}\,\mathrm{d}W^{\alpha}_{t}. \tag{6} \]Здесь $\sigma^{\alpha}>0$ — волатильность OU, $\kappa^{\alpha}\ge 0$ — скорость mean-reversion, $\bar{\alpha}$ — уровень возврата, $W^{\alpha}$ — независимое броуновское движение.
OuJumpMidpriceModel / OuJumpDriftMidpriceModel добавляют скачки от рыночных заявок (Cartea et al., 2014):
2.3. Модели вероятности исполнения (fill probability)
Большинство моделей литературы используют ExponentialFillFunction: вероятность исполнения заявки, выставленной на глубине $\delta^{\pm}$,
с экспонентой заполнения $\kappa>0$. При $\delta^{\pm}\in\mathbb{R}^{+}$ значение лежит в $[0,1]$.
Поскольку fill-модель — экземпляр StochasticProcess, допустима экспоненциальная модель со стохастическим $\kappa$, зависящим от приходов, действий и исполнений. Другие функциональные формы — прямые обобщения.
TriangularFillFunction принимает параметр $\delta_{\texttt{max}}>0$ (max_fill_depth): вероятность равна $1$, если $\delta^{\pm}<0$ (в коде — граничный случай), и $1-\delta^{\pm}/\delta_{\texttt{max}}$ при $\delta^{\pm}\le\delta_{\texttt{max}}$ (и нулю глубже). Естественная форма, но в литературе, по словам авторов, почти не встречалась.
PowerFillFunction (Cartea et al., 2014) принимает fill_exponent $\alpha>0$ и fill_multiplier $\kappa>0$; для $\delta^{\pm}\ge 0$:
У всех fill-моделей есть свойство max_depth, ограничивающее пространство действий: глубина $\delta^{\pm}$, на которой вероятность не исполниться не менее 99% (вероятность исполнения < 1%).
2.4. Пространства действий
Реализованы три способа взаимодействия агента со стаканом.
Тип limit. Участник выставляет заявки на расстоянии $\delta^{+}$ от mid на ask и $\delta^{-}$ от mid на bid. Большая часть литературы по маркетмейкингу и значительная часть по оптимальному исполнению попадает сюда. Пространство действий — непрерывный Box размерности 2 с границами $[0,\texttt{max_depth}]$.
Тип limit_and_market. Расширяет limit: агент может также посылать рыночные заявки на одну единицу актива — buy, sell или обе. Предполагается исполнение на расстоянии minimum_tick_size от mid на соответствующей стороне книги.
Тип touch. Маркетмейкер решает, выставляться ли на лучших котировках. Действия бинарны (MultiBinary(2)); нужен minimum_tick_size — расстояние лучших котировок от mid. При приходе liquidity-taking заявки на покупку/продажу лимитка агента исполняется, если он стоял на лучшем ask/bid.
2.5. Функции вознаграждения
Пусть $T>0$, $\mathfrak{T}=[0,T]$; $(X_{t})_{t\in\mathfrak{T}}$ — кэш трейдера, $(Q_{t})_{t\in\mathfrak{T}}$ — инвентарь, $(S_{t})_{t\in\mathfrak{T}}$ — mid-цена. Mark-to-market ценность позиции:
\[ Y_{t} := X_{t}+Q_{t}S_{t}. \]PnL («profit and loss», риск-нейтральное вознаграждение) — изменение MTM: $Y_{T}-Y_{0}$.
RunningInventoryPenalty принимает per_step_inventory_aversion $\phi\ge 0$ и terminal_inventory_aversion $a\ge 0$. Вознаграждение — дискретизация по времени функционала
ExponentialUtility принимает risk_aversion $\gamma>0$ и вычисляет $\exp\bigl(-\gamma(Y_{T}-Y_{0})\bigr)$.
2.6. Примеры поддерживаемых моделей
Базовый торговый класс расширяется до стандартных моделей литературы (Таблица 1) и до гибридов, получаемых комбинацией компонентов (Таблица 2).
| Название | Приходы | Mid-цена | Действия | Вознаграждение |
|---|---|---|---|---|
| Avellaneda–Stoikov | PoissonArrivalModel | BrownianMotionMidpriceModel | limit | ExponentialUtility |
| MM с лимитками (Cartea et al., §10.2) | PoissonArrivalModel | BrownianMotionMidpriceModel | limit | RunningInventoryPenalty |
| MM at the touch (Cartea et al., §10.2.2) | PoissonArrivalModel | BrownianMotionMidpriceModel | touch | RunningInventoryPenalty |
| Cartea–Jaimungal–Ricci (CJR) | HawkesArrivalProcess | OuJumpDriftMidpriceModel | limit | RunningInventoryPenalty |
| Guéant–Lehalle–Fernandez-Tapia (§5.2) | PoissonArrivalModel | BrownianMotionJumpMidpriceModel | limit | ExponentialUtility |
| Опт. исполнение limit+market (Cartea et al., §8.4) | PoissonArrivalModel | BrownianMotionMidpriceModel | limit_and_market | RunningInventoryPenalty |
| Название | Приходы | Mid-цена | Действия | Вознаграждение |
|---|---|---|---|---|
| A–S с потоками Хокса | HawkesArrivalProcess | BrownianMotionMidpriceModel | limit | ExponentialUtility |
| CJR-14 с pure-jump ценой | HawkesArrivalProcess | OuJumpDriftMidpriceModel | touch | RunningInventoryPenalty |
| CJR-14 с экспоненциальной полезностью | HawkesArrivalProcess | OuJumpDriftMidpriceModel | limit | ExponentialUtility |
Именно эта «лего-сборка» — сильная сторона модуля: исследователь может быстро поставить эксперимент на ранее не рассмотренной комбинации динамики и критерия.
2.7. Векторизованные среды
Ключевая особенность сред mbt_gym — высокая параллелизация. Одна траектория состояний и вознаграждений для данной политики имеет очень большую дисперсию из-за стохастичности сразу из нескольких источников: (1) mid-цена; (2) процесс приходов; (3) случайность исполнения лимиток агента.
Стандартный способ параллелизовать RL-rollouts — поднять много сред на потоках/CPU (concurrent.futures) и собирать траектории в центре обучения. Это масштабирует deep RL по железу, но структура model-based маркетмейкинга допускает гораздо более эффективный режим: одновременная симуляция многих траекторий через векторные операции линейной алгебры. mbt_gym использует NumPy-массивы (Van Der Walt et al., 2011) как представление состояний, действий и вознаграждений.
Ускорение относительно multiprocessing показано на Рис. 1 оригинала: при 1000 траекториях multiprocessing занимает ~5 мин 30 с, а NumPy-подход — ~0.2 с (AMD Ryzen 7 3800X, 16 потоков, 64 GB RAM). На практике при policy gradient авторы использовали 10 000 (и даже 1 000 000) rollouts — с multiprocessing это было бы запретительно медленно.
3. Базовые агенты
Реализованы baseline-агенты:
- RandomAgent — случайное действие на каждом шаге.
- FixedActionAgent — фиксированное действие на каждом шаге.
- FixedSpreadAgent — маркетмейкер с фиксированным спредом (симметрично вокруг mid).
- HumanAgent — интерактивное управление человеком.
- AvellanedaStoikovAgent — оптимальный агент для Avellaneda and Stoikov (2008).
- CarteaJaimungalAgent — оптимальный для Cartea et al. (2015, §10.2).
Они полезны для изучения моделей и сред. Два оптимальных агента — эталон для RL; в §4 обучают агента в постановке Cartea–Jaimungal и сравнивают с оптимумом.
4. Простой пример обучения
Как демонстрация обучения в mbt_gym авторы применили PPO (реализация Stable Baselines 3; Schulman et al., 2017) к задаче маркетмейкинга из Cartea et al. (2015, §10.2). Это удобный тест-бед: существует явное оптимальное решение.
На Рис. 2 оригинала — эволюция средних вознаграждений за эпизод во времени при разной степени векторизации. На Рис. 3 — сравнение выученной политики с оптимальной из Cartea et al. (2015, §10.2).
Если параллелизация слишком мала ($n=10$ траекторий), обучение нестабильно. Если слишком велика ($n=10\,000$), wall-clock время до сходимости растёт. Между $n=100$ и $n=1000$ разница невелика, но $n=1000$ чуть лучше: ниже дисперсия и выше сходимость средних rewards.
На Рис. 3 видно, что агент осваивает политику достаточно хорошо: при отрицательном инвентаре он уменьшает bid-depth и увеличивает ask-depth (и наоборот), индуцируя mean-reversion инвентаря около нуля.
Помимо PPO, в репозитории есть пример решения той же задачи vanilla policy gradient — более простой алгоритм, не из SB3, реализованный авторами. Для ускорения обучения начальный инвентарь может случайно принимать целые значения из интервала, расширяя покрытие состояний.
Интерпретация эксперимента
Эксперимент подчёркивает центральный тезис статьи: для model-based LOB-задач критична не только «правильная» модель, но и инженерия среды. Без векторизации sample inefficiency RL делает почти оптимальное обучение практически недостижимым даже на классической одномерной постановке Cartea–Jaimungal. С векторизацией PPO из SB3 быстро приближается к аналитическому оптимуму — и тем самым валидирует и среды, и связку с индустриальным RL-стеком.
Сравнение с baseline CarteaJaimungalAgent даёт количественный критерий успеха: не только рост rewards, но и визуальная/численная близость политик по глубине котирования как функции инвентаря и времени. Это редкое преимущество model-based постановки относительно market replay или чисто агентных симуляторов, где «истинный» оптимум обычно неизвестен.
Детали постановки Cartea–Jaimungal (§10.2)
В канонической постановке Cartea et al. (2015, §10.2) маркетмейкер контролирует глубины $\delta^{\pm}$ лимитных заявок; mid-цена — броуновское движение; приходы — пуассоновские; fill — экспоненциальный. Критерий — running inventory penalty вида (9): агент зарабатывает на спреде, но штрафуется за квадрат инвентаря на всём горизонте и на терминале. Оптимальная политика известна в полуявном виде через решение системы ODE/HJB и служит «ground truth» для RL.
В эксперименте PPO политика параметризуется нейросетью (стандартный actor–critic SB3). Векторизация означает, что на каждом градиентном шаге одновременно разворачивается $n$ независимых копий среды с общими параметрами политики — фактически batch Monte Carlo оценок преимуществ с низкой дисперсией за счёт объёма, а не за счёт сложных baseline’ов.
Качественный результат обучения согласуется с теорией инвентарного управления: при $Q<0$ (короткая позиция) агент делает bid более агрессивным (меньше $\delta^{-}$), а ask — более пассивным (больше $\delta^{+}$), ускоряя возврат к $Q\approx 0$; при $Q>0$ — наоборот. Терминальный штраф $a Q_T^2$ дополнительно «притягивает» инвентарь к нулю к концу горизонта $T$.
Связь с sample inefficiency
Даже в низкоразмерной задаче (состояние порядка нескольких скаляров) reward-шум от пуассоновских приходов и бернуллиевских fill’ов огромен. Без $n\sim 10^2$–$10^3$ параллельных траекторий оценка градиента политики нестабильна. Векторизация на NumPy даёт тот же эффект, что и тысячи процессов, но без IPC-накладных расходов multiprocessing — отсюда ускорение на порядки (Рис. 1 оригинала). Это наблюдение переносимо на другие model-based LOB-задачи в модуле: прежде чем менять алгоритм (SAC, TD3, …), стоит увеличить num_trajectories.
5. Дорожная карта дальнейшего развития
Расширения среды группируются в три категории: (i) новые предположения о динамике стохастических процессов; (ii) литература по оптимальному исполнению через торговые скорости; (iii) работа mbt_gym с другими RL-библиотеками.
(i) Моделирование
Среда уже готова к ряду расширений. Можно исследовать, как меняются оптимальные стратегии, если fill-модель зависит от приходов, действий и самих исполнений. Например, в экспоненциальной модели $\mathbb{P}[\mathrm{Fill}]=e^{-\kappa\,\delta}$ параметр $\kappa$ может быть стохастическим процессом, на который влияют arrivals, actions и fills.
Можно добавить тип действий touch-and-market: контроль выставления на лучших котировках и отправки рыночной заявки на единицу актива.
Более сложные расширения: (a) гранулярные приходы через многомерные процессы Хокса (Abergel et al., 2020, §5); (b) латентность (Gao and Wang, 2020; Cartea and Sánchez-Betancourt, 2021). В последней работе время (в часах агента) между отправкой заявки на биржу и исполнением экспоненциально распределено (случайная латентность) или фиксировано (детерминированная). Оба варианта реализуемы через обновление mid-цены совместно с классом LatencyProcess (наследник StochasticProcess): mid обновляется от $t$ до $t+\ell$, сделка совершается в $t+\ell$, затем mid идёт от $t+\ell$ до $t+\Delta$, где $\Delta$ — шаг времени; предполагается $\mathbb{P}[\ell\in(0,\Delta]]=1$. Так латентность учитывается эндогенно, а не как искусственная стоимость.
(ii) Торговые скорости и impact
Планируется тип действий trading_speed: контроль — скорость покупки/продажи. Аналогично fill-экспоненте нужен класс price impact, открывающий изучение оптимальных стратегий при разных функциях/процессах импакта. Дальше — гибриды speed-and-limit и speed-and-touch: агент торгует с выбранной скоростью и одновременно выставляет ликвидность в надежде на fill по лучшей цене, чем агрессивный захват (Cartea and Jaimungal, 2015).
(iii) Экосистема RL
Желательна интеграция с RLlib и RLax как альтернативами Stable Baselines. Естественное расширение — от single-agent RL к multi-agent RL, например для обучения агентов, робастных к параметрам модели (Spooner and Savani, 2020).
6. Заключение
Представлен mbt_gym — библиотека сред для применения RL к model-based задачам торговли в LOB — вместе с дорожной картой развития. Авторы приветствуют вклад сообщества. Репозиторий: JJJerome/mbt_gym; препринт: arXiv:2209.07823.
Практический вывод для исследователя: если нужна контролируемая среда с известными оптимумами (Avellaneda–Stoikov, Cartea–Jaimungal) и возможностью собирать гибриды моделей mid-цены, приходов и fill, mbt_gym закрывает разрыв между аналитическими постановками матфинансов и современным RL-стеком без сборки симулятора с нуля. Это не замена реальному стакану или market replay для продакшена, но сильный research harness для алгоритмов и гипотез о динамике.
Практические рекомендации по использованию репозитория
Типичный workflow:
- собрать среду из компонентов (arrival + midprice + fill + reward + action_type), либо взять готовый пресет модели из Таблиц 1–2;
- прогнать baseline (
CarteaJaimungalAgent/AvellanedaStoikovAgent/FixedSpreadAgent) и оценить распределение терминального PnL и траекторий $Q_t$; - обучить PPO (или другой алгоритм SB3) с
num_trajectoriesпорядка $10^2$–$10^3$ и сравнить политику с оптимумом по сетке $(t,Q)$; - при исследовании новой гипотезы — заменить один компонент (например, пуассон → Хокс или ExponentialFill → PowerFill) и повторить обучение тем же алгоритмом, пользуясь model-agnostic природой RL.
Имена классов в ранних листингах статьи иногда отражают рабочее название проекта (DRL4AMM); в актуальном репозитории пакет называется mbt_gym — при воспроизведении ориентируйтесь на GitHub.
Ограничения текущего релиза (на момент статьи)
- Фокус на маркетмейкинге; оптимальное исполнение через trading speed ещё не в полном объёме.
- Латентность, очереди на уровнях стакана и полный multi-level LOB не моделируются — это reduced-form mid+arrivals+fill, а не событийный стакан Cont–Stoikov–Talreja.
- Одноагентная постановка; конкуренция маркетмейкеров — в roadmap (MARL).
- Fill-модели по умолчанию стационарны по $\kappa$; стохастический $\kappa$ заявлен как готовое направление расширения API процессов.
Литература (выборочно)
- Abergel, F., Huré, C., Pham, H. (2020). Algorithmic trading in a microstructural limit order book model. Quantitative Finance 20(8), 1263–1283.
- Almgren, R. (2012). Optimal trading with stochastic liquidity and volatility. SIAM Journal on Financial Mathematics 3(1), 163–181.
- Amrouni, S., et al. (2021). ABIDES-Gym: Gym Environments for Multi-Agent Discrete Event Simulation and Application to Financial Markets. arXiv:2110.14771.
- Baldacci, B., Bergault, P., Guéant, O. (2021). Algorithmic market making for options. Quantitative Finance 21(1), 85–97.
- Barzykin, A., Bergault, P., Guéant, O. (2022). Dealing with multi-currency inventory risk in FX cash markets. arXiv:2207.04100.
- Bertsimas, D., Lo, A. W. (1998). Optimal control of execution costs. Journal of Financial Markets 1(1), 1–50.
- Cartea, Á., Jaimungal, S. (2015). Optimal execution with limit and market orders. Quantitative Finance.
- Cartea, Á., Jaimungal, S. (2016). Incorporating order-flow into optimal execution. Mathematics and Financial Economics.
- Cartea, Á., Donnelly, R., Jaimungal, S. (2018). Enhancing trading strategies with order book signals. Applied Mathematical Finance.
- Cartea, Á., Sánchez-Betancourt, L. (2021). The shadow price of latency: Improving intraday fill ratios in foreign exchange markets. SIAM Journal on Financial Mathematics.
- Chan, N. T., Shelton, C. (2001). An electronic market-maker. MIT AI Lab Technical Report.
- Cont, R., Stoikov, S., Talreja, R. (2010). A stochastic model for order book dynamics. Operations Research 58(3), 549–563.
- Gašperov, B., Kostanjčar, Z. (2021). Market making with signals through deep reinforcement learning. IEEE Access.
- Gatheral, J., Schied, A., Slynko, A. (2012). Transient linear price impact and Fredholm integral equations. Mathematical Finance.
- Guéant, O. (2016). The Financial Mathematics of Market Liquidity. Chapman and Hall/CRC.
- Guilbaud, F., Pham, H. (2013). Optimal high-frequency trading with limit and market orders. Quantitative Finance.
- Ho, T., Stoll, H. R. (1981). Optimal dealer pricing under transactions and return uncertainty. Journal of Financial Economics 9(1), 47–73.
- Karpe, M., et al. (2020). Multi-agent reinforcement learning in a realistic limit order book market simulation. ICAIF.
- Lim, Y.-S., Gorse, D. (2018). Reinforcement learning for high-frequency market making. ESANN.
- Nevmyvaka, Y., Feng, Y., Kearns, M. (2006). Reinforcement learning for optimized trade execution. ICML.
- Spooner, T., et al. (2018). Market making via reinforcement learning. AAMAS.
- Almgren, R., Chriss, N. (2001). Optimal execution of portfolio transactions. Journal of Risk 3, 5–40.
- Avellaneda, M., Stoikov, S. (2008). High-frequency trading in a limit order book. Quantitative Finance 8(3), 217–224.
- Balch, T. H., et al. (2019). How to Evaluate Trading Strategies: Single Agent Market Replay or Multiple Agent Interactive Simulation? arXiv:1906.12010.
- Cartea, Á., Jaimungal, S., Penalva, J. (2015). Algorithmic and High-Frequency Trading. Cambridge University Press.
- Cartea, Á., Jaimungal, S., Ricci, J. (2014). Buy low, sell high: A high frequency trading perspective. SIAM Journal on Financial Mathematics.
- Guéant, O., Lehalle, C.-A., Fernandez-Tapia, J. (2013). Dealing with the inventory risk: a solution to the market making problem. Mathematics and Financial Economics.
- Gould, M. D., et al. (2013). Limit order books. Quantitative Finance 13(11), 1709–1742.
- Jerome, J., Sánchez-Betancourt, L., Savani, R., Herdegen, M. (2022). Model-based gym environments for limit order book trading. arXiv:2209.07823. Код: github.com/JJJerome/mbt_gym.
- Schulman, J., et al. (2017). Proximal Policy Optimization Algorithms. arXiv:1707.06347.
- Spooner, T., Savani, R. (2020). Robust market making via adversarial reinforcement learning. IJCAI.
- Van Der Walt, S., Colbert, S. C., Varoquaux, G. (2011). The NumPy array: a structure for efficient numerical computation. Computing in Science & Engineering.
Полный список ссылок — в оригинальной публикации на arXiv.