Согласованное путешествие во времени для реалистичного взаимодействия с историческими данными: обучение с подкреплением для маркетмейкинга
Венсан Рагель, Дамьен Шалле · Université Paris-Saclay, CentraleSupélec, Laboratoire de Mathématiques et Informatique pour la Complexité et les Systèmes, 91192 Gif-sur-Yvette, France · v2, 29 января 2025
Оригинал: Ragel, V. and Challet, D. «Consistent time travel for realistic interactions with historical data: reinforcement learning for market making», 2024–2025 — arxiv.org/abs/2408.02322 (PDF).
Рисунки воспроизведены из оригинальной публикации. Все права на оригинальный текст принадлежат авторам; перевод выполнен в ознакомительных целях с указанием источника.
Аннотация
Обучение с подкреплением работает лучше всего, когда влияние действий агента на его среду можно идеально симулировать или полностью оценить по имеющимся данным. Однако некоторые системы одновременно трудно симулировать и они очень чувствительны к малым возмущениям. Дополнительная трудность возникает, когда RL-агент обучается офлайн для участия в мультиагентной системе только на анонимных данных, из-за чего невозможно восстановить состояние каждого агента и, следовательно, использовать данные напрямую. Типичный пример — конкурентные системы без данных с разрешением по агентам, такие как финансовые рынки. Мы вводим согласованное путешествие во времени по данным (consistent data time travel) для офлайнового RL как средство от этих проблем: вместо последовательного использования исторических данных, утверждаем мы, нужно совершать путешествия во времени внутри истории, то есть подстраивать временной индекс так, чтобы и прошлое состояние, и влияние действия RL-агента на систему совпадали с реальными данными. Это одновременно избавляет от необходимости прибегать к несовершенным моделям и согласованно учитывает как немедленную, так и долгосрочную реакцию системы при использовании анонимных исторических данных. Мы применяем эту идею к маркетмейкингу в лимитных стаканах — задаче, печально известной своей сложностью для RL; оказывается, что выигрыш агента существенно выше при путешествии во времени по данным, чем при наивной последовательной подаче данных, — что позволяет предположить, что сложность этой задачи для RL могла быть переоценена.
1. Введение
Обучение агента методами обучения с подкреплением (RL) требует достоверного описания взаимодействия агента с его средой. Это позволяет учитывать долго- и краткосрочное влияние действий агента и, следовательно, вычислять реалистичные вознаграждения. Одни системы поддаются RL лучше других: видеоигры и, шире, искусственные миры предоставляют идеальный симулятор среды (Mnih et al., 2015; Schrittwieser et al., 2020). Большинство симуляторов мира учитывают влияние агента несовершенно, что может быть не так важно, если влияние агента, скорее всего, мало и краткосрочно. Исторические данные дают ещё один способ офлайнового обучения (обзор см. в Levine et al. (2020)).
RL наименее эффективен в системах, очень чувствительных к каждому отдельному событию, при наличии лишь частичной информации: такие системы трудно симулировать, а общедоступные данные неполны. Иными словами, обучение RL может оказаться настолько несовершенным, что агент выучит ошибочную мудрость из неверных вознаграждений или будет получать систематически смещённые вознаграждения, что ведёт к чрезмерно оптимистичным или пессимистичным результатам.
Здесь мы берёмся за офлайновое обучение RL-агента только на анонимных данных для конкурентных, асинхронных, гиперреактивных мультиагентных систем с долгой памятью, латентностью действий и отсутствием хорошей модели. Конкретно нас интересует высокочастотная торговля, где агенты посылают заявки или обновляют их очень часто, но наш подход обобщается на другие подобные мультиагентные системы.
Высокочастотные трейдеры обмениваются активами через так называемые рынки, управляемые заявками (order-driven markets), где движок сведения заявок агрегирует последовательность приказов купить или продать данный актив по ценам, выбранным трейдерами. Заявки на покупку и продажу, которые могут быть сведены, порождают сделки, тогда как заявки на продажу, чья цена выше цены заявок на покупку, хранятся в реестре, называемом лимитным стаканом (limit order book, LOB), пока не будут сведены или отменены владельцем. Поток заявок обрабатывается асинхронно: каждое новое событие порождает либо новую заявку в стакане, либо новую сделку, либо отмену.
Подвид высокочастотных трейдеров — маркетмейкеры, которые выставляют заявки на покупку и продажу одновременно. Они зарабатывают, продавая дороже, чем покупают; поскольку у них нет гарантии купить и продать одно и то же количество примерно в одни и те же моменты, они также должны научиться подстраивать свои котировки так, чтобы контролировать инвентарь и избегать ситуаций, когда цены движутся неблагоприятно относительно их позиции. Из-за того, что трейдеры, а значит и маркетмейкеры, конкурируют друг с другом, и из-за того, что среда очень чувствительна к каждому событию, успешно обучить и внедрить RL-агента трудно.
Поясним последствия специфических трудностей, с которыми мы здесь сталкиваемся.
- Конкурентные асинхронные мультиагентные системы. Обучение в конкурентных системах может вести к нестабильной динамике, когда обучение идёт слишком быстро относительно количества доступной информации, — как в многочисленных агентных моделях, которые претерпевают управляемый отношением сигнал/шум переход между стабильной и нестабильной динамикой (см., например, Chiarella (1992); Marsili et al. (2000)). К нестабильному поведению относится стадность (herding), когда конечная доля популяции в итоге раз за разом совершает одно и то же действие, что приводит к большим флуктуациям. Асинхронность поощряет подражание и, следовательно, стадность (Mavrodiev et al., 2013).
- Латентность и эффективные события. Латентность создаёт для RL дополнительную головную боль: поскольку между сообщением состояния среды и реализацией действия агента есть задержка, связь между состоянием, действием и вознаграждением становится куда более рыхлой. Даже если данные имеют наносекундное временное разрешение, на практике маркетмейкеры несут значительные задержки при получении данных, вычислении своих действий и передаче их на рынок. Латентность важна для того типа агентов, которых мы хотим обучать: маркетмейкеры стараются минимизировать её, арендуя стойки как можно ближе к движкам сведения заявок бирж и покупая доступ к самым быстрым сетям между двумя площадками.
Кроме того, выбор маркетмейкера сводится по существу к тому, куда ставить лимитные заявки относительно референсных цен. Если последние меняются, то даже когда агент сохраняет тот же выбор (то есть действие с его точки зрения), ему приходится корректировать цену своих заявок, то есть, возможно, отменять их или подавать новые. Это то, что мы называем эффективными событиями (с точки зрения системы). - Высокочувствительные системы с долгой памятью. Некоторые системы, и особенно мультиагентные конкурентные системы с адаптивными агентами, могут быть очень чувствительны к единственному событию — например, потому что информации осталось немного и каждое событие может раскрывать новую, — и помнить его долго.
На финансовых рынках каждая заявка оказывает долгосрочное влияние на будущие события (Lillo and Farmer, 2004; Eisler et al., 2012), что приводит к очень сложной, но крайне неслучайной динамике (см. недавние монографии Abergel et al. (2016); Bouchaud et al. (2018); Lehalle and Laruelle (2018)). - Анонимные данные в мультиагентных системах. Когда с окружением взаимодействует единственный агент, RL обычно формализуется через состояние системы (среды и агента) $s_t$ в момент $t$, (ре)акцию агента $a_t$ и его вознаграждение $R_t$. Если данные (или модель) достаточно достоверны, то обучение ассоциациям между состояниями, действиями и будущими вознаграждениями — это ровно то, для чего RL и предназначен.
Рассмотрим теперь случай мультиагентных систем. Если данные разрешены по агентам, то есть известно, какой агент совершил какое действие, состояние каждого агента легко отслеживать, а значит, выплату по каждому действию можно вывести хотя бы частично. Короче говоря, офлайновое обучение мало отличается от одноагентного случая. Когда мультиагентные данные анонимны, последствия куда серьёзнее: не только неизвестно, сколько всего агентов, но нельзя восстановить ни их состояние, ни их вознаграждение, что исключает применение обратного RL (обзор см. в Arora and Doshi (2021)).
На финансовых рынках, управляемых заявками, лучшие общедоступные данные содержат лишь идентификационные номера заявок, но не их владельцев, и потому анонимны. Академические исследователи лишь изредка получают доступ к данным с разрешением по трейдерам, охватывающим все сделки на данной бирже (см., впрочем, Barber et al. (2007); Lillo et al. (2015); Sato and Kanazawa (2023)). - Трудносимулируемые системы. Обычный способ обойти анонимность данных — использовать симуляторы. К сожалению — и неудивительно — асинхронные, конкурентные, очень реактивные мультиагентные системы с долгой памятью и латентностью трудно симулировать. В этом случае может не существовать модели настолько хорошей, чтобы гарантировать, что RL-агент не научится попросту эксплуатировать идиосинкразическую слабость модели и не покажет плохой результат при боевом развёртывании.
Тем не менее задействовать RL в финансовом контексте очень естественно: у участников рынка есть чётко определённая целевая функция, а средняя реакция стакана на отдельное событие имеет систематическую часть. Общий обзор применения RL в финансах см. в Hambly et al. (2023). Отметим, однако, что предыдущие попытки применить RL к агенту-маркетмейкеру либо использовали данные, пренебрегая посoбытийным влиянием действия RL-агента на будущий поток событий (см., например, Spooner et al. (2018)), либо использовали симуляторы стакана, пусть и изощрённые, которые лишь несовершенно имитируют реальные рынки (например, Frey et al. (2023); Kumar (2020)).
Здесь мы предлагаем универсальный способ согласованного использования данных для гиперчувствительных, трудносимулируемых мультиагентных систем с анонимными данными, взяв в качестве примера рынки, управляемые заявками, где агент учится быть успешным маркетмейкером. По существу, мы отстаиваем согласованное путешествие во времени по данным: временной индекс после того, как RL-агент совершает действие, выбирается так, чтобы эффект действия RL-агента на систему был согласован с историческими данными; это может потребовать прыжка в другой момент времени, где согласованы и состояние до активности агента, и результирующие эффективные события агентов.
2. Взаимодействие с анонимными мультиагентными асинхронными данными
Представим систему (например, лимитный стакан без трейдеров), состояние которой описывается набором переменных $X_t$, где дискретная переменная $t$ индексирует события. Для простоты предположим, что $X_t$ может изменяться только событием $\alpha_t \in \mathcal{A}$ — множеством возможных событий этой конкретной системы (например, поставить или отменить заявку).
Важно различать события (на уровне системы) и действия агентов, поскольку последние могут порождать несколько событий, а соответствие между теми и другими зависит от контекста, как станет ясно дальше. Динамику системы запишем как уравнение обновления $X_t$:
\[ X_{t+1} = F(X_t, \alpha_t). \]В мультиагентных системах с данными, разрешёнными по агентам, событие в момент $t$ может быть приписано агенту $i_t \in \{1, \cdots, N\}$. Представим, что мы хотим обучить RL-агента, который получает состояние $s_t$ и решает совершить действие $a_t^{RL}$, приводящее к эффективному событию $\alpha_t^{RL}$. До сих пор литература предлагала лишь две возможности:
- вставить событие RL-агента в историческую последовательность, то есть добавить $\alpha_t^{RL}$ непосредственно перед историческим событием $\alpha_t$;
- заменить историческое событие $\alpha_t$ действием агента $\alpha_t^{RL}$.
Первая возможность — простейшая: она предполагает, что вставка ещё одного события не меняет будущую последовательность заявок, то есть что влияние нового события фактически нулевое. Это хорошая схема для систем, слабо чувствительных к отдельному событию. Хотя это обычный подход в статьях о RL для маркетмейкинга (например, Spooner et al. (2018)), которым приходится предполагать пренебрежимо малый размер заявки, лимитные стаканы, как известно, очень чувствительны к каждому отдельному изменению и помнят его долго (см., например, Eisler et al. (2012)). Смещения, порождаемые этим предположением, безусловно существенны, но трудно поддаются количественной оценке.
Вторая возможность также предполагает, что система лишь слабо чувствительна к изменению отдельного события. Зато она даёт идеальную симуляцию реакции системы, если эффективное событие агента совпадает с историческим, то есть если $\alpha_t^{RL} = \alpha_t$. Наивное использование исторических данных, таким образом, рекомендуется только для слабо реактивных систем с короткой памятью. Когда хорошей модели нет, всё равно заманчиво использовать исторические данные, как-то учитывая влияние дополнительного RL-агента, но до сих пор не существовало хорошего способа хоть сколько-нибудь реалистично учесть посoбытийное влияние RL-агента на исторических данных.
Мы предлагаем третью возможность: путешествие во времени по данным. Его цель — максимизировать согласованность влияния действий нового RL-агента с тем, что происходило дальше в системе, то есть со следующими эффективными событиями при условии состояния (статического и динамического) системы. Для этого вместо последовательного использования истории временной индекс может при необходимости прыгать в другую точку времени, где совпадают и состояние системы, и эффективные события, порождённые действиями RL-агента: согласованность определяется на уровне системы, с которой взаимодействует агент. В контексте обучения торговле или маркетмейкингу это может звучать тревожно, поскольку в строгом смысле нарушает причинность. Однако при условии, что состояние рынка достаточно кодирует релевантную часть истории, это лучший способ использовать исторические данные, чем полностью пренебречь влиянием RL-агента на динамику системы. Короче: чтобы обрести локальную согласованность, приходится нарушить глобальную причинность.
Вернёмся к временной эволюции состояния: пусть состояние системы (стакана) есть $X_t$, а историческое эффективное событие было $\alpha_t$. RL-агент решает сыграть $a_t^{RL}$, что приводит к (эффективному) событию $\alpha_t^{RL}$. Следующее состояние системы в исторических данных равно $X_{t+1} = F(X_t, \alpha_t)$, а при действии RL-агента — $\tilde{X}_{t+1} = F(X_t, \alpha_t^{RL})$.
Нужно различать два случая:
- $\tilde{X}_{t+1} = X_{t+1}$: следующее состояние системы по историческим данным соответствует состоянию, порождённому действием RL-агента; использование исторических данных очевидно согласовано;
- $\tilde{X}_{t+1} \ne X_{t+1}$: между $\tilde{X}_{t+1}$ и $X_{t+1}$ — и, по продолжению, в более поздние моменты, то есть между $\tilde{X}_{t+\tau}$ и $X_{t+\tau}$ при $\tau \ge 1$ — может возникнуть большое расхождение.
Второй случай — источник всех проблем наивного использования исторических данных. Путешествие во времени по данным предлагает в этих случаях прыгнуть к другому временному индексу, более согласованному и с состоянием системы, и с влиянием RL-агента на неё. Иначе говоря, мы хотим найти такое $t'$, что
\[ X_{t'} = X_t \tag{1}\] \[ X_{t'+1} = \tilde{X}_{t+1}. \tag{2}\]Уравнения (1) и (2) задают критерий согласованности между состояниями при индексах $t'$ и $t'+1$ и состояниями, порождёнными RL-агентом в момент $t$. Соответственно, следует прыгнуть в момент $t'$ и продолжить обучение RL-агента с $t'+1$. Заметим, что согласованность означает, что иногда нужно прыгать в прошлое, если это разрешено. Если причинность в обучении RL-агента предельно важна и объём доступных данных очень велик, можно наложить условие $t' > t$. Попутно отметим, что мы не требуем $t, t' > 0$.
Есть два возможных осложнения:
- существует более одного временного индекса, согласованного с влиянием RL-агента. В этом случае можно выбирать равномерно из этого множества либо наложить дополнительные ограничения (по близости, причинные и т.д.);
- согласованного временного индекса нет — это норма, если состояние является непрерывной переменной (или вектором, включающим непрерывные переменные). Решение — определить расстояние между двумя состояниями и находить индексы, которые его минимизируют.
Наивное вычисление расстояний между всеми временными шагами слишком затратно при сколько-нибудь большом числе точек данных. Поэтому мы определяем дискретные состояния и вычисляем словари моментов времени, соответствующих каждому дискретному состоянию.
Фундаментальный вопрос — как путешествие во времени меняет природу динамики системы. В частности, многие результаты литературы по RL о сходимости агента к оптимальному поведению зависят от марковости состояния системы. Здесь уместны два замечания. Во-первых, если исходно система была марковской, прыжок во времени не делает её немарковской: поскольку мы прыгаем в другую точку исторических данных, то есть к событиям, которые действительно естественно произошли, природа динамики не меняется. Во-вторых, применение RL к финансовым рынкам — заведомо немарковским системам — нацелено не на выучивание оптимального поведения (например, политики), а на то, чтобы выучить достаточно для получения прибыльного агента.
3. Случай лимитных стаканов
На рынках, управляемых заявками, трейдеры посылают пожелания купить или продать по заранее заданным ценам. Например, заявка на покупку $i$ имеет цену $p_i$ и объём $v_i$; когда она отправляется на рынок, она либо находит уже существующую заявку на продажу с совместимой ценой (меньшей или равной $p_i$), либо сохраняется в так называемом лимитном стакане (LOB).
Введём полезные обозначения. При временном индексе $t$ лучшие заявки на покупку в стакане имеют цену $b_{1,t}$, лучшие заявки на продажу — цену $c_{1,t}$ (сокращённо $b_t$ и $c_t$), а вторые цены покупки (продажи) обозначаются $b_{2,t}$ ($c_{2,t}$). Кроме того, суммарный объём всех заявок по цене $b_{k,t}$ ($c_{k,t}$) равен $V_{k,t}^B$ ($V_{k,t}^S$).
Если типичный трейдер время от времени ставит заявку одного типа (покупка или продажа), то маркетмейкеры обычно постоянно выставляют и лимитную заявку на покупку, и лимитную заявку на продажу, тем самым обеспечивая полезность стакана и для покупателей, и для продавцов в любой момент — за счёт достаточного доступного объёма на обеих сторонах.
Весь вопрос для маркетмейкера — куда ставить свои заявки. Простейшая идея — ставить их по лучшим ценам. Если $b_t$ и $c_t$ постоянны, маркетмейкер зарабатывает спред $\sigma_t = c_t - b_t$ каждый раз, когда кто-то покупает одну акцию, а кто-то другой продаёт одну акцию. Накопленный объём продаж $V_{MM,t}^S$ и объём покупок $V_{MM,t}^B$ к моменту $t$ вряд ли будут равны, поэтому маркетмейкер накапливает чистый инвентарь $J_t = V_{MM,t}^B - V_{MM,t}^S$ купленных и проданных акций, что рискованно, если цены пойдут не в ту сторону.
Если она1 ставит заявки симметрично относительно средней цены $m_t = (b_t + c_t)/2$ и сделки на покупку и продажу приходят несмещённо, $J_t$ следует несмещённому случайному блужданию. Однако, выставляя лимитные заявки асимметрично — например, заявку на продажу по $c_t = c_{1,t}$, а заявку на покупку по второй лучшей цене $b_{2,t}$, — маркетмейкер может управлять соответствующими вероятностями исполнения своих заявок и тем самым косвенно (стохастически) контролировать эволюцию своего инвентаря. Это называется скьюингом котировок. На практике одна из заявок может быть поставлена значительно дальше второй лучшей цены, чтобы минимизировать риск роста инвентаря не в ту сторону. Когда скьюинг цен не справляется с ограничением абсолютной величины $J_t$ и инвентарь достигает заданного максимального значения, предполагается, что маркетмейкер ликвидирует весь свой инвентарь (см. литературу об оптимальном маркетмейкинге в стохастических ценовых моделях: Guéant (2017); Bergault et al. (2021); Barzykin et al. (2023)).
Мы предполагаем, что каждая заявка может быть поставлена либо по лучшей цене (обозначается 1), либо по второй лучшей (2), что даёт два симметричных действия размещения, два асимметричных и действие ликвидации ($\emptyset$): маркетмейкер здесь выбирает из пяти действий, $a_t \in A = \{1,2\} \times \{1,2\} \cup \{\emptyset,\emptyset\}$, где первая координата обозначает сторону покупки, вторая — сторону продажи, а $\times$ — внешнее произведение множеств.
Это действия RL-агента, которые не следует путать с эффективными событиями в системе, описывающими то, что реально происходит в стакане: событие в стакане, ограниченном первыми двумя тиками и спредом, можно описать как $\alpha \in \mathcal{A} = \{\delta_{k,\xi}\}_{k=0,1,2;\,\xi\in\{B,S\}}$, где $\delta$ — размер (со знаком) события, $k$ — индекс ценовой очереди (1 обозначает очередь лучшей цены на стороне $\xi$, 2 — вторую лучшую, 0 — спред). Заметим, что изъятие ликвидности может быть вызвано как сделкой, так и отменой. Суть в том, что одному событию в стакане соответствует одно эффективное событие.
Соответствие между действиями RL-агента и эффективными событиями не однозначно: действия RL-агента задают стратегию размещения заявок относительно текущих лучших цен. Как следствие, если действие агента меняется или меняется хотя бы одна текущая лучшая цена, RL-агенту может понадобиться обновить свои заявки в стакане, что выливается в серию отмен и размещений заявок, то есть в набор эффективных событий.
Ещё одно осложнение происходит из того, что трейдер не может быть столь же быстрым, как движок сведения заявок, и потому не может мгновенно реагировать на каждый тик $t \to t+1$. Поэтому нам нужно ввести индекс обновления RL-агента $u$ с отображением в индекс событий системы $t(u)$ для всех $u$; на практике $t(u+1)$ — наименьшее значение $t$, при котором $t(u+1) - t(u)$ превышает латентность агента. Представим, что действия RL-агента одинаковы для индексов обновления $u$ и $u+1$, например $a_u = a_{u+1} = \{1,1\}$. Сосредоточимся на стороне покупки:
- если лучшие цены вовсе не менялись между двумя обновлениями, то есть $b_{t'} = b_{t(u)}$ и $c_{t'} = c_{t(u)}$ для всех $t' \in \{t(u), \cdots, t(u+1)\}$, маркетмейкеру нечего делать;
- если $b_{t(u+1)} > b_{t(u)}$, маркетмейкер должен отменить свою заявку на покупку по цене $b_{t(u)}$ и добавить новую по цене $b_{t(u+1)}$, чтобы её заявка на покупку оставалась на лучшей цене покупки. Это порождает два эффективных события $+_{1,B}$ и $-_{2,B}$, если $b_{t(u)}$ равна второй лучшей цене в момент $t(u+1)$ (и только $+_{1,B}$ в противном случае, поскольку мы отслеживаем лишь две лучшие котировки на каждой стороне);
- если заявка на покупку маркетмейкера была полностью исполнена сделками между двумя обновлениями, ей нужно послать новую заявку на покупку по $b_{t(u+1)}$, что соответствует одному эффективному событию $+_{1,B}$.
Набор эффективных событий, таким образом, должен определяться в каждый момент $t(u)$ и может различаться для всех возможных действий и изменений стакана.
Есть несколько способов учесть латентность при обучении RL-агента. Простейший — предположить, что RL-агент может обновлять своё действие не чаще, чем раз в $l$ секунд ($l$ может быть много меньше 1). Это реалистично, если биржа рассылает информацию с латентностью, много большей суммарной латентности агента (связь от биржи, обработка, связь до биржи), или в пределе времени обработки, много большего обеих коммуникационных задержек. Более реалистичная постановка — рассматривать входящую латентность $l_{in}$, время обработки $l_{proc}$ и исходящую латентность $l_{out}$: RL-агент активен каждые $l_{proc}$ секунд, получает состояние стакана с задержкой $l_{in}$, а его эффективные события вступают в силу с дополнительной задержкой $l_{out}$. Далее мы используем первую постановку.
3.1. Состояния рынка и агента
При активации в момент $t(u)$ RL-агент получает состояние $s_u$, описывающее и его внутреннее состояние $I_u$, и состояние стакана $X_{t(u)}$, то есть $s_u = (I_u, X_{t(u)})$.
Состояние стакана $X_t$ должно описывать величины, релевантные для предсказания следующего состояния $X_{t+1}$. Это очень сильное требование, поскольку влияние каждого отдельного события длится долго. Вместо этого для простоты мы приблизим $X_t$ гораздо более простым описанием, кодирующим самые существенные черты стакана. Больше всего маркетмейкеру важна сторона (покупка/продажа), на которой произойдёт следующее исполнение, поскольку эта информация тесно связана с тем, как ему следует скьюить котировки для подстройки вероятностей их исполнения. Известно, что в среднем она сильно зависит от дисбаланса суммарного размера заявок на лучших ценах
\[ I_t = \frac{V_{1,t}^{(B)} - V_{1,t}^{(S)}}{V_{1,t}^{(B)} + V_{1,t}^{(S)}}. \]Это настоятельно подсказывает, что знак $I_t$ (включая 0) — самый важный бит информации о стороне следующей сделки. Другая важная мгновенная величина в стакане — спред $\sigma_t = c_t - b_t$, который мы также учитываем. Существуют и другие величины, основанные на потоке заявок, то есть связанные с динамикой, — например, дисбаланс лимитных заявок (Cont et al., 2014), — важные для предсказания будущих событий. В этом исследовании мы их не включаем.
Состояние агента $I_t$ упрощено до знака его инвентаря, включая 0. Идея в том, что агент должен научиться скьюить свои котировки в зависимости от инвентаря.
3.2. Условия согласованности для путешествия во времени по данным
Два условия, заданные уравнениями (1) и (2), предполагают, что состояние системы $X_t$ можно описать точно. Здесь мы приблизим $X_t$ знаком дисбаланса котируемых объёмов $I_t$ и фактическим значением спреда $\sigma_t$, так что уравнение (1) превращается в
\[ X_t \simeq \mu_t = (I_t, \sigma_t) = (I_{t'}, \sigma_{t'}) = \mu_{t'} \simeq X_{t'}. \]Взятые вместе, оба условия согласованности состояний влекут, что наборы эффективных событий, порождённых RL-агентом, и событий в исторических данных совпадают или по меньшей мере совместимы. Это даёт критерий, по которому прыжок во времени необходим.
Обозначим набор событий, порождённых действием $a_t$ RL-агента, через $\mathcal{A}_t^{RL}$. Условие согласованности с историческими данными состоит в том, что мелкозернистая динамика стакана после $a_t^{RL}$ соответствует тому, что произошло бы на самом деле, — и это главная причина, по которой прыжок во времени по данным превосходит нынешние наивные методы. Найти эффективные события с точно такими же размерами $\delta$ маловероятно, поэтому мы учитываем только знаки эффективных событий. В некоторых случаях исторические данные полностью совместимы с действиями RL-агента. Однако большую часть времени приходится прыгать.
Заметим, что эффективные события могут встречаться в исторических данных в любом порядке; кроме того, они могут перемежаться эффективными событиями других трейдеров из-за асинхронной природы стаканов. Поэтому мы требуем, чтобы набор эффективных событий был найден, в любом порядке, в пределах $T_{next}$ временных индексов после $t'$; если это так, мы берём наименьшее число тиков, при котором исторические данные после $t'$ включают все эффективные события RL-агента.
Наконец, может случиться, что в тот же день нет $t'$ с теми же $\mu_t$ и $\{\alpha_{t,a_t}\}$. Чаще всего это происходит потому, что мы хотим прыгнуть в момент с точно тем же значением спреда. В таких случаях мы допускаем при необходимости некоторый люфт: $t'$ допустим, если
\[ |\sigma_t - \sigma_{t'}| < \Delta\sigma_{max}. \tag{3}\]На практике мы ищем совместимые моменты прыжка с наименьшей абсолютной разницей спредов, всё ещё удовлетворяющей условию (3). Мы берём $\Delta\sigma_{max} = 0{,}3$ цента.
Обычно кандидатов на момент прыжка больше одного. Можно реализовать различные ограничения на моменты прыжка. Например, можно разрешить прыгать только в будущее — в этом случае исторические данные быстро исчерпываются. Можно также разрешить прыжки только в ограниченном интервале вокруг текущего момента; риск — надолго застрять в периодическом состоянии. Мы выбрали прыжок в момент, выбираемый случайно из множества кандидатов после удаления моментов, слишком близких к текущему (здесь — 10 тиков). Если подходящего момента прыжка не находится, мы просто продолжаем и переходим к $t + |\{\alpha_{t,a_t}\}|$, то есть увеличиваем временной индекс на число эффективных событий.
3.3. Вычислительная скорость
Мы заранее вычисляем отдельные словари индексов для данного $I$ или $\mathcal{A}$. Множество кандидатов на прыжок для данной пары $(I, \mathcal{A})$ — это просто пересечение кандидатов из каждого словаря, к которому применяется условие на спред (3). Благодаря этому вычисление расстояний теряет сложность $O(T^2)$, где $T$ — число точек данных (здесь $T \sim 10^5$).
Появление события данного типа в данном интервале $[t, t + T_{next}]$ можно закодировать бинарным вектором (1, если встречается хотя бы одно, 0 иначе). Поэтому мы заранее вычисляем эти векторы для всех $t'$ в пределах $T_{next} = 20$ событий от $t$.
4. Методы
4.1. Данные
Исследование использует данные BEDOFIH — высококачественной базы данных для академических исследователей от Eurofidai. Она содержит всю информацию, необходимую для восстановления потиковой истории всех заявок, отправленных на несколько европейских бирж. Здесь мы сосредотачиваемся на Парижской фондовой бирже, конкретнее — на самом торгуемом активе, Total Energies. Мы выбираем четыре произвольных дня $D$ (с 2016-01-05 по 2016-01-08). Для каждого дня мы сохраняем полную информацию (заявка за заявкой) о двух лучших ценах на каждой стороне стакана, что даёт в среднем около 200 000 событий в день.
4.2. Постановка RL
RL-маркетмейкеры используют Q-обучение — безмодельный подход, достаточный для исследования влияния типов истории. В момент активации $t(u)$ агент получает состояние $s_u$ и решает, куда поставить свои лимитные заявки ($a_u^{RL}$). Для простоты мы ограничиваем выбор первыми двумя лучшими текущими лимитными ценами на каждой стороне, что даёт четыре действия, плюс выбор ликвидировать инвентарь.
Ключевой момент в том, что выплата определяется всеми событиями, происходящими на каждом тике между $t(u)$ и $t(u+1) - 1$. Поэтому мы должны накапливать потиковые вознаграждения между двумя последовательными активациями RL-агента. Вознаграждения следуют симметричной форме Spooner et al. (2018); конкретнее, если в момент $t$ маркетмейкер держит инвентарь $J_t$, он получает выплату
\[ R_t^J = J_t \times (m_t - m_{t-1}), \tag{4}\]где $m_t$ — средняя цена. Инвентарь меняется, когда заявки агента исполняются между двумя моментами активации, поэтому суммарная инвентарная выплата между двумя активациями равна
\[ \mathcal{R}_{u+1}^J = \sum_{t'=t(u)+1}^{t(u+1)} R_{t'}^J. \]Между двумя моментами активации $t(u)$ и $t(u+1)$ маркетмейкер не может обновлять цену своих заявок, которые поэтому могут быть частично или полностью исполнены — одной сделкой или многими. Для простоты обсуждения сосредоточимся на заявке на покупку маркетмейкера, поставленной по цене $b_u^{MM}$. Есть три события, вызывающие частичное или полное исполнение:
- в исторических данных в момент $t$ произошла сделка объёмом $V_t^{trans}$ по цене $b_u^{MM}$; обозначая оставшийся объём заявки маркетмейкера на покупку непосредственно перед сделкой через $v_{MM,t}^B$, а объём по этой цене в исторических данных через $v_t^B$, мы предполагаем, что сведённый объём заявки маркетмейкера пропорционален суммарному объёму на лучшей цене покупки: $v_{MM,t+1}^B - v_{MM,t}^B = v_{MM,t}^B v_t^B / (v_t^B + v_{MM,t})$. Иными словами, мы не2
- в момент $t$ произошла сделка по цене меньше $b_{MM,u}$ — полное исполнение;
- лучшая цена продажи больше или равна $b_{MM,u}$ — полное исполнение.
Каждое исполнение объёма $v_{MM}$ влечёт вознаграждение
\[ R_t^{B,exec} = v_{MM}(m_{t-1} - b_{MM,u}). \tag{5}\]Аналогично инвентарной выплате, суммарная транзакционная выплата между двумя активациями равна
\[ \mathcal{R}_{u+1}^{B,exec} = \sum_{t'=t(u)+1}^{t(u+1)} R_{t'}^{B,exec}. \]Когда временной индекс достигает $t(u+1)$, суммарное вознаграждение есть $\mathcal{R}_{u+1} = \mathcal{R}_{u+1}^J \mathcal{R}_{u+1}^{B,exec}$.3 RL-агент обучается $\epsilon$-жадным Q-обучением, где элемент матрицы $Q_{s_u,a_u}$ обновляется согласно Sutton and Barto (2018):
\[ Q_u(s_u, a_u) = Q(s_{u-1}, a_{u-1}) + \beta \left[ R_u + \gamma \max_{a'} Q_u(s_u, a') - Q_u(s_u, a_u) \right] \tag{6}\]после чего действие $a_{u+1}$ берётся согласно $\arg\max_{a'} Q(s_u, a')$; с вероятностью $\epsilon_t$ действие $a_t$ вместо этого заменяется случайным (исследование); изначально $\epsilon$ равно 0.2 и умножается на множитель 0.9999 при каждом обновлении. Учитывая, что обновлений около 20 000 в день, параметр исследования $\epsilon \simeq 0.05$ к концу периода обучения. Мы фиксируем $\beta = 0.001$ и $\gamma = 0.97$ (как в Spooner et al. (2018)). Маркетмейкер ставит заявки размером 100. Если часть его заявок исполнена между двумя активациями, при следующей активации он добавляет объём к своей заявке. Его максимальный инвентарь установлен в 1000 акций: как только $|J_{t(u)}| \ge 1000$, он ликвидирует весь инвентарь рыночной заявкой, что влечёт штраф в полспреда, умноженный на размер инвентаря $|J_{t(u)}|$. Заметим, что мы обучаем только одного агента за раз.
5. Результаты
Центральный вопрос — какую разницу даёт путешествие во времени по данным при обучении RL-агента на потиковых рыночных данных. Мы ожидаем, что RL-агент выучивает нечто разное при каждой из динамик (последовательные данные или путешествие во времени; в подписях и на графиках далее сокращены до «seq» и «jump» соответственно) и что это проявится в средней выплате на одно обновление. Трудно интуитивно предугадать, какая временная динамика даёт бóльшую выплату в реальной жизни или в тестовые периоды. Однако мы ожидаем, что агенты, обученные на одной временной динамике, будут хуже работать при тестировании на другой.
Для каждого типа временной динамики и каждого дня мы обучаем $N = 48$ RL-агентов с разными случайными начальными Q-матрицами, что даёт 392 агента для обучения.4 Мы используем $T_{train} = 15\,000$ обновлений агента $u$; мы пробовали несколько значений $T_{train}$ в диапазоне 10 000–22 500 для проверки на переобучение, но не нашли какой-либо специфической зависимости среднего тестового выигрыша от $T_{train}$. Возможно, это связано с тем, что агенты продолжают исследовать и учиться и во время тестирования.
Каждый агент тестируется, начиная с Q-матрицы, которую он имел в конце обучающего дня $d$, для каждого дня $d'$ из соответствующего тестового множества (либо $d = d'$, либо $d \ne d'$). Результативность агента $i$, обученного в день $d$ с временной динамикой $n$ и протестированного в день $d'$ с временной динамикой $n'$, определяется как средняя выплата на обновление к моменту $t$, от начала дня, и обозначается $G_{i,t}^{(d,n)\to(d',n')}$. Сначала мы проверяем выигрыш агентов в тот же день, что и обучающий ($d = d'$), то есть измеряем
\[ G_t^{(n)\to(n')} = \frac{1}{N} \frac{1}{|D|} \sum_{i=1}^{N} \sum_{d \in D} G_{i,t}^{(d,n)\to(d,n')}, \tag{7}\]затем вычисляем выигрыш с кросс-валидацией на днях, не использованных для обучения, то есть
\[ G_{cross,t}^{(n)\to(n')} = \frac{1}{N} \frac{1}{|D|(|D|-1)} \sum_{i=1}^{N} \sum_{d \in D} \sum_{d' \ne d \in D} G_{i,t}^{(d,n)\to(d',n')}. \tag{8}\]Мы тестируем каждого агента двумя способами: используя исторические данные последовательно ($n' = seq$) или с прыжками во времени ($n' = jump$). Так мы можем понять влияние временной динамики и на фазе обучения, и на фазе тестирования. Хотя постановка кросс-валидации не является строго причинной (поскольку допускается $d' < d$), наша цель ограничивается демонстрацией того, что путешествие во времени приводит к качественно иным результатам.
| jump → jump | seq → jump | seq → seq | jump → seq | |
|---|---|---|---|---|
| тест на обучающем дне ($d = d'$) | 18.6 (0.2) | 12.5 (0.2) | 7.7 (0.2) | 6.2 (0.2) |
| кросс-валидированный тест ($d \ne d'$) | 13.2 (0.1) | 11.7 (0.1) | 7.6 (0.1) | 6.1 (0.1) |
Два графика на рис. 1, обобщённые в таблице 1, иллюстрируют наш главный результат: они показывают $G_{t(u)}^{(n)\to(n')}$ как функцию числа обновлений агента; правый график показывает, что агенты, обученные и протестированные на одном и том же типе временной динамики, имеют больший выигрыш, чем протестированные на другой динамике. Это означает, что тип данных действительно важен и что агенты выучивают нечто иное, когда им подают разные типы временной динамики.
Рисунок недоступен для встраивания — смотреть в оригинале
Кроме того, агенты, обученные и протестированные на путешествии во времени по данным (jump), имеют больший средний выигрыш, чем агенты, обученные и протестированные на последовательных данных. Одна из интерпретаций: следование более согласованной исторической динамике даёт бóльшие выигрыши при обучении и тестировании RL-агентов. Иначе говоря, предположение о пренебрежимости собственного влияния на фактическую динамику ошибочно внушает, что использовать RL для маркетмейкинга труднее, чем это есть на самом деле.
Рисунок недоступен для встраивания — смотреть в оригинале
Кросс-валидированный средний выигрыш на обновление (рис. 2 и таблица 1) рассказывает ровно ту же историю, хотя и с иными средними значениями. Заметим, что выигрыши агентов, тестируемых на последовательных данных, мало меняются от того, тестируются ли они в тот же день, что и фаза обучения ($d = d'$), или нет ($d \ne d'$): это значит, что, хотя они достигают положительного выигрыша (по крайней мере на использованных данных и при всех гипотезах бэктеста, включая отсутствие приоритета в очереди), они не выучивают много специфичного для каждого дня. Напротив, тестирование агентов с прыжками во времени даёт заметно меньшие выигрыши, чем на обучающих данных, особенно для агентов, обученных с прыжками. Это согласуется с идеей, что согласованные исторические траектории, то есть путешествие во времени по данным, содержат больше информации.
Рисунок недоступен для встраивания — смотреть в оригинале
Наконец, мы вычисляем отношение сигнал/шум вознаграждения на обновление (рис. 3), которое механически больше при большем числе тестовых дней (правый график). Во-первых, видно, что путешествие во времени по данным даёт лучшее вознаграждение с поправкой на риск при однотипном обучении — и в конечном счёте также для агентов, обученных на последовательных данных. На промежуточных временах отношение сигнал/шум у этого типа агентов практически одинаково при тестировании как на последовательных данных, так и с путешествием во времени. Однако в течение первых ~5000 обновлений отношения сигнал/шум их выигрышей одинаковы для обеих временных динамик в фазе тестирования; мы интерпретируем это как время, необходимое, чтобы научиться эксплуатировать новый тип временной динамики.
6. Обсуждение
Использовать анонимные данные для офлайнового RL в конкурентной мультиагентной системе возможно — при условии, что о согласованности их использования позаботились, что естественно подсказывает задействовать путешествие во времени по данным для поиска согласованных траекторий. Хотя мы использовали лимитные стаканы как хрестоматийный пример таких систем, применимость нашего подхода не ограничивается финансовыми рынками. Маркетмейкинг в лимитных стаканах действительно оказался идеальным приложением для путешествия во времени по данным. По сравнению с обычным наивным последовательным способом с нулевым импактом путешествие во времени по данным даёт лучшее отношение сигнал/шум и более согласованную потерю выигрыша между тестовым и обучающим периодами. Важность учёта собственного влияния, каким бы малым оно ни было, в конкурентной мультиагентной системе исследовалась на простых играх, и там ясно показано, что этот учёт приводит к качественно иному глобальному и индивидуальному поведению, попутно также увеличивая отношение сигнал/шум выплат агентов (Marsili et al., 2000; Challet et al., 2004).
Явное различие результатов агентов, обученных и протестированных либо на последовательных данных, либо с путешествием во времени, показывает, что агенты выучивают разную динамику. Более согласованное использование данных означает, что RL-агенты выучивают более реалистичные траектории — то есть траектории, более близкие к тем, по которым пошла бы система, если бы агенты действительно играли против неё. Вероятно, именно поэтому выигрыш больше у агентов, обученных и протестированных на согласованно прыгающих данных. Тот факт, что выплата больше при путешествии во времени по данным, также говорит о том, что о сложности обучения маркетмейкера с помощью RL могли делаться неверные выводы — например, о трудности достижения положительных выплат.
Мы также подчеркнули важность учёта того, что действия RL-агента не транслируются в один и тот же набор эффективных событий в системе, и того, что явный учёт влияния разных типов латентности делает всю задачу согласованной динамики более запутанной.
Хотя концептуально путешествие во времени по данным лучше использует доступные данные, уровень его согласованности зависит от того, насколько хорошо динамика системы кодируется выбранной кодировкой состояния системы и сопоставлением влияний. Например, при поиске совместимых моментов прыжка мы пренебрегали динамикой системы до текущего момента, что можно исправить напрямую — например, включив кодировку нескольких последних событий в лимитном стакане.
В целом мы выбрали здесь довольно упрощённую постановку, которая имеет преимущество в скорости и оказалась достаточной для демонстрации работоспособности нашего подхода. Более реалистичная, но гораздо более медленная постановка потребовала бы использовать непрерывные переменные и вычислять расстояния между размытыми индексами, с частичной и, возможно, расширяющейся выборкой индексов.
Сноски
- В оригинале маркетмейкер обозначается местоимением «she»; в переводе используется женский или мужской род по контексту. — Прим. пер. ↩
- Фраза обрывается в оригинале. По контексту (см. упоминание «no queue priority» в разделе 5) речь о том, что приоритет заявки в очереди не моделируется. — Прим. пер. ↩
- Так в оригинале; по-видимому, имеется в виду сумма $\mathcal{R}_{u+1} = \mathcal{R}_{u+1}^J + \mathcal{R}_{u+1}^{B,exec}$. — Прим. пер. ↩
- Так в оригинале; 48 агентов × 4 дня × 2 динамики дают 384. — Прим. пер. ↩
Литература
- Frédéric Abergel, Marouane Anane, Anirban Chakraborti, Aymen Jedidi, and Ioane Muni Toke. Limit order books. Cambridge University Press, 2016.
- Saurabh Arora and Prashant Doshi. A survey of inverse reinforcement learning: Challenges, methods and progress. Artificial Intelligence, 297:103500, 2021.
- Brad M Barber, Yi-Tsung Lee, Yu-Jane Liu, and Terrance Odean. Is the aggregate investor reluctant to realise losses? Evidence from Taiwan. European Financial Management, 13(3):423–447, 2007.
- Alexander Barzykin, Philippe Bergault, and Olivier Guéant. Algorithmic market making in dealer markets with hedging and market impact. Mathematical Finance, 33(1):41–79, 2023.
- Philippe Bergault, David Evangelista, Olivier Guéant, and Douglas Vieira. Closed-form approximations in multi-asset market making. Applied Mathematical Finance, 28(2):101–142, 2021.
- Jean-Philippe Bouchaud, Julius Bonart, Jonathan Donier, and Martin Gould. Trades, quotes and prices: financial markets under the microscope. Cambridge University Press, 2018.
- Damien Challet, Matteo Marsili, and Yi-Cheng Zhang. Minority games: interacting agents in financial markets. OUP Oxford, 2004.
- Carl Chiarella. The dynamics of speculative behaviour. Annals of Operations Research, 37(1):101–123, 1992.
- Rama Cont, Arseniy Kukanov, and Sasha Stoikov. The price impact of order book events. Journal of Financial Econometrics, 12(1):47–88, 2014.
- Zoltan Eisler, Jean-Philippe Bouchaud, and Julien Kockelkoren. The price impact of order book events: market orders, limit orders and cancellations. Quantitative Finance, 12(9):1395–1419, 2012.
- Sascha Yves Frey, Kang Li, Peer Nagy, Silvia Sapora, Christopher Lu, Stefan Zohren, Jakob Foerster, and Anisoara Calinescu. JAX-LOB: A GPU-accelerated limit order book simulator to unlock large scale reinforcement learning for trading. In Proceedings of the Fourth ACM International Conference on AI in Finance, pages 583–591, 2023. (русский перевод)
- Olivier Guéant. Optimal market making. Applied Mathematical Finance, 24(2):112–154, 2017.
- Ben Hambly, Renyuan Xu, and Huining Yang. Recent advances in reinforcement learning in finance. Mathematical Finance, 33(3):437–503, 2023.
- Pankaj Kumar. Deep reinforcement learning for market making. In Proceedings of the 19th International Conference on Autonomous Agents and MultiAgent Systems, pages 1892–1894, 2020.
- Charles-Albert Lehalle and Sophie Laruelle. Market microstructure in practice. World Scientific, 2018.
- Sergey Levine, Aviral Kumar, George Tucker, and Justin Fu. Offline reinforcement learning: Tutorial, review, and perspectives on open problems. arXiv preprint arXiv:2005.01643, 2020.
- Fabrizio Lillo and J Doyne Farmer. The long memory of the efficient market. Studies in Nonlinear Dynamics & Econometrics, 8(3), 2004.
- Fabrizio Lillo, Salvatore Miccichè, Michele Tumminello, Jyrki Piilo, and Rosario N Mantegna. How news affects the trading behaviour of different categories of investors in a financial market. Quantitative Finance, 15(2):213–229, 2015.
- Matteo Marsili, Damien Challet, and Riccardo Zecchina. Exact solution of a modified El Farol's bar problem: Efficiency and the role of market impact. Physica A: Statistical Mechanics and its Applications, 280(3-4):522–553, 2000.
- Pavlin Mavrodiev, Claudio J Tessone, and Frank Schweitzer. Quantifying the effects of social influence. Scientific Reports, 3(1):1360, 2013.
- Volodymyr Mnih, Koray Kavukcuoglu, David Silver, Andrei A Rusu, Joel Veness, Marc G Bellemare, Alex Graves, Martin Riedmiller, Andreas K Fidjeland, Georg Ostrovski, et al. Human-level control through deep reinforcement learning. Nature, 518(7540):529–533, 2015.
- Yuki Sato and Kiyoshi Kanazawa. Inferring microscopic financial information from the long memory in market-order flow: A quantitative test of the Lillo-Mike-Farmer model. Physical Review Letters, 131(19):197401, 2023.
- Julian Schrittwieser, Ioannis Antonoglou, Thomas Hubert, Karen Simonyan, Laurent Sifre, Simon Schmitt, Arthur Guez, Edward Lockhart, Demis Hassabis, Thore Graepel, et al. Mastering Atari, go, chess and shogi by planning with a learned model. Nature, 588(7839):604–609, 2020.
- Thomas Spooner, John Fearnley, Rahul Savani, and Andreas Koukorinis. Market making via reinforcement learning. In Proceedings of the 17th International Conference on Autonomous Agents and MultiAgent Systems, pages 434–442, 2018.
- Richard S Sutton and Andrew G Barto. Reinforcement learning: An introduction. MIT press, 2018.