教程区块链区块链技术ch1919.5 DEX 经济:无常损失、手续费与做市策略

本页目录

做市不是"躺着赚钱"。LP 的收益(手续费)与成本(无常损失、价格风险)之间有一条精密的数学平衡。本节用量化方法回答:什么情况下做市划算,什么情况下不如持有?


19.5.1 无常损失的完整推导

flowchart TD
    A[LP 注入 x0, y0] --> B[价格变动 ρ = P1/P0]
    B --> C{做市 vs 持有}
    C -->|做市| D[做市价值<br/>x_mm = L√ρ, y_mm = L/√ρ]
    C -->|HODL| E[持有价值<br/>x0, y0 不变]
    D --> F[IL 机会成本<br/>IL = 2√ρ/(1+ρ) - 1 < 0]
    E --> F
    F --> G{累计手续费 > |IL| ?}
    G -->|是| H[净赚:做市优于持有]
    G -->|否| I[净亏:不如直接持有]
    style F fill:#ffcdd2
    style H fill:#c8e6c9
    style I fill:#ffccbc

考虑价格从 P0P_0 变为 P1P_1,比率 ρ=P1/P0\rho = P_1/P_0。恒定乘积池中,LP 的资产数量(做市策略)为:

xmm=Lρ,ymm=Lρx_{\text{mm}} = L\sqrt{\rho}, \qquad y_{\text{mm}} = \frac{L}{\sqrt{\rho}}

而"什么都不做"的 HODL 策略始终持有最初比例的 x0,y0x_0, y_0

无常损失(以 Y 计价,做市价值 / HODL 价值 - 1):

IL=2ρ1+ρ1\text{IL} = \frac{2\sqrt{\rho}}{1+\rho} - 1

推导思路:

  1. 设初值 L=x0y0L = \sqrt{x_0 y_0}(几何平均),初始价格 P0=y0/x0P_0 = y_0/x_0
  2. 价格变化后,做市组合价值(以 Y 计价):
Vmm=xmmP1+ymm=LρP0ρ+LρV_{\text{mm}} = x_{\text{mm}} \cdot P_1 + y_{\text{mm}} = L\sqrt{\rho} \cdot P_0\rho + \frac{L}{\sqrt{\rho}}
  1. HODL 价值:
Vhodl=x0P1+y0=x0P0ρ+y0V_{\text{hodl}} = x_0 P_1 + y_0 = x_0 P_0\rho + y_0
  1. 代入 x0=L/P0,y0=LP0x_0 = L/\sqrt{P_0}, y_0 = L\sqrt{P_0} 并化简即得上式。IL 恒 0\le 0,只有 ρ=1\rho=1 时为 0。

19.5.2 IL 的数值特性

价格比率 ρ\rho价格变化IL
1.00%0.00%
1.25+25%0.60% 损失
1.5+50%2.02% 损失
2.0+100%5.72% 损失
3.0+200%13.40% 损失
4.0+300%20.00% 损失
0.5-50%5.72% 损失(对称)

对称性:IL 只取决于 ρ=P1/P0\rho = P_1/P_0,与涨跌方向无关——涨一倍和跌一半的 IL 相同(都是 ~5.7%)。


19.5.3 手续费收益的补偿模型

LP 的总收益 = 手续费累计 - IL。Uniswap V2 每笔 0.3% 手续费留存池中,k 增长即 LP 资产增值。

年化手续费收益估算:

APRfee=volume_fee_pct×VolumeTVL×Fee%0.3%\text{APR}_{\text{fee}} = \frac{\text{volume\_fee\_pct} \times \text{Volume}}{\text{TVL}} \times \frac{\text{Fee\%}}{0.3\%}
  • 若一个池子 TVL = \10M,日交易量 \2M:日手续费 = 2M x 0.3% = \$6000,年化 ≈ 6000 x 365 / 10M ≈ 21.9% APR
  • 若同时池内价格波动导致 IL > 21.9%,LP 整体仍亏损。

决策法则:当 手续费APR > IL + 波动风险溢价 时,做市优于 HODL。高波动币对(如 meme 币)看似手续费高,但 IL 吞噬更快


19.5.4 IL 量化引擎(纯 TS)

typescript
// 无常损失量化:从零实现(纯 TS + BigInt,无外部库)
// IL = 2*sqrt(rho)/(1+rho) - 1,rho = P1/P0
// 用定点 BigInt 计算 sqrt(牛顿法),无浮点误差
function sqrtBabylon(x: bigint): bigint {
  if (x <= 0n) return 0n;
  let z = x >> 1n;              // 初始猜测
  for (let i = 0n; i < 64n; i++) {
    const next = (z + x / z) >> 1n;
    if (next === z || next === z - 1n || next === z + 1n) break;
    z = next;
  }
  return z;
}

function impermanentLoss(rhoBps: bigint): number {
  // rho 以 1e4 定点传入(如 20000 = 2.0)
  const SCALE = 10n ** 18n;
  const rho = (rhoBps * SCALE) / 10000n; // 转 1e18 定点
  const sqrtRho = sqrtBabylon(rho * SCALE); // sqrt(rho) * 1e18
  const numerator = (2n * sqrtRho) % SCALE; // 先取小数部分(简化演示)
  const num = 2n * sqrtRho;
  const den = SCALE + rho;
  // IL = 2*sqrt(rho)/(1+rho) - 1,用定点精确计算
  const ilScaled = (num * SCALE) / den - SCALE;
  return Number(ilScaled) / Number(SCALE);
}

// 验证:rho = 2(价格翻倍)=> IL ≈ -0.0572
const il2x = impermanentLoss(20000n);
console.log("价格翻倍 IL =", (il2x * 100).toFixed(2) + "%", "(理论 -5.72%)");

// 验证:rho = 1 => IL = 0
const il1x = impermanentLoss(10000n);
console.log("价格不变 IL =", (il1x * 100).toFixed(2) + "%", "(理论 0%)");

运行结果:价格翻倍 IL = -5.72%,价格不变 IL = 0%——与理论公式完全吻合。


19.5.5 做市策略实操建议

场景建议
高波动币对(新币/meme)慎入;IL 极高,除非手续费 APR 惊人且你愿意承担
稳定币对(USDC/USDT/DAI)IL ≈ 0,最适合作底仓生息
波幅中等(ETH/稳定币)可做;用无常损失计算器预先评估
无常损失对冲可用期权/永续合约对冲价格风险(复杂,进阶)
分散策略多个池子分散,勿 All-in 单一高波动池

19.5.6 关键认知

① IL = 2ρ/(1+ρ)12\sqrt{\rho}/(1+\rho)-1,只取决于价格比率、与涨跌方向对称;② 做市是否划算 = 手续费 APR 与 IL + 波动风险的赛跑;③ 稳定币对是"低波动低IL"的稳健生息选择,高波动币对是"高 APR 高 IL"的赌博。


, 前往 → ch19 总结 |*

评论

0

评论加载中…

发表评论

0/2000