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) реализация ончейн-стакана сталкивается с двумя фундаментальными ограничениями:

  • Стоимость газа: Каждая отмена или обновление лимитного ордера требует уплаты транзакционной комиссии.
  • Время блока: Задержка между блоками делает невозможным мгновенное обновление котировок при высокочастотной торговле (HFT).
  • Automated Market Maker (AMM) элегантно решил эту проблему: смарт-контракт объединяет пулы из двух или более токенов, позволяя любому пользователю мгновенно совершить обмен по заранее известной математической формуле.

    # 2. Математика Constant Product AMM: Формула x \cdot y = k

    Базовая модель децентрализованного обмена, популяризированная Uniswap v2, базируется на инварианте постоянного произведения:

    x \cdot y = k

    Где:

  • x — количество резервов первого токена (например, ETH) в смарт-контракте пула.
  • y — количество резервов второго токена (например, USDC).
  • k — постоянный математический инвариант пула, который должен оставаться неизменным до и после сделки (без учета торговой комиссии).
  • Ценообразование в пуле:

    Спотовая маржинальная цена токена X относительно токена Y выражается простым соотношением резервов:

    Price(X) = \frac{y}{x}

    Расчет объема при свопе:

    Если трейдер вносит \Delta x токенов X, чтобы получить \Delta y токенов Y, смарт-контракт вычисляет результат из уравнения:
    (x + \Delta x) \cdot (y - \Delta y) = k
    \Delta y = y - \frac{k}{x + \Delta x} = \frac{y \cdot \Delta x}{x + \Delta x}

    Чем больше размер входящего ордера \Delta x относительно общего объема резервов пула x, тем сильнее фактическая цена исполнения отклоняется от спотовой — это явление называется проскальзыванием цены (Price Slippage).


    # 3. Эволюция: Концентрированная ликвидность Uniswap v3 и v4

    В классическом пуле Uniswap v2 ликвидность распределялась по всему ценовому диапазону от 0 до \infty. В результате более 99% капитала оставалось незадействованным на текущих рыночных отметках.

    В Uniswap v3 была внедрена концепция концентрированной ликвидности (Concentrated Liquidity):

  • Поставщик ликвидности (LP) выбирает конкретный целевой диапазон цен [P{a}, P{b}].
  • Внутри этого диапазона капитал работает с кредитным плечом эффективности (до сотен раз выше v2), генерируя многократно больше комиссионных сборов на каждый вложенный доллар.
  • Риск диапазона (Out-of-range): Если рыночная цена выходит за пределы диапазона [Pa, Pb], позиция на 100% конвертируется в один обесценивающийся токен и перестает приносить торговые комиссии до возвращения цены в коридор.

  • # 4. Математика Непостоянных Потерь (Impermanent Loss)

    Поставка ликвидности в пул сопряжена с фундаментальным финансовым риском — Impermanent Loss (IL).

    Непостоянные потери (IL) — это мера недополученной прибыли при предоставлении ликвидности в AMM-пул по сравнению с пассивным удержанием тех же токенов на кошельке (HODL) при изменении их относительного ценового коэффициента.

    Точная формула Impermanent Loss:

    Если цена актива изменилась в r раз (r = \frac{P{new}}{P{initial}}), процент потерь вычисляется по формуле:

    IL(r) = \frac{2 \cdot \sqrt{r}}{1 + r} - 1

    Таблица масштаба потерь при изменении цены:

    📊 Таблица данных ↔ Прокрутите вправо
    Изменение цены актива ($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. Практические стратегии управления ликвидностью для трейдера

  • Коррелированные пулы для стабильной доходности: Пулы стейблкоинов (USDC/USDT) или LST-деривативов (ETH/stETH) обладают околонулевым риском IL, так как активы привязаны к одной стоимости.
  • Динамический ребалансинг диапазонов: В трендовом рынке на волатильных парах (BTC/USDT) используйте широкие диапазоны (\pm 30-50\%) для непрерывного сбора комиссий.
  • Защита от сэндвич-атак MEV: Устанавливайте максимальный порог допустимого проскальзывания (Slippage Tolerance) не более 0.1 - 0.5\% при свопах на крупных DEX.
  • Интегрируйте анализ ликвидности с инструментарием Bitcoin Compass Pro:

  • Контролируйте волатильность и объемы основных пар в Воч-листе.
  • Оценивайте допустимый объем позиции и защитные стоп-приказы через Калькулятор риска.
  • Анализируйте ончейн-активность и дисбалансы книги ордеров в Торговом терминале.

  • # 6. Алгоритмическая реализация и программный модуль (Python)

    Ниже представлен Python-класс AMMLiquidityEngine, рассчитывающий результат свопа по формуле постоянного произведения, ценовое проскальзывание и точные непостоянные потери:

    PYTHON
    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 позволяет не только эффективно зарабатывать на предоставлении ликвидности, но и совершать крупные торговые обмены с минимальным проскальзыванием.

    Главные правила:

  • Оценивайте отношение накопленных комиссий (Fee APR) к величине IL.
  • Для минимизации проскальзывания используйте пулы с максимальной глубиной ликвидности.
  • Контролируйте рынок в реальном времени с помощью Торгового терминала и Калькулятора риска на платформе Bitcoin Compass Pro.