При взаимодействии с протоколом при открытии диапазона пользователь видит примерно такую картинку
Из нее можно взять верхнюю границу P1=3121,8, нижнюю границу Pn=1870,63 и шаг цены Δ = 0,1%. Шаг цены Δ лучше уточнить сразу, замеряв разницу между столбцами и получив приращение в %. При Δ=2% в интерфейсе на самом деле может быть 1,91% при точном расчете.
Количество корзин n мы считать методом устного счета в интерфейсе не будем, а применим формулу, которую сейчас и выведем.
Для облегчения восприятия пусть предоставляются usdc в одностороннем порядке от верхней границы P1 до нижней Pn. На падении цены будут покупаться эфиры за usdc.
Пусть P1 - это цена 1-й корзины, а Δ -шаг цены в %. Тогда во 2-й корзине P2=P1+P1хΔ или же P2=P1(1+Δ) (пока запишем в общем виде, имея ввиду, что при понижении цены Δ - отрицательна, а при повышении Δ - положительна)
Для 3-й корзины можно записать: P3=P2+P2хΔ=P2(1+Δ)=P1(1+Δ)(1+Δ) =P1(1+Δ)^2, где ^ - символ операции возведения в степень.
Тогда для n-й корзины (которая из интерфейса неизвестна, а считать устно корзины мы не хотим) получим такую цену:
Pn=P1(1+Δ)^(n-1). Вот из этого уравнения и найдем чему равно число корзин n.
n=log[1+Δ]Pn/P1 + 1. Читается - логарифм Pn/P1 по основанию 1+Δ плюс 1. В экселе легко считается.
Теперь мы нашли число n корзин, зная из интерфейса P1 и Pn (границы диапазона) и шаг цены Δ с уточнением его по месту.
Пусть поставщик ликвидности распалагает 100000 usdc. Тогда в каждую из n корзин будет помещено m долларов ликвидности = 100000/n.
Прежде чем перейти к примеру, замечу что эфир будет покупаться по ценам, которые будут представлять ценовой ряд геометрической прогрессии со знаменателем прогрессии q=(1+Δ):
P1, P1(1+Δ), P1(1+Δ)^2, P1(1+Δ)^3,...., P1(1+Δ)^(n-1)
Пример:
В примере ценовой ряд P1,...,P27 есть геометрическая прогрессия.
Из интерфейса:
Δ = -1% (минус учитывает понижение цены). P1=2998.09 - верхняя граница, P27=нижняя граница.
Расчитано по формулам:
n=27 (корзины), m= 100000/27 (алокация на корзину), eth1=m1/P1 (кол-во эфира, купленного в 1-й корзине по цене P1, a eth27=m27/P27 (кол-во эфира купленного в последней 27-й.
Суммарно мы купили 38,126394 eth, путем простого сложения по 27 корзинам. Чтобы получить средюю Pсредняя цена, нужно поделить 100000/38,126394 eth.
В чатах среднюю считали как (P1+P27)/2 или как SQRT(P1хP27). И то и то неправильно, но работает на мелком шаге цены Δ. Вот пруф этого:
До 0,1% можно не заморачиваться, но уже при 5% (новые пулы или пулы с экзотикой) получились серьезные несовпадения.
Откуда вообще взялись (P1+P27)/2 или SQRT(P1хP27)?
Они являются мерами центральной тенденции (P1+P27)/2 - для арифметической прогрессии, SQRT(P1хP27) - для геометрической прогрессии. Если взять произвольный элемент прогрессии и равноудаленные от него члены, отстоящие на к элементов влево и вправо, то будут соблюдаться формулы, которые выражают сущность этих прогрессий
Нетрудно видеть, что в примере Pср геометр =2630,89, а 14-й элемент как мера центральной тенденции также равен P14=2630,89.
Поскольку ценовой ряд P, состоящий из цен в корзинах, есть геометрическая прогрессия, то правильнее брать среднее геометрическое как квадратный корень Pср геометр=SQRT(P1хP27)=SQRT(P2хP26)=...=SQRT(P13хP15). Из интерфейса нам ведомы только P1 и P27, поэтому их и используют.
Если мы заранее ищем среднюю цену покупки эфира, а она отличается от среднеарифметической цен границ и среднегеометрического цен границ (а на большом Δ очень сильно), то правильно считать среднюю Pсредняя истинная как 100000/38,126394 eth.
Можно считать в эксель, растянув все корзины в экселе как в примере, а можно посчитать суммарное кол-во эфира по формуле, а затем размещенную в пул сумму в usdc разделить на найденное по формуле суммарное значение эфира.
Вот как это рассчитать по формуле.
Прежде рассмотрим ряд эфира, который куплен в корзинах, в штуках:
eth1, eth2, eth3,...,eth27. Математически он эквивалентен следующему ряду, который также представляет собой геометрическую прогрессию:
m1/P1, m2/P2, m3/P3,..., m27/P27 или
m1/P1, (m2/P1)х1/(1+Δ), (m3/P1)х1/(1+Δ)^2,..., (m27/P1)х1/(1+Δ)^26, где знаменатель геометр. прогрессии q=1/(1+Δ)
Сумма S этого ряда и будет означать купленное количество эфира по всем 27 корзинам. Так как m - одно и то же, то:
S=m(1/P1+(1/P1)xq+(1/P1)xq^2+...+(1/P1)хq^26).
Посчитаем сумму по формуле:
S27=m/P1 х [1-(1/(1+Δ))^27] / [1-1/(1+Δ)], где
m=3703.70, P1=2998.09, а Δ=-1%
Получим тот же результат общего количества eth 38,126394
При предоставлении ликвидности по нижней границе (eth будет продаваться лесенкой по 27 корзинам) рассуждения аналогичны.
Небольшие сложности представляет случай внесения ликвидности сразу в 2-х токенах. Тогда текущая корзина заполняется 50х50 в долларовом выражении в 2-х токенах и в этом смысле алокация m по обе стороны от активной корзины уточняется на алокацию токенов на текущую корзину.