A Tick-by-Tick Solution for Concentrated Liquidity Provisioning
Корин Пауэрс · 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 хуже (убывающая отдача).
Максимум доходности
\[ \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 (лог-шкала).
Резервы «верхнего» тика стартуют как чистый актив и дорожают, пока цена растёт, пока тик не войдёт в диапазон и актив не обменяют на стейбл. «Нижний» тик стартует как чистый стейбл и держит стоимость, пока цена не упадёт в диапазон и стейбл не обменяют на актив. У обоих стоимость актива сжимается при падении цены и упирается в потолок при росте.
Ожидаемый 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. Причина: там провал чужой ликвидности, значит большая доля комиссий на тот же капитал. Дальше по цене объём на тик сходит на нет — компромисс объёма и волатильности.
Рис. 5: слева исторический объём (жёлтый) и прогноз (фиолетовый) — одно σ и один суммарный размер, разная форма. Справа — ожидаемый return резервов $c$ при GBM с рыночной implied vol. Наибольшая потеря — на текущей цене: среди тиков «с кожей в игре» (на и выше текущей цены) у него меньше всего апсайда.
Если выбирать, сколько капитала $d$ класть, рис. 6 показывает форму провижининга при росте $d$. Верхний ряд — оверлей на текущую ликвидность, нижний — только $x$ из (4). Провижининг быстрее забивает «колодцы» за долей комиссий — эффект fee-chasing. При большом $d$ появляется бимодальность — эффект loss-avoiding резервов: он линеен по $d$ и проявляется на больших суммах. Насколько известно автору, для LP это новое наблюдение.
Сравнение с однодиапазонным провижинингом: равномерно по тикам, центр в текущей цене. Плюс дельта-нейтральная версия: шорт на стоимость резервов во всех активах, чтобы убрать экспозицию на текущей цене.
Модель калибруется на прошлые $S$ дней, рынок симулируется $T$ дней, позиции закрываются; процесс повторяется каждые $R$ дней. Таблица 1: однодиапазонный тик ±10% текущей цены, $T=S=7$, $R=4$. Период примерно 1 января — 16 февраля 2024, рост ETH около 30%. Идентификация окон — по номерам блоков.
| Train block | Test block | Tick by tick | Range ±10% | Delta-neutral |
|---|---|---|---|---|
| 18943206 | 18993312 | 4,24% | 4,50% | 0,49% |
| 18971817 | 19021923 | 4,00% | 4,48% | −1,11% |
| 19000435 | 19050541 | 1,69% | 3,86% | −2,57% |
| 19029031 | 19079137 | 10,63% | 5,25% | −8,56% |
| 19057636 | 19107742 | 8,67% | 5,30% | −6,25% |
| 19086319 | 19136425 | 7,38% | 4,96% | −6,66% |
| 19114856 | 19164962 | 3,55% | 4,79% | −5,97% |
| 19143467 | 19193573 | 1,10% | 3,80% | −3,71% |
| mean | 5,16% | 4,62% | −4,29% | |
| std | 3,17% | 0,54% | 2,89% |
На этом наборе условий тик-за-тиком лучше в среднем, но неделя к неделе скачет сильнее. Однодиапазонная стратегия выиграла от апсайда в ETH, что ударило по дельта-нейтральной. Нужны тесты на других режимах рынка; пока результаты выглядят обнадёживающе.
6. Обсуждение
Тик-за-тиком — другой способ программировать ликвидность. У LP свои конкурирующие эффекты; баланс бьём векторной и выпуклой математикой, а не греками (дельта, тета, гамма), не оставляя денег на столе. Объём и волатильность разделены: на практике их часто смешивают.
Открытые вопросы:
- Как выглядит мультипуловый провижининг? Когда оптимальны несколько тиров комиссий, каких тиров не хватает?
- Насколько решение чувствительно к оценкам волатильности и объёма? Что ещё сказать об эмпирической связи волатильность–объём?
- Куда вписывается just-in-time ликвидность (JIT)? Класть далёкий тик сейчас или когда цена подойдёт ближе? Если так делают все, что это значит для текущего $b$?
- Дельта-нейтрален ли подход? Какая форма у производной return по цене?
- Как ещё читать избегание текущей цены? Связь с LVR [Mil+23]?
- Что меняет Uniswap V4?
Главный вопрос: возможно ли, что оптимальный провижининг не центрирован вокруг текущей цены? Если да — что это значит для сообщества и глубины децентрализованных рынков?
Приложение 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).
Литература
- Black, F. and Scholes, M. (1973). The pricing of options and corporate liabilities. Journal of Political Economy.
- Boyd, S. and Vandenberghe, L. (2004). Convex Optimization. Cambridge University Press.
- Diamond, S. and Boyd, S. (2016). CVXPY: A Python-embedded modeling language for convex optimization. JMLR 17.83.
- Angeris, G. and Chitra, T. (2020). Improved price oracles: Constant function market makers. In AFT '20.
- Angeris, G., Evans, A. and Chitra, T. (2021). Replicating market makers. arXiv:2103.14769.
- Angeris, G. et al. (2021). Constant function market makers: Multi-asset trades via convex optimization. arXiv:2107.12484.
- Lambert, G. and Kristensen, J. (2023). Panoptic: the perpetual, oracle-free options protocol. arXiv:2204.14232.
- 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.