A Tick-by-Tick Solution for Concentrated Liquidity Provisioning

5.5/10

Корин Пауэрс · 30 мая 2024 (v1) · Gadget Capital

Переписка: corinne@gadget.fund

Оригинал: Powers, C. «A Tick-by-Tick Solution for Concentrated Liquidity Provisioning», 2024 — arxiv.org/abs/2405.18728 (PDF), лицензия CC BY-NC-SA 4.0.

Рисунки и таблица воспроизведены из оригинальной публикации. Перевод выполнен с указанием источника в соответствии с условиями лицензии CC BY-NC-SA 4.0 (некоммерческое использование, с указанием авторства и распространением производных на тех же условиях).

Аннотация

AMM с концентрированной ликвидностью программируются на уровне тика. Максимизация заработанных комиссий плюс обесцененные резервы — задача выпуклой оптимизации; векторное решение даёт лучшее размещение ликвидности на каждом тике при заданных оценках объёма свопов и волатильности цены. Ранние результаты: концентрировать ликвидность вокруг текущей цены обычно не лучшая стратегия.

1. Введение

Капитал размещается через AMM по набору пулов — тиков. Каждый тик зарабатывает комиссию, выступая контрпартией свопов в своём ценовом диапазоне. На тике уже может быть чужая ликвидность; комиссии делятся pro rata.

Чтобы положить ликвидность на тик, LP добавляет конкретную комбинацию токенов в зависимости от состояния AMM. (Пул может поддерживать свопы корзин [Ang+21]; здесь пара актив–стейблкоин.)

Для тик-за-тиком провижининга это обычно «100% актива» или «100% стейблкоина» — выше или ниже текущей цены соответственно, и смесь на текущей цене. Когда цена актива движется, состав и стоимость резервов тика меняются.

Интуитивно, тики у текущей цены должны собирать больше комиссий: цена прыгает вверх-вниз, свопы проходят через соседние тики. Чем сильнее концентрация внутри тика, тем больше доля комиссий.

С другой стороны, при падении цены резервы тика обесцениваются, ребаланс дорожает. Риск выше у более концентрированных позиций. Нужен баланс: быстро собирать комиссии при концентрации vs дольше оставаться в диапазоне при дисперсии.

Есть и другие факторы. Тики, уже насыщенные ликвидностью, дают хуже ROI на фиксированный объём из-за pro rata. Можно встроить прогноз волатильности и объёма, чтобы класть ликвидность туда, где ожидаемый yield выше.

Две постановки. Первая — максимум комиссий портфелем однотиковых диапазонов: введение в тик-за-тиком и точное решение. Вторая, более практичная — максимум доходности (комиссии плюс изменение резервов); это выпуклая задача. Тики можно брать из любого протокола, тира комиссий и сети и сводить в «кандидатное множество».

Смежные переводы: условия IL, вознаграждение LP, динамика цены AMM.

2. Фон

Литература по AMM обширна. Общая нить — связь со стаканом, коллами и путами [LK23] и разрыв, теряемый арбитражёрам [Mil+23], через аппарат Блэка–Шоулза [BS73]. Выпуклый анализ CFMM: [AC20], [AEC21]; многоактивные свопы [Ang+21]. Обзор — раздел Related literature в [Mil+23]. Эта работа адресована LP, для которых заработанные комиссии — часть целевой функции.

3. Задачи провижининга

Предположения:

Тогда стоимость портфеля тик-за-тиком через фиксированный срок зависит только от состояния AMM, объёма торгов и последней цены.

Максимум выручки

\[ \begin{aligned} \operatorname{maximize}\quad &\sum_{i=1}^n a_i\frac{x_i}{x_i+b_i}\\ \operatorname{subject\ to}\quad &x\ge 0,\quad \mathbf{1}^\top x=d, \end{aligned} \tag{1} \]

где $a_i,b_i\ge 0$, $d\ge 0$. Это задача максимума выручки для AMM с pro rata и тиковыми пулами. $a_i$ — оценка комиссий тика за период, $b_i$ — уже стоящая ликвидность, $d$ — капитал к распределению, $x_i$ — стоимость резервов на тике $i$; доля комиссий — $x_i/(x_i+b_i)$.

Water-filling. Решение:

\[ x_i=\max\bigl\{0,\ \sqrt{a_i b_i}\,(u-\sqrt{b_i/a_i})\bigr\},\qquad i=1,\ldots,n, \tag{2} \]

где $u$ из условия

\[ \sum_{i=1}^n \max\bigl\{0,\ \sqrt{a_i b_i}\,(u-\sqrt{b_i/a_i})\bigr\}=d. \tag{3} \]

Доказательство — приложение A.1. Левая часть (3) — кусочно-линейная возрастающая по $u$ с изломами в $\sqrt{b_i/a_i}$; решение единственно и находится сразу.

Интерпретация: на участке $i$ холм высоты $\sqrt{b_i/a_i}$ и ширины $\sqrt{a_i b_i}$; заливаем объёмом $d$ до уровня $u$ (рис. 1). Объём воды над участком — оптимальное $x_i$. Тики с большим $a_i$ получают воду быстрее. Большое $b_i$ — порог, после которого ROI хуже (убывающая отдача).

Схема water-filling для максимума выручки
Рис. 1. Water-filling для задачи (1). Высота участка $\sqrt{b_i/a_i}$, ширина $\sqrt{a_i b_i}$. Заливка до уровня $u$ объёмом $d$; вода над участком — оптимальное $x_i$.

Максимум доходности

\[ \begin{aligned} \operatorname{maximize}\quad &\sum_{i=1}^n\Bigl(a_i\frac{x_i}{x_i+b_i}+c_i x_i\Bigr)\\ \operatorname{subject\ to}\quad &x\ge 0,\quad \mathbf{1}^\top x=d, \end{aligned} \tag{4} \]

где $c_i\ge 0$ — ожидаемая стоимость резервов тика через период на единицу капитала. Если $c_i\lt 1$ ($c_i\gt 1$), резервы ожидаемо обесцениваются (дорожают); $\sum_i c_i x_i$ — ожидаемая суммарная стоимость резервов. Тройку $(a,b,c)$ называем рыночными условиями, $d$ — капиталом, $x$ — оптимальным провижинингом.

Выпуклая оптимизация. Задача (4) выпукла [BV04]: вогнутый максимум на (масштабированном) симплексе. Тождество $-x/(x+b)=b/(x+b)-1$ даёт стандартную форму

\[ \begin{aligned} \operatorname{minimize}\quad &\sum_{i=1}^n\Bigl(\frac{a_i b_i}{x_i+b_i}-c_i x_i-a_i\Bigr)\\ \operatorname{subject\ to}\quad &-x\preceq 0,\quad \mathbf{1}^\top x=d. \end{aligned} \tag{5} \]

Глобальный оптимум сертифицируется с заданной точностью. Солверы доступны; LP может быстро пересчитывать при смене условий. Параметры лучше масштабировать около 1, а не миллионов. Оценки $a,b,c,d$ из истории и рыночной разведки — раздел 4.

Рис. 2 — решение (4) в CVXPY [DB16]:

import cvxpy as cp

a = cp.Parameter(n, pos=True)
b = cp.Parameter(n, pos=True)
c = cp.Parameter(n, pos=True)
d = cp.Parameter(pos=True)
x = cp.Variable(n, pos=True)

a.value = fee_by_tick
b.value = liquidity_by_tick
c.value = reserves_return_by_tick
d.value = total_capital

obj = cp.Minimize(
    cp.multiply(a, b) @ cp.inv_pos(x + b)
    - c @ x - cp.sum(a)
)
constraints = [cp.sum(x) == d, x >= 0]
prob = cp.Problem(obj, constraints)

best_return = prob.solve()
best_provision = x.value

Рис. 2. Фрагмент решения задачи максимума доходности в CVXPY.

4. Оценка параметров

Текущая ликвидность $b$. Обычно это состояние AMM. Иногда нужны нетто-изменения с соседних тиков; проверка — info.uniswap.org для Uniswap V3.

Объём свопов → $a$, будущие комиссии. Из water-filling видно: объём и волатильность критичны. У объёма две стороны: форма и размер. Непараметрика: шумоподавление $\mathbb{R}^n$-сигнала за $T$ периодов. Или статистика: гауссова форма по центрированным тиковым объёмам, затем масштаб средним оборотом. Рыночную разведку можно вшить вручную (событие, которое поднимет оборот, не только волатильность).

Частый шаг обработки: своп из тика $i$ в тик $j$ оставляет объём на $i$, $j$ и всех тиках между ними. Точный объём по тику восстанавливается из pre-/post-swap цены и ликвидности вдоль пути. Затем умножить на тир комиссий (обычно 1, 5, 30, 100 б.п.). Можно брать кандидатов из разных тиров, например ETH-USDC 0,05% и 0,3%: и объём по тикам, и множитель будут разными.

Волатильность → $c$, ожидаемый return резервов. Return резервов тика $r_i\in\mathbb{R}_+^n$ — детерминированная функция цены актива, инвариантная по времени и пути. Два примера тиков Uniswap V3 — рис. 3 (лог-шкала).

Лог-доходность резервов верхнего и нижнего тика Uniswap V3
Рис. 3. Лог-доходность резервов двух тиков Uniswap V3. Один активен при более высокой цене (синий), другой — при более низкой (красный).

Резервы «верхнего» тика стартуют как чистый актив и дорожают, пока цена растёт, пока тик не войдёт в диапазон и актив не обменяют на стейбл. «Нижний» тик стартует как чистый стейбл и держит стоимость, пока цена не упадёт в диапазон и стейбл не обменяют на актив. У обоих стоимость актива сжимается при падении цены и упирается в потолок при росте.

Ожидаемый return $c_i$ зависит от цены следующего периода со функцией массы $p\in\mathbb{R}_+^n$:

\[ c_i=p^\top r_i,\qquad i=1,\ldots,n. \tag{6} \]

Сумма $\sum_i c_i=p^\top(\sum_i r_i)$ — ожидание портфеля через период, если на каждый тик положить единицу капитала. Волатильность — стандартное отклонение $p$, умноженное на корень из числа периодов в году. Обычная модель — геометрическое броуновское: лог-доходности н.о.р. гауссовы, калибровка по истории. $r_i$ можно задавать отдельно для constant product и constant sum.

Согласованность моделей волатильности и объёма. Форма объёма по тикам может не совпадать с распределением цены через период (события внутри периода, концентрация, глубина стакана). Но низкоэнтропийный узкий объём плохо стыкуется с высокоэнтропийным разбросом цен; объём может быть центрирован не там, где будущая цена. Решения (4) с несогласованными $a$ и $c$ выглядят странно, хотя оптимум формально корректен.

5. Эксперименты

Качественный тест. Капитал $d$ распределяется по кандидатам $\Omega$. Текущая цена $p$, горизонт $T$ дней. Для $a$: стандартное отклонение объёма за прошлые $T$ дней, гауссиана с этим σ, центр в текущей цене. Для $c$: implied volatility $\eta$, распределение цены через $T$ дней.

В эксперименте $d$ = 1 млн USD, $T=7$ дней, $\Omega$ — тики ETH-USDC 0,05% Uniswap V3 на Ethereum. Цена $p$ = 2780 USD на 16 февраля 2024, тики сужены до 2500–3060 (±10%). Implied vol $\eta=80\%$ — примерно 7-дневная скользящая с опционных площадок. Данные ликвидности, цены и объёма — web3.py напрямую из протокола.

Рис. 4: уже стоящая ликвидность $b$ и провижининг $x$ (зелёный). На текущем тике провижининга нет; почти всё — в диапазоне 2830–2980 USD. Причина: там провал чужой ликвидности, значит большая доля комиссий на тот же капитал. Дальше по цене объём на тик сходит на нет — компромисс объёма и волатильности.

Оптимальный провижининг в провале ликвидности выше текущей цены
Рис. 4. При данной чужой ликвидности оптимальный тик-за-тиком провижининг концентрируется в ближайшем «колодце» к текущей цене актива.

Рис. 5: слева исторический объём (жёлтый) и прогноз (фиолетовый) — одно σ и один суммарный размер, разная форма. Справа — ожидаемый return резервов $c$ при GBM с рыночной implied vol. Наибольшая потеря — на текущей цене: среди тиков «с кожей в игре» (на и выше текущей цены) у него меньше всего апсайда.

Прогноз объёма свопов и ожидаемый return резервов
Рис. 5. Слева: исторический объём свопов (жёлтый) и прогноз (фиолетовый). Справа: резервы на текущем тике теряют больше всего.

Если выбирать, сколько капитала $d$ класть, рис. 6 показывает форму провижининга при росте $d$. Верхний ряд — оверлей на текущую ликвидность, нижний — только $x$ из (4). Провижининг быстрее забивает «колодцы» за долей комиссий — эффект fee-chasing. При большом $d$ появляется бимодальность — эффект loss-avoiding резервов: он линеен по $d$ и проявляется на больших суммах. Насколько известно автору, для LP это новое наблюдение.

Форма провижининга при росте капитала от 200k до 10m
Рис. 6. Слева направо капитал растёт от 200 тыс. до 10 млн USD. Сверху — суммарная ликвидность пула после оптимума, снизу — изолированный тик-за-тиком провижининг.

Сравнение с однодиапазонным провижинингом: равномерно по тикам, центр в текущей цене. Плюс дельта-нейтральная версия: шорт на стоимость резервов во всех активах, чтобы убрать экспозицию на текущей цене.

Модель калибруется на прошлые $S$ дней, рынок симулируется $T$ дней, позиции закрываются; процесс повторяется каждые $R$ дней. Таблица 1: однодиапазонный тик ±10% текущей цены, $T=S=7$, $R=4$. Период примерно 1 января — 16 февраля 2024, рост ETH около 30%. Идентификация окон — по номерам блоков.

Таблица 1. Тик-за-тиком против диапазона ±10% и дельта-нейтрального хеджа. 1 млн USD, недельный ребаланс, январь — 16 февраля 2024.
Train blockTest blockTick by tickRange ±10%Delta-neutral
18943206189933124,24%4,50%0,49%
18971817190219234,00%4,48%−1,11%
19000435190505411,69%3,86%−2,57%
190290311907913710,63%5,25%−8,56%
19057636191077428,67%5,30%−6,25%
19086319191364257,38%4,96%−6,66%
19114856191649623,55%4,79%−5,97%
19143467191935731,10%3,80%−3,71%
mean5,16%4,62%−4,29%
std3,17%0,54%2,89%

На этом наборе условий тик-за-тиком лучше в среднем, но неделя к неделе скачет сильнее. Однодиапазонная стратегия выиграла от апсайда в ETH, что ударило по дельта-нейтральной. Нужны тесты на других режимах рынка; пока результаты выглядят обнадёживающе.

6. Обсуждение

Тик-за-тиком — другой способ программировать ликвидность. У LP свои конкурирующие эффекты; баланс бьём векторной и выпуклой математикой, а не греками (дельта, тета, гамма), не оставляя денег на столе. Объём и волатильность разделены: на практике их часто смешивают.

Открытые вопросы:

Главный вопрос: возможно ли, что оптимальный провижининг не центрирован вокруг текущей цены? Если да — что это значит для сообщества и глубины децентрализованных рынков?

Приложение A.1. Water-filling для максимума выручки

Прямое расширение примера [BV04], с. 245. Задача (1); тождество $x/(x+b)=1-b/(x+b)$ переписывает цель (с точностью до константы) как $\sum_i a_i b_i/(x_i+b_i)$.

Множители Лагранжа $\lambda_i$ для $x\ge 0$ и $\nu$ для $\mathbf{1}^\top x=d$. Условия KKT:

\[ x\ge 0,\quad \mathbf{1}^\top x=d,\quad \lambda\ge 0,\quad x_i\lambda_i=0, \] \[ -\frac{a_i b_i}{(x_i+b_i)^2}-\lambda_i+\nu=0,\qquad i=1,\ldots,n. \]

$\lambda_i$ — слабая переменная; после исключения

\[ x\ge 0,\ \mathbf{1}^\top x=d,\quad x_i\Bigl(\nu-\frac{a_i b_i}{(x_i+b_i)^2}\Bigr)=0,\quad \frac{a_i b_i}{(x_i+b_i)^2}\le\nu. \]

Инвертируем и берём корень, подставляем $u=1/\sqrt{\nu}$:

\[ \frac{x_i+b_i}{\sqrt{a_i b_i}}\ge u. \]

Если $u\gt\sqrt{b_i/a_i}$, последнее возможно только при $x_i\gt 0$, откуда $x_i=\sqrt{a_i b_i}(u-\sqrt{b_i/a_i})$. Если $u\le\sqrt{b_i/a_i}$, то $x_i\gt 0$ противоречит complementary slackness, значит $x_i=0$. Итого (2); подстановка в $\mathbf{1}^\top x=d$ даёт (3).

Литература

  1. Black, F. and Scholes, M. (1973). The pricing of options and corporate liabilities. Journal of Political Economy.
  2. Boyd, S. and Vandenberghe, L. (2004). Convex Optimization. Cambridge University Press.
  3. Diamond, S. and Boyd, S. (2016). CVXPY: A Python-embedded modeling language for convex optimization. JMLR 17.83.
  4. Angeris, G. and Chitra, T. (2020). Improved price oracles: Constant function market makers. In AFT '20.
  5. Angeris, G., Evans, A. and Chitra, T. (2021). Replicating market makers. arXiv:2103.14769.
  6. Angeris, G. et al. (2021). Constant function market makers: Multi-asset trades via convex optimization. arXiv:2107.12484.
  7. Lambert, G. and Kristensen, J. (2023). Panoptic: the perpetual, oracle-free options protocol. arXiv:2204.14232.
  8. Milionis, J. et al. (2023). Automated market making and loss-versus-rebalancing. arXiv:2208.06046.

Перевод выполнен с сохранением структуры, формул и данных оригинала. Оригинал: arXiv:2405.18728 · Powers · CC BY-NC-SA 4.0.