Model-based gym environments for limit order book trading

8/10

Джозеф Джером, Леандро Санчес-Бетанкурт, Рахул Савани, Мартин Хердеген · 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) и численно решают его схемами Эйлера или конечными разностями. Однако:

  1. Численный HJB требует схем, заточенных под конкретные стохастические процессы модели. Желательны более модельно-агностичные подходы.
  2. HJB особенно сильно страдает от проклятия размерности, что сужает класс решаемых моделей.
  3. При работе с HJB часто ищут полуявные решения и поэтому ограничиваются «хорошими» функциями, что сужает спектр изучаемых торговых задач.

Обучение с подкреплением решает задачи управления методом проб и ошибок. После революции глубокого обучения RL дал ряд ярких успехов. Применение RL к model-based LOB-задачам важно и перспективно:

Model-free RL в принципе позволяет решать модели с предположениями, плохо совместимыми с HJB, применять один метод обучения ко многим моделям и работать в более высоких размерностях. Авторы представляют открытый бенчмарк-модуль с рядом LOB-моделей и торговых задач из литературы матфинансов вместе с RL-решениями. Цель — показать потенциал RL и упростить дальнейшие исследования.

Известная слабость RL — низкая sample efficiency. К счастью, model-based торговые задачи допускают крайне эффективную векторизацию сред; авторы используют это и показывают, что параллелизация критична для почти оптимальных решений на бенчмарках.

Основные вклады.

Модуль: 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-среде:

  1. Market replay — воспроизведение исторических данных в симуляторе, агент взаимодействует с ними.
  2. Model-based — категория данной статьи.
  3. Агентные симуляторы — 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-массивом. Базовые индексы:

Конструктор принимает горизонт terminal_time, число шагов n_steps (шаг $\Delta t = T/n$), модели mid-цены / приходов / fill, тип действий (limit, touch, limit_and_market), начальные кэш и инвентарь, ограничения и число траекторий num_trajectories для векторизации.

Функция _update_state специфична для торговли, но едина для многих стандартных LOB-моделей, потому что у них общий порядок зависимостей стохастических процессов:

  1. процесс приходов обновляется первым;
  2. он влияет на mid-цену;
  3. затем обновляется модель 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}}$ среда:

  1. семплирует индикаторы приходов рыночных заявок на bid/ask из ArrivalModel (пуассон или Хокс);
  2. по типу действия вычисляет глубины лимиток или факт выставления на touch;
  3. семплирует исполнения через FillProbabilityModel (независимо по сторонам, условно на глубинах);
  4. обновляет кэш и инвентарь агента (и опционально рыночные заявки агента);
  5. прогоняет update у процессов приходов, mid-цены и fill — в фиксированном порядке;
  6. записывает новые состояния процессов в вектор наблюдения и начисляет 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}$ — соответствующие считающие процессы. Реализованы чуть более общие стохастические интенсивности:

\[ \mathrm{d}\lambda^{\pm}_{t}=\kappa\,\bigl(\bar{\lambda}-\lambda^{\pm}_{t}\bigr)\,\mathrm{d}t+\gamma\,\mathrm{d}M^{\pm}_{t}, \tag{1} \]

где $\kappa>0$ — скорость возврата к среднему (для стационарности Хокса $\kappa$ должно быть достаточно большим), $\bar{\lambda}>0$ — базовая интенсивность, $\gamma$ — размер скачка.

2.2. Процессы mid-цены

Ниже $(W_{t})_{t\ge 0}$ — стандартное броуновское движение. Реализованные mid-price модели делятся на две группы: (i) броуновские mid-цены и (ii) динамика со mean-reverting дрифтом.

Броуновское движение

BrownianMotionMidpriceModel — арифметическое броуновское движение:

\[ S_{t}=S_{0}+\mu\,t+\sigma\,W_{t}, \tag{2} \]

где $\mu\in\mathbb{R}$ — дрифт, $\sigma\in\mathbb{R}^{+}$ — волатильность.

GeometricBrownianMotionMidpriceModel — геометрическое броуновское движение:

\[ \mathrm{d}S_{t}=\mu\,S_{t}\,\mathrm{d}t+\sigma\,S_{t}\,\mathrm{d}W_{t}. \tag{3} \]

BrownianMotionJumpMidpriceModel (Guéant et al., 2013, §5.2) включает импакт исполненных заявок:

\[ S_{t}=S_{0}+\sigma\,W_{t}-\xi^{-}\,M^{-}_{t}+\xi^{+}\,M^{+}_{t}, \tag{4} \]

где $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):

\[ \mathrm{d}S_{t}=\alpha_{t}\,\mathrm{d}t+\sigma^{S}\,\mathrm{d}W^{S}_{t}, \tag{5} \]

где $\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):

\[ \mathrm{d}\alpha_{t}=\kappa^{\alpha}(\bar{\alpha}-\alpha_{t})\,\mathrm{d}t+\sigma^{\alpha}\,\mathrm{d}W^{\alpha}_{t}-\xi^{-}\,M^{-}_{t}+\xi^{+}\,M^{+}_{t}. \tag{7} \]

2.3. Модели вероятности исполнения (fill probability)

Большинство моделей литературы используют ExponentialFillFunction: вероятность исполнения заявки, выставленной на глубине $\delta^{\pm}$,

\[ \mathbb{P}[\textrm{fill}\mid\delta^{\pm}]=e^{-\kappa\,\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$:

\[ \frac{1}{1+\bigl(\kappa\,\delta^{\pm}\bigr)^{\alpha}}. \tag{8} \]

У всех 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$. Вознаграждение — дискретизация по времени функционала

\[ Y_{T}-Y_{0}-a\,Q_{T}^{2}-\phi\int_{0}^{T}Q_{t}^{2}\,\mathrm{d}t. \tag{9} \]

ExponentialUtility принимает risk_aversion $\gamma>0$ и вычисляет $\exp\bigl(-\gamma(Y_{T}-Y_{0})\bigr)$.

2.6. Примеры поддерживаемых моделей

Базовый торговый класс расширяется до стандартных моделей литературы (Таблица 1) и до гибридов, получаемых комбинацией компонентов (Таблица 2).

Таблица 1. Примеры стандартных моделей из литературы в mbt_gym.
НазваниеПриходыMid-ценаДействияВознаграждение
Avellaneda–StoikovPoissonArrivalModelBrownianMotionMidpriceModellimitExponentialUtility
MM с лимитками (Cartea et al., §10.2)PoissonArrivalModelBrownianMotionMidpriceModellimitRunningInventoryPenalty
MM at the touch (Cartea et al., §10.2.2)PoissonArrivalModelBrownianMotionMidpriceModeltouchRunningInventoryPenalty
Cartea–Jaimungal–Ricci (CJR)HawkesArrivalProcessOuJumpDriftMidpriceModellimitRunningInventoryPenalty
Guéant–Lehalle–Fernandez-Tapia (§5.2)PoissonArrivalModelBrownianMotionJumpMidpriceModellimitExponentialUtility
Опт. исполнение limit+market (Cartea et al., §8.4)PoissonArrivalModelBrownianMotionMidpriceModellimit_and_marketRunningInventoryPenalty
Таблица 2. Примеры гибридных моделей, доступных сразу за счёт комбинации компонентов.
НазваниеПриходыMid-ценаДействияВознаграждение
A–S с потоками ХоксаHawkesArrivalProcessBrownianMotionMidpriceModellimitExponentialUtility
CJR-14 с pure-jump ценойHawkesArrivalProcessOuJumpDriftMidpriceModeltouchRunningInventoryPenalty
CJR-14 с экспоненциальной полезностьюHawkesArrivalProcessOuJumpDriftMidpriceModellimitExponentialUtility

Именно эта «лего-сборка» — сильная сторона модуля: исследователь может быстро поставить эксперимент на ранее не рассмотренной комбинации динамики и критерия.

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 это было бы запретительно медленно.

Рисунок 1
Рис. 1. Ускорение векторизации через NumPy vs concurrent.futures.

3. Базовые агенты

Реализованы baseline-агенты:

Они полезны для изучения моделей и сред. Два оптимальных агента — эталон для 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).

Рисунок 3
Рис. 3. Обученный PPO-агент против Cartea–Jaimungal.
Рисунок 2
Рис. 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:

  1. собрать среду из компонентов (arrival + midprice + fill + reward + action_type), либо взять готовый пресет модели из Таблиц 1–2;
  2. прогнать baseline (CarteaJaimungalAgent / AvellanedaStoikovAgent / FixedSpreadAgent) и оценить распределение терминального PnL и траекторий $Q_t$;
  3. обучить PPO (или другой алгоритм SB3) с num_trajectories порядка $10^2$–$10^3$ и сравнить политику с оптимумом по сетке $(t,Q)$;
  4. при исследовании новой гипотезы — заменить один компонент (например, пуассон → Хокс или ExponentialFill → PowerFill) и повторить обучение тем же алгоритмом, пользуясь model-agnostic природой RL.

Имена классов в ранних листингах статьи иногда отражают рабочее название проекта (DRL4AMM); в актуальном репозитории пакет называется mbt_gym — при воспроизведении ориентируйтесь на GitHub.

Ограничения текущего релиза (на момент статьи)

Литература (выборочно)

Полный список ссылок — в оригинальной публикации на arXiv.