第4章:无常损失全解

4.1 什么是无常损失?

无常损失,英文叫 Impermanent Loss。说白了,就是你提供流动性后,币价波动带来的账面亏损。

我刚开始做 DeFi 时,对这个概念理解不深。有一次在 Uniswap V2 上给 ETH/USDC 池子加了 10 万美金。结果 ETH 涨了 30%,我兴冲冲去撤池子,发现收益还不如直接拿着 ETH 不动。嗯,那次教训挺深刻的。

为什么叫「无常」?因为如果你不撤出流动性,这个损失只是账面上的。一旦币价回到原来的位置,损失就消失了。但如果你在币价波动后撤出,损失就变成「永久」的了。

核心结论:无常损失是 AMM 自动做市机制带来的必然结果。你赚的做市手续费,本质上是在补偿这个损失。

4.2 公式推导:从零开始

我们拿最经典的 Uniswap V2 恒定乘积公式来推。假设池子里有两种代币 X 和 Y,数量分别是 x 和 y。

核心公式就一个:

x * y = k  (k 是常数)

你存入流动性时,按比例存入。假设你存入了 Δx 和 Δy,使得池子占比为 p%。

你的资产价值 V 可以写成:

V = p * (x * P_x + y * P_y)

其中 P_x 和 P_y 分别是 X 和 Y 的价格。因为 x * y = k,且价格比 P_x / P_y = y / x(这个推导我跳过,感兴趣可以自己算),所以:

V = p * (x * P_x + y * P_y)
  = p * (x * P_x + (k/x) * P_y)

假设初始价格比是 r = y/x。如果价格变化到 r',那么新的 x' 和 y' 满足:

x' = sqrt(k / r')
y' = sqrt(k * r')

代入后,你的资产价值 V' 和直接持有价值 V_hold 的比值就是无常损失因子:

IL = (V' - V_hold) / V_hold

经过化简(我当年推了半小时),得到最终公式:

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

其中 r = 新价格 / 旧价格。

我的经验:这个公式你不需要每次都手算。记住几个关键数字就行:价格翻倍时损失约 5.7%,价格涨 5 倍时损失约 25.5%。超过 10 倍波动,损失就奔着 50% 去了。

4.3 不同波动率下的损失模拟

我写了个简单的 Python 脚本,模拟不同价格变化下的无常损失。代码不长,但很实用:

import numpy as np

def impermanent_loss(price_ratio):
    """计算无常损失比例"""
    sqrt_r = np.sqrt(price_ratio)
    return (2 * sqrt_r / (1 + price_ratio)) - 1

# 模拟不同价格变化
price_changes = [0.5, 0.8, 0.9, 1.0, 1.1, 1.2, 1.5, 2.0, 3.0, 5.0, 10.0]

print("价格变化 | 无常损失")
print("-" * 30)
for r in price_changes:
    il = impermanent_loss(r)
    print(f"{r:>6.1f}x  | {il*100:>6.2f}%")

运行结果:

价格变化 无常损失 说明
0.5x(跌一半) -5.72% 损失和涨一倍对称
0.8x -1.12% 小幅波动影响不大
1.0x 0.00% 价格没变,无损失
1.2x(涨20%) -0.83% 手续费能覆盖
2.0x(翻倍) -5.72% 经典案例
5.0x -25.46% 损失开始明显
10.0x -42.85% 接近腰斩
避坑指南:我曾经在 2021 年牛市末期,给一个山寨币/ETH 池子加了流动性。那个山寨币从 0.1 美金涨到 2 美金,我心想赚翻了。结果撤池子时发现,无常损失吃掉了大部分收益。后来我学乖了:波动率越大的币对,无常损失越恐怖。

4.4 知识体系图

下面这张图,是我自己总结的无常损失知识框架。你看一眼就能明白整个逻辑链条:

无常损失知识体系 无常损失 定义与原理 公式推导 损失模拟 AMM 恒定乘积机制 账面损失 vs 实际损失 手续费补偿机制 x * y = k 推导 IL = 2√r/(1+r) - 1 关键数值记忆法 Python 模拟脚本 不同波动率对比表 实际案例复盘 核心:波动越大,损失越大;手续费是缓冲垫

4.5 实战中的避坑建议

做了这么多年 DeFi,我总结了几条铁律:

  • 稳定币对(USDC/DAI):无常损失几乎为零,适合大资金。我一般把 60% 的仓位放这里。
  • 主流币对(ETH/USDC):日波动 5% 以内时,手续费能覆盖损失。适合中等仓位。
  • 山寨币对:除非你特别看好,否则别碰。我曾经吃过亏,现在只敢用小仓位试水。
  • 单边行情:如果判断币价会单边上涨,不如直接买现货。做市是给双向波动准备的。
我的习惯:每次加池子前,我都会用上面的 Python 脚本跑一遍。看看如果价格波动 20%、50%、100%,我的损失是多少。再对比一下预期的手续费收益。如果手续费收益覆盖不了损失,我就不做。

嗯,无常损失这块就讲这么多。记住一句话:做市不是无风险的,无常损失是你必须交的学费。但只要你理解了它,就能控制它。


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