第4章:无常损失全解
4.1 什么是无常损失?
无常损失,英文叫 Impermanent Loss。说白了,就是你提供流动性后,币价波动带来的账面亏损。
我刚开始做 DeFi 时,对这个概念理解不深。有一次在 Uniswap V2 上给 ETH/USDC 池子加了 10 万美金。结果 ETH 涨了 30%,我兴冲冲去撤池子,发现收益还不如直接拿着 ETH 不动。嗯,那次教训挺深刻的。
为什么叫「无常」?因为如果你不撤出流动性,这个损失只是账面上的。一旦币价回到原来的位置,损失就消失了。但如果你在币价波动后撤出,损失就变成「永久」的了。
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 = 新价格 / 旧价格。
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% | 接近腰斩 |
4.4 知识体系图
下面这张图,是我自己总结的无常损失知识框架。你看一眼就能明白整个逻辑链条:
4.5 实战中的避坑建议
做了这么多年 DeFi,我总结了几条铁律:
- 稳定币对(USDC/DAI):无常损失几乎为零,适合大资金。我一般把 60% 的仓位放这里。
- 主流币对(ETH/USDC):日波动 5% 以内时,手续费能覆盖损失。适合中等仓位。
- 山寨币对:除非你特别看好,否则别碰。我曾经吃过亏,现在只敢用小仓位试水。
- 单边行情:如果判断币价会单边上涨,不如直接买现货。做市是给双向波动准备的。
嗯,无常损失这块就讲这么多。记住一句话:做市不是无风险的,无常损失是你必须交的学费。但只要你理解了它,就能控制它。
公众号:蓝海资料掘金营,微信deep3321