DEX и Пулы Ликвидности от А до Я: как устроен Automated Market Maker (AMM) и расчет Impermanent Loss
Децентрализованные биржи (DEX) произвели революцию в мировой финансовой системе, заменив централизованных посредников, кастодиальные счета и книги заявок (Order Books) на автономные смарт-контракты Automated Market Maker (автоматических маркет-мейкеров, AMM). Сегодня протоколы уровня Uniswap, Curve и PancakeSwap обрабатывают миллиардные ежедневные объемы торгов без необходимости регистрировать аккаунты или доверять свои приватные ключи третьим лицам.
В этом фундаментальном руководстве мы разберем математическую модель формулы постоянного произведения x \cdot y = k, механику концентрированной ликвидности в Uniswap v3/v4, влияние проскальзывания цены (Price Slippage), формулу расчета непостоянных потерь (Impermanent Loss) и предоставим рабочий Python-калькулятор для поставщиков ликвидности.
# 1. Архитектура DEX: почему книги ордеров уступили место AMM
В традиционных финансовых системах (и на централизованных криптобиржах вроде Binance или Bybit) торговля строится вокруг книги лимитных ордеров (Central Limit Order Book, CLOB). Маркет-мейкеры постоянно выставляют и отменяют тысячи заявок в секунду.
В публичных блокчейнах (Ethereum, Arbitrum, Solana) реализация ончейн-стакана сталкивается с двумя фундаментальными ограничениями:
Automated Market Maker (AMM) элегантно решил эту проблему: смарт-контракт объединяет пулы из двух или более токенов, позволяя любому пользователю мгновенно совершить обмен по заранее известной математической формуле.
# 2. Математика Constant Product AMM: Формула x \cdot y = k
Базовая модель децентрализованного обмена, популяризированная Uniswap v2, базируется на инварианте постоянного произведения:
Где:
x — количество резервов первого токена (например, ETH) в смарт-контракте пула.y — количество резервов второго токена (например, USDC).k — постоянный математический инвариант пула, который должен оставаться неизменным до и после сделки (без учета торговой комиссии).Ценообразование в пуле:
Спотовая маржинальная цена токена X относительно токена Y выражается простым соотношением резервов:
Расчет объема при свопе:
Если трейдер вносит\Delta x токенов X, чтобы получить \Delta y токенов Y, смарт-контракт вычисляет результат из уравнения:
Чем больше размер входящего ордера \Delta x относительно общего объема резервов пула x, тем сильнее фактическая цена исполнения отклоняется от спотовой — это явление называется проскальзыванием цены (Price Slippage).
# 3. Эволюция: Концентрированная ликвидность Uniswap v3 и v4
В классическом пуле Uniswap v2 ликвидность распределялась по всему ценовому диапазону от 0 до \infty. В результате более 99% капитала оставалось незадействованным на текущих рыночных отметках.
В Uniswap v3 была внедрена концепция концентрированной ликвидности (Concentrated Liquidity):
[P{a}, P{b}].[Pa, Pb], позиция на 100% конвертируется в один обесценивающийся токен и перестает приносить торговые комиссии до возвращения цены в коридор.# 4. Математика Непостоянных Потерь (Impermanent Loss)
Поставка ликвидности в пул сопряжена с фундаментальным финансовым риском — Impermanent Loss (IL).
Непостоянные потери (IL) — это мера недополученной прибыли при предоставлении ликвидности в AMM-пул по сравнению с пассивным удержанием тех же токенов на кошельке (HODL) при изменении их относительного ценового коэффициента.
Точная формула Impermanent Loss:
Если цена актива изменилась в r раз (r = \frac{P{new}}{P{initial}}), процент потерь вычисляется по формуле:
Таблица масштаба потерь при изменении цены:
| Изменение цены актива ($r$) | Отклонение цены | Непостоянные потери ($IL$) |
|---|---|---|
| **1.25x** | +25% | **-0.6%** |
| **1.50x** | +50% | **-2.0%** |
| **2.00x** | +100% (рост в 2 раза) | **-5.7%** |
| **3.00x** | +200% (рост в 3 раза) | **-13.4%** |
| **5.00x** | +400% (рост в 5 раз) | **-25.5%** |
Потери компенсируются аккумулированными торговыми комиссиями пула (Fee APY). Если годовая доходность комиссий пула превышает величину IL, поставщик ликвидности фиксирует чистую прибыль (Net Profit).
# 5. Практические стратегии управления ликвидностью для трейдера
IL, так как активы привязаны к одной стоимости.\pm 30-50\%) для непрерывного сбора комиссий.0.1 - 0.5\% при свопах на крупных DEX.Интегрируйте анализ ликвидности с инструментарием Bitcoin Compass Pro:
# 6. Алгоритмическая реализация и программный модуль (Python)
Ниже представлен Python-класс AMMLiquidityEngine, рассчитывающий результат свопа по формуле постоянного произведения, ценовое проскальзывание и точные непостоянные потери:
import math
from typing import Dict
class AMMLiquidityEngine:
# Модуль расчета AMM пулов и Impermanent Loss
@staticmethod
def calculate_swap(
reserve_x: float,
reserve_y: float,
amount_in_x: float,
fee_percent: float = 0.3
) -> Dict[str, float]:
# Расчет свопа токена X на токен Y с учетом комиссии
fee_multiplier = 1.0 - (fee_percent / 100.0)
amount_in_with_fee = amount_in_x * fee_multiplier
# Инвариант x * y = k
k = reserve_x * reserve_y
new_reserve_x = reserve_x + amount_in_with_fee
new_reserve_y = k / new_reserve_x
amount_out_y = reserve_y - new_reserve_y
initial_price = reserve_y / reserve_x
execution_price = amount_out_y / amount_in_x if amount_in_x > 0 else 0
slippage_pct = ((initial_price - execution_price) / initial_price) * 100 if initial_price > 0 else 0
return {
"amount_out_y": round(amount_out_y, 4),
"execution_price": round(execution_price, 4),
"slippage_percent": round(slippage_pct, 2),
"new_reserve_x": round(new_reserve_x, 2),
"new_reserve_y": round(new_reserve_y, 2)
}
@staticmethod
def calculate_impermanent_loss(price_ratio: float) -> Dict[str, float]:
# Расчет Impermanent Loss при относительном изменении цены r = P_new / P_old
if price_ratio <= 0:
raise ValueError("Коэффициент изменения цены должен быть положительным.")
il_decimal = (2.0 * math.sqrt(price_ratio)) / (1.0 + price_ratio) - 1.0
il_percent = il_decimal * 100.0
return {
"price_ratio": round(price_ratio, 4),
"impermanent_loss_percent": round(il_percent, 2),
"portfolio_vs_hodl_pct": round((1.0 + il_decimal) * 100.0, 2)
}
if __name__ == "__main__":
# Пример 1: Своп 5 ETH в пул с 100 ETH и 300,000 USDC
swap_res = AMMLiquidityEngine.calculate_swap(
reserve_x=100.0,
reserve_y=300000.0,
amount_in_x=5.0,
fee_percent=0.3
)
print(f"[*] Результат свопа: {swap_res}")
# Пример 2: Расчет потерь IL при удвоении цены токена (r = 2.0)
il_res = AMMLiquidityEngine.calculate_impermanent_loss(price_ratio=2.0)
print(f"[✓] Непостоянные потери (IL): {il_res}")
# Заключение
DEX и пулы ликвидности сформировали децентрализованную основу расчетов в криптовалюте. Понимание математики AMM и механики Impermanent Loss позволяет не только эффективно зарабатывать на предоставлении ликвидности, но и совершать крупные торговые обмены с минимальным проскальзыванием.
Главные правила:
IL.