做市不是"躺着赚钱"。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
考虑价格从 变为 ,比率 。恒定乘积池中,LP 的资产数量(做市策略)为:
而"什么都不做"的 HODL 策略始终持有最初比例的 。
无常损失(以 Y 计价,做市价值 / HODL 价值 - 1):
推导思路:
- 设初值 (几何平均),初始价格 。
- 价格变化后,做市组合价值(以 Y 计价):
- HODL 价值:
- 代入 并化简即得上式。IL 恒 ,只有 时为 0。
19.5.2 IL 的数值特性
| 价格比率 | 价格变化 | IL |
|---|---|---|
| 1.0 | 0% | 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 只取决于 ,与涨跌方向无关——涨一倍和跌一半的 IL 相同(都是 ~5.7%)。
19.5.3 手续费收益的补偿模型
LP 的总收益 = 手续费累计 - IL。Uniswap V2 每笔 0.3% 手续费留存池中,k 增长即 LP 资产增值。
年化手续费收益估算:
- 若一个池子 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 = ,只取决于价格比率、与涨跌方向对称;② 做市是否划算 = 手续费 APR 与 IL + 波动风险的赛跑;③ 稳定币对是"低波动低IL"的稳健生息选择,高波动币对是"高 APR 高 IL"的赌博。
, 前往 → ch19 总结 |*
评论
0评论加载中…