第三章 无常损失深度解析

3.1 无常损失的本质

无常损失,英文叫 Impermanent Loss。说白了,就是你在 AMM 里做市时,因为价格波动导致的账面亏损。

为什么叫「无常」?因为只要你不撤单,这个损失就是浮动的。价格涨回来,损失就没了。但如果你在价格低点撤单,浮亏就变成了实亏。嗯,这里要注意——很多新手就是栽在这个「无常」二字上。

我在项目中遇到过一位朋友,他在 Uniswap V2 的 ETH/USDC 池子里放了 10 万美金。ETH 从 2000 涨到 3000,他兴冲冲地去算收益——结果发现,如果当初只是拿着不动,能赚 50%;但做市只赚了 30%。那 20% 的差额,就是无常损失。

核心结论: 无常损失不是真正的「损失」,而是「机会成本」。你赚少了,不等于亏了。

3.2 无常损失的计算公式

我们先从最简单的恒定乘积公式说起。AMM 的核心公式是:

x * y = k

其中 x 和 y 是两种资产的数量,k 是常数。

假设初始价格是 P₀,价格变为 P₁。那么无常损失的百分比公式是:

IL = (2 * √r) / (1 + r) - 1

其中 r = P₁ / P₀

这个公式怎么来的?我习惯从「持有 vs 做市」的对比来理解。

如果你持有不动,资产总价值是:

V_hold = x₀ * P₁ + y₀

如果你做市,资产总价值是:

V_pool = 2 * √(k * P₁)

无常损失就是两者的比值减 1:

IL = V_pool / V_hold - 1

代入化简后,就得到了上面的公式。

我的小技巧: 实际计算时,直接用 r 代入公式就行。比如价格翻倍(r=2),IL ≈ -5.7%。价格跌一半(r=0.5),IL 也是 -5.7%。对称的。

3.3 不同价格波动下的损失模拟

我们来看一组模拟数据。假设你投入了 1000 USDC 和 1 ETH,初始价格 1000 USDC/ETH。

价格变化 r 值 无常损失 实际感受
不变 1.0 0% 完美
涨 25% 1.25 -0.6% 几乎没感觉
涨 50% 1.5 -2.0% 有点心疼
翻倍 2.0 -5.7% 明显亏了
涨 4 倍 4.0 -20.0% 大出血
涨 10 倍 10.0 -42.9% 几乎腰斩

你想想看,价格翻倍才亏 5.7%,但涨 10 倍就亏了 42.9%。这说明什么?波动越大,无常损失越恐怖。

我曾经在测试网上跑过一个模拟脚本,把 BTC 从 3 万拉到 6 万再砸回 3 万。结果发现,做市商的最终收益,比持有者少了将近 12%。这还是没算手续费的情况。

3.4 无常损失的可视化

下面这张图是我用 SVG 画的,展示了无常损失随价格变化的曲线。你可以直观地看到,损失是非对称的——价格下跌和上涨带来的损失其实一样大。

无常损失 vs 价格变化率 价格变化率 (r = P₁/P₀) 0.1 0.5 1.0 2.0 10.0 0% -20% -40% -60% r=1.0, IL=0% r=2.0, IL≈-5.7% r=0.5, IL≈-5.7% 无常损失曲线

从图上你能看到,曲线在 r=1 处是 0,往两边对称下降。这就是为什么我常说:做市最怕的不是单边行情,而是剧烈波动。

3.5 如何对冲无常损失

好,问题来了:既然无常损失躲不掉,那怎么对冲?

我总结了几种实战方法,按推荐程度排序:

  1. 选择稳定币对池——比如 USDC/DAI,价格几乎不变,无常损失趋近于 0。但收益率也低。
  2. 使用单边流动性——像 Uniswap V3 那样,只在一个价格区间内提供流动性。波动超出区间,你就只持有一种资产,无常损失被锁定。
  3. 期权对冲——买入看跌期权保护下行风险,卖出看涨期权补贴做市收益。我在项目中试过,效果不错,但成本高。
  4. 永续合约对冲——在永续市场开反向仓位。比如你在 ETH/USDC 池做市,就开等量的 ETH 空单。价格涨,做市亏但空单赚;价格跌,做市赚但空单亏。两边抵消。
  5. 利用无常损失代币——像 Bancor 的 vBNT,或者一些项目提供的无常损失保险。但要注意,这些代币本身也有风险。
避坑指南: 我曾经在 2021 年用永续合约对冲,结果因为资金费率太高,一个月亏了 3% 的成本。对冲不是免费的,一定要算清楚账。

3.6 实战中的对冲策略

我个人最推荐的是「动态对冲」策略。具体做法是:

  • 每 6 小时检查一次价格变化
  • 如果价格波动超过 5%,就调整对冲仓位
  • 对冲比例控制在 50%-80%,留一些敞口吃手续费

举个例子。假设你在 ETH/USDC 池子里有 10 ETH 和 10000 USDC。当前 ETH 价格 2000 USDC。

# 伪代码示例
pool_eth = 10
pool_usdc = 10000
eth_price = 2000

# 计算无常损失敞口
il_exposure = pool_eth * eth_price * 0.5  # 50% 对冲

# 开空单
open_short(amount=il_exposure, leverage=1x)

# 每 6 小时检查
while True:
    new_price = get_eth_price()
    price_change = abs(new_price - eth_price) / eth_price
    
    if price_change > 0.05:
        # 重新计算并调整
        new_exposure = pool_eth * new_price * 0.5
        adjust_short(target=new_exposure)
        eth_price = new_price
    
    sleep(6 * 3600)

这个策略的优点是简单,缺点是资金利用率低。你想想看,50% 的对冲意味着你有一半的仓位被锁住了。

我的经验: 如果你做的是主流币对(ETH/USDC、WBTC/ETH),无常损失其实没那么可怕。手续费收入往往能覆盖 80% 以上的无常损失。真正要小心的是那些流动性差、波动大的山寨币对。

3.7 总结

无常损失是 AMM 做市的核心成本之一。它不是一个「损失」,而是一个「机会成本」。理解它的计算公式和变化规律,是设计做市策略的第一步。

对冲无常损失的方法很多,但没有银弹。你需要根据自己的资金规模、风险偏好和交易频率,选择最适合的方案。我个人建议:新手先从稳定币对开始,等熟悉了再尝试带对冲的策略。

记住一句话:做市不是无风险套利,而是风险管理。你能管好无常损失,就已经赢了一半。


公众号:蓝海资料掘金营,微信deep3321