Как читать этот разбор. Главный результат работы помещается в две формулы, они в разделе «Метод в одну строку»: где поставить центр котировок и какой ширины спред. Раздел про симуляции показывает, что это даёт на практике, и его стоит прочитать целиком. Вывод через уравнение Беллмана можно пропустить. Всё, чего модель не учитывает, собрано в разделе «Что в работе шатко».
1. Как устроен мир модели
Маркет-мейкер держит в стакане две лимитные заявки: на покупку чуть ниже середины рынка и на продажу чуть выше. Зарабатывает он на разнице. Авторы выделяют у него два риска. Инвентарный: пока на руках накопилась позиция, цена может уйти против неё. Транзакционный: неизвестно, когда и исполнятся ли заявки вообще. Классическая литература называет ещё третий риск, информированного контрагента, но авторы сразу оговаривают, что занимаются только первым: "we will focus on the inventory effect" (раздел 1).
Из чего состоит модель:
- середина рынка движется как случайное блуждание без сноса с постоянной волатильностью: ;
- агент ставит заявку на покупку на расстоянии ниже середины и на продажу на расстоянии выше;
- рыночные ордера приходят случайно, пуассоновским потоком, и исполняют его заявки по одной акции;
- это его позиция: плюс означает лонг, минус шорт;
- это конец сессии, по которому оценивается результат.
Что такое пуассоновский поток. Модель событий, которые приходят независимо друг от друга с известной средней частотой. Пример: звонки в колл-центр, в среднем 10 в час, но моменты звонков случайны. Здесь так приходят рыночные ордера, которые бьют в заявки агента.
Что такое . Приращение винеровского процесса, то есть случайный толчок с нулевым средним. За шаг времени цена меняется на случайную величину со стандартным отклонением .
Почему арифметическое блуждание, а не привычное геометрическое, авторы объясняют в сноске 1: так ожидаемая полезность остаётся ограниченной. В приложении есть версия с геометрическим блужданием и целью «среднее минус дисперсия», и авторы пишут, что суть результатов сохраняется.
2. Метод в одну строку
Посчитать личную цену агента, сдвинутую против накопленной позиции, и поставить вокруг неё спред, ширина которого складывается из платы за риск позиции и платы за ликвидность.
Первый шаг, резервная (безразличная) цена:
Что это такое. Личная оценка агента: цена, при которой ему всё равно, держать позицию или нет. Вокруг неё, а не вокруг середины рынка, он ставит заявки. Авторы подчёркивают, что это субъективная оценка, а не цена сделки:
"We stress that this is a subjective valuation from the point of view of the agent and does not reflect a price at which trading should occur"(раздел 2.2).Что означает каждый значок.
- : середина рынка, полусумма лучшего бида и лучшего аска.
- : текущая позиция в штуках, со знаком.
- («гамма»): неприятие риска. Чем больше, тем сильнее агент боится колебаний.
- («сигма в квадрате»): дисперсия цены за единицу времени.
- : сколько времени осталось до конца сессии.
Счёт по шагам. Перемножить позицию, гамму, дисперсию и оставшееся время. Вычесть результат из середины рынка.
Пример на параметрах симуляции работы (, , то есть , ):
- позиция : сдвиг ноль, резервная цена равна середине;
- позиция в начале сессии: . При середине 100 резервная цена 98, обе заявки съезжают вниз: продать агент готов дешевле рынка, а покупать дальше не хочет;
- та же позиция при : , резервная цена 99.8. До конца сессии цена далеко не уйдёт, и позиция уже не так страшна.
Зачем это нужно. Это и есть управление инвентарём. Прогноза направления здесь нет: правило только решает, с какой стороны стоять агрессивнее, исходя из того, что уже накопилось.
Второй шаг, полная ширина спреда вокруг резервной цены:
Что это такое. Расстояние между заявкой на покупку и заявкой на продажу. Ставится симметрично вокруг резервной цены .
Что означает каждый значок. и («дельта а» и «дельта бэ»): отступы заявок на продажу и покупку. : скорость, с которой падает частота исполнений при отходе от середины (раздел 3). : натуральный логарифм.
Счёт по шагам. Первое слагаемое: гамма, умноженная на дисперсию и оставшееся время, это плата за риск держать позицию. Второе: разделить гамму на , прибавить единицу, взять логарифм и умножить на , это плата за ликвидность, компромисс между доходом с одной сделки и числом сделок.
Пример на параметрах работы (, , , ): второе слагаемое ; первое в начале сессии . Спред около 1.69 в начале сессии и 1.29 к её концу.
Зачем это нужно. Ширина и центр это две независимые ручки. Позиция двигает центр, а ширина от неё не зависит:
"The bid-ask spread in (3.13) is independent of the inventory. This follows from our assumption of exponential arrival rates."(раздел 3.2). При другой форме потока исполнений это свойство пропадает.
Число 1.29 совпадает со значением в столбце «Spread» таблицы 1, и в тексте симуляций авторы называют именно его: "a bid/ask spread of $1.29 (corresponding to the optimal agent with γ = 0.1)".

Как его читать. По горизонтали время от 0 до 1, одна сессия. Чёрная ломаная это середина рынка, зелёная линия резервная цена (indifference price), красные закрашенные точки заявки на продажу, красные кружки заявки на покупку.
Что нужно увидеть. Около зелёная линия выше чёрной. По формуле это значит , у агента шорт. Заявка на покупку стоит близко к середине, агент хочет откупиться, и, как пишут авторы, к позиция возвращается к нулю. К концу сессии зелёная линия прижимается к чёрной, котировки становятся почти симметричными.
Практический вывод. Правило не угадывает направление. Оно наклоняет котировки против накопленной позиции и делает это тем слабее, чем меньше осталось времени.
3. Откуда берётся экспонента в потоке исполнений
Всё, что агент знает о рынке, сидит в одной функции: как часто исполняется заявка, поставленная на расстоянии от середины.
Что это такое. Интенсивность исполнения: среднее число исполнений заявки в единицу времени.
Что означает каждый значок. («лямбда»): интенсивность. : интенсивность при нулевом отступе, заявка ровно на середине. : скорость затухания. : экспонента, убывающая с ростом отступа.
Счёт по шагам. Умножить на отступ, взять в минус этой степени, умножить на .
Пример на параметрах симуляции (, ): на середине 140 исполнений в единицу времени; на отступе 0.5 около 66; на отступе 1 около 31; на отступе 2 около 7. Каждая лишняя единица отступа делит поток примерно в 4.5 раза (); наш счёт.
Зачем это нужно. От и зависит всё остальное: второе слагаемое спреда содержит прямо. Это характеристики конкретного рынка в конкретное время, их надо оценивать по своим данным.
Экспоненту авторы не постулируют, а собирают из двух эмпирических фактов эконофизики (раздел 2.5). Первый: размеры рыночных ордеров распределены по степенному закону, плотность , с оценками для акций США, 1.4 для NASDAQ и 1.5 для Парижской биржи. Второй: насколько крупный ордер двигает цену. Здесь авторы честно говорят о разногласиях: "There is less consensus on the statistics of the market impact in the econophysics literature." Одни находят степенной импакт с или 0.76, другие лучше подгоняют логарифмический .
Логарифмический импакт вместе со степенным хвостом размеров даёт экспоненту, где и ; здесь это общая частота рыночных ордеров, которую авторы предлагают оценивать как дневной объём, делённый на средний размер ордера. Степенной импакт дал бы степенную интенсивность . Итог авторов осторожный: "Aggregating these results suggests that λ should decay as an exponential or a power law function." Дальше они работают с экспонентой, потому что с ней формулы получаются в замкнутом виде.
4. Что агент максимизирует и как получено решение
Что это такое. Целевая функция: ожидаемая полезность итогового богатства.
Что означает каждый значок. : деньги на счёте в конце сессии. : оставшаяся позиция по конечной цене середины. Их сумма это итоговое богатство. : экспоненциальная функция полезности; минус нужен, чтобы она росла вместе с богатством . : среднее по всем сценариям при том, что известно в момент . по : выбрать отступы, при которых это среднее наибольшее.
Как это читается. Агенту не всё равно, как получен результат: 100 стабильно лучше, чем 100 с большим разбросом. Экспоненциальная полезность делает эту разницу измеримой, а для вывода удобна тем, что резервная цена от начального богатства не зависит. Это свойство авторы называют причиной выбора (раздел 2.2).
Пример. У авторов три агента: почти безразличен к риску, умеренно осторожен, очень боится накопить позицию. Чем они различаются, видно в таблицах раздела 6.
Решение идёт через уравнение Гамильтона–Якоби–Беллмана, стандартный аппарат динамического программирования, как в работе Ho и Stoll 1981 года. Полное уравнение нелинейно и в замкнутом виде не решается. Авторы делают два упрощения: раскладывают решение по степеням позиции до второго порядка и берут линейное приближение членов, отвечающих за приход ордеров. Именно после этих упрощений резервная цена совпадает с ценой агента, который вообще не торгует и просто держит позицию до конца сессии, а спред получает вид из раздела 2. Авторы отмечают, что при квадратичном приближении потока чувствительность к позиции подчинялась бы уже нелинейному уравнению. То есть формулы раздела 2 приближённые и рассчитаны на небольшие позиции.
Есть и точные определения, из которых всё выросло. Резервная цена покупки это цена, при которой агенту безразлично, купить ещё одну акцию или нет; резервная цена продажи определена так же. Для агента без заявок они равны , а резервная цена из раздела 2 это их среднее.
5. Если сессия не кончается: бесконечный горизонт
Множитель требует момента, к которому позицию надо оценить. В разделе 2.3 авторы сами предлагают стационарный вариант без конца сессии: агент максимизирует дисконтированную полезность на бесконечном горизонте с параметром .
Что это такое. Резервная цена продажи для агента, у которого нет конца сессии. Резервная цена покупки получается заменой на .
Что означает каждый значок. («омега»): параметр дисконтирования. Формула имеет смысл при , поэтому авторы читают как верхнюю границу позиции и предлагают естественный выбор , где это предельная позиция.
Счёт по шагам, наш пример. , , : , . При позиции знаменатель ; для продажи числитель , и ; для покупки числитель , и . Обе резервные цены ниже середины: с лонгом агент хочет продавать и не хочет покупать.
Зачем это нужно. Это ответ самих авторов на вопрос, что делать, когда сессия не кончается. Вместо оставшегося времени сдвиг котировок регулирует заданный предел позиции.
Для этой версии авторы не выводят спред и не делают симуляций; в разделе 3 они работают с конечным горизонтом.
6. Симуляции: что даёт поправка на позицию
Параметры: , , , , , , . На каждом шаге агент пересчитывает отступы, с вероятностью продаёт одну акцию, с вероятностью покупает одну, середина сдвигается на . Сравнение идёт с симметричной стратегией, у которой тот же спред, но центр всегда на середине рынка. По 1000 прогонов на каждое .
Выбор шага авторы называют тонким местом ("In practice, the choice of time step dt is a subtle one."): он должен быть достаточно мал, чтобы за шаг редко приходило больше одного ордера, и больше типичного интервала между тиками, иначе заявки пересчитываются так часто, что их не успевают исполнить.
| Стратегия | Спред | Прибыль | Ст. откл. прибыли | Конечная позиция | Ст. откл. позиции | |
|---|---|---|---|---|---|---|
| 0.1 | с учётом позиции | 1.29 | 62.94 | 5.89 | 0.10 | 2.80 |
| 0.1 | симметричная | 1.29 | 67.21 | 13.43 | −0.018 | 8.66 |
| 0.01 | с учётом позиции | 1.33 | 66.78 | 8.76 | −0.02 | 4.70 |
| 0.01 | симметричная | 1.33 | 67.36 | 13.40 | −0.31 | 8.65 |
| 0.5 | с учётом позиции | 1.15 | 33.92 | 4.72 | −0.02 | 1.88 |
| 0.5 | симметричная | 1.15 | 66.20 | 14.53 | 0.25 | 9.06 |
Таблицы 1–3 работы сведены в одну.
При стратегия с учётом позиции зарабатывает на 6 % меньше (62.94 против 67.21), но разброс прибыли у неё в 2.3 раза меньше (5.89 против 13.43), а разброс конечной позиции в 3 раза меньше (2.80 против 8.66). Если поделить прибыль на её разброс, получается 10.7 против 5.0 (наш счёт по таблице; авторы такого отношения не считают).
При разница почти исчезает. Авторы пишут, что "in the limit as γ → 0 the two strategies are identical": агенту, безразличному к риску, незачем сдвигать котировки.
При прибыль почти вдвое ниже (33.92 против 66.20) при разбросе позиции 1.88. Авторы описывают этого агента как очень осторожного, который "will go to great lengths to avoid accumulating an inventory".
Почему симметричная стратегия зарабатывает больше, авторы объясняют так: она всегда стоит вокруг середины и потому получает больше исполнений. Инвентарная периодически отводит одну сторону от рынка и пропускает часть потока.

Как его читать. По горизонтали прибыль за сессию, по вертикали число прогонов. Красные столбцы это стратегия с учётом позиции (Inventory strategy), белые с чёрным контуром симметричная. В легенде симметричной стратегии приписан тёмно-синий цвет, но на графике её столбцы белые.
Что нужно увидеть. Центры почти совпадают, около 60–70. Красное распределение узкое и высокое, белое широкое, с хвостами от 10 до 130.
Практический вывод. Поправка на позицию почти не двигает среднее, она сжимает распределение результата.


Как читать рисунки 3 и 4. Те же оси и цвета. На рисунке 3 почти безразличный к риску агент: распределения близки, красное лишь немного уже. На рисунке 4 очень осторожный агент: красное распределение узкое и сдвинуто влево, к 30–40, белое осталось около 65.
Практический вывод. Параметр работает как ручка «прибыль против стабильности». Три значения дают три разных продукта, и выбор между ними определяется тем, какой разброс результата допустим, а не максимумом прибыли.
7. Что в работе шатко
Оговорки самих авторов
Приближённость формул. Резервная цена и спред из раздела 2 получены разложением по позиции и линейным приближением потока ордеров (раздел 3.2). Для крупных позиций и при квадратичном приближении результат был бы другим, и авторы это прямо говорят.
Форма потока выбрана, а не установлена. Сами авторы приводят разногласия по импакту и вывод «экспонента или степенная функция». Независимость спреда от позиции следует именно из экспоненты.
Только инвентарный риск. Риск информированного контрагента вынесен за рамки с первой страницы.
Модель цены упрощена ради ограниченности полезности (сноска 1), а вариант с геометрическим блужданием дан только в приложении, без симуляций.
Что заметно при чтении
Расхождений чисел с текстом мы не искали: числа и формулы работы не пересчитывались (пометка «наш счёт» стоит только у наших примеров). Ниже ограничения конструкции, которые видны при чтении.
Нет информированного потока. Вероятность исполнения заявки на покупку одинакова, собирается цена падать или расти. На реальном рынке заявку чаще исполняют тогда, когда цена идёт против неё, и именно это обычно съедает доход маркет-мейкера.
Нет очереди. Исполнение зависит только от расстояния до середины, а не от объёма, стоящего впереди на том же уровне цены.
Единичный размер, нет комиссий, ребейтов и шага цены. Каждое исполнение ровно одна акция.
Конечный и известный . На круглосуточном рынке множитель не определён. Версия с бесконечным горизонтом из раздела 5 есть, но без спреда и без симуляций.
Проверка той же моделью. Все 1000 прогонов сделаны в мире, где допущения выполняются точно. Эмпирической проверки нет.
Столбец «Спред» в таблицах. Для значение 1.29 совпадает со вторым слагаемым формулы спреда, без инвентарной части , которая в начале сессии добавляет ещё 0.4. Включена ли эта часть в спред симметричной стратегии, текст не уточняет; сказано только, что она "uses the same spread as the inventory strategy". От этого зависит, насколько честно сравнение прибылей.
8. Что из этого следует на практике
Управление позицией и прогноз направления это разные слои. В конструкции нет ни одного прогноза цены. Сигнальную часть бота и инвентарную удобно держать отдельно и проверять по отдельности.
Резервная цена это одна строка кода: r = mid - q * gamma * sigma**2 * (T - t). Вся сложность в калибровке , и особенно и .
и важнее формул. Без собственной оценки зависимости «частота исполнения от отступа» спред из формулы остаётся числом из чужого рынка. Если зависимость не экспоненциальная, формула ширины спреда неверна по построению.
выбирается из допустимого разброса, а не подгоняется по прибыли. На истории максимум прибыли почти всегда даст около нуля, то есть симметричную стратегию с вдвое большим разбросом.
Метрика «разброс конечной позиции» в работе стоит наравне с прибылью. Для любой стратегии маркет-мейкинга это прямой признак того, работает ли контроль инвентаря.
Для круглосуточного рынка честнее начинать с версии с бесконечным горизонтом из раздела 2.3 работы, где предел позиции задан явно, чем подставлять в произвольную константу.
9. Тестируемые идеи
| № | Идея | Тип | Где считать |
|---|---|---|---|
| 1 | Оценить по своему стакану зависимость «отступ заявки от середины → частота исполнения» и проверить, экспонента ли это или степенная функция; получить свои и | диагностика | Python |
| 2 | Добавить сдвиг центра котировок отдельным включаемым модулем и сравнить с симметричной версией по прибыли, разбросу прибыли и разбросу конечной позиции | изменение конструкции | бэктестер |
| 3 | Прогнать сетку от 0.001 до 1 и построить кривую «средняя прибыль против её разброса»; выбирать точку по допустимому разбросу | метрика приёмки | Python |
| 4 | Для рынка без закрытия сравнить три замены : константу, скользящее окно и версию с бесконечным горизонтом и пределом позиции | изменение конструкции | Python |
| 5 | Добавить в симуляцию информированный поток: исполнение чаще тогда, когда цена затем идёт против заявки; проверить, сохраняется ли преимущество поправки на позицию | диагностика | Python |
| 6 | Добавить в симуляцию очередь на уровне цены и посмотреть, как меняется оптимальный отступ | диагностика | Python |
| 7 | Проверить на реальных исполнениях, что ширина спреда не должна зависеть от позиции; если зависимость появляется, поток исполнений не экспоненциальный | аудит | Python |
| 8 | Включить разброс конечной позиции за сессию в стандартный отчёт любой стратегии маркет-мейкинга рядом с прибылью | метрика приёмки | бэктестер |