关于 impermanent-loss
面向 DeFi 流动性提供者的无常损失分析技能,涵盖恒定乘积池与集中流动性池,并提供计算、情景模拟和费用盈亏平衡方法。
主要功能
- 01计算恒定乘积池无常损失
- 02估算集中流动性放大效应
- 03比较费用收入与无常损失
- 04通过蒙特卡洛模拟价格路径
- 05基于历史价格进行分析
- 06提供计算与情景建模脚本
适用场景
- 01评估提供流动性的潜在损失
- 02比较 LP 费用与无常损失
- 03模拟不同价格路径下的头寸结果
- 04分析历史期间的流动性头寸表现
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ agiprolabs/ claude-trading-skills --skill impermanent-loss安装后在 Claude Code 中输入/impermanent-loss确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/breakeven_analysis.mdil_formulas.mdscripts/il_calculator.pyil_scenario_modeler.py详细介绍
无常损失 — 计算、建模与盈亏平衡分析
无常损失(IL)是相较于单纯持有代币,为自动做市商(AMM)提供流动性所付出的成本。当你将代币存入流动性池后,AMM 会随着价格变动持续重新平衡你的头寸。这种重新平衡总会对你不利——卖出赢家、买入输家——导致最终价值低于单纯持有原始代币的价值。
为什么称为“无常”?
IL 被称为“无常”,是因为它只有在你提取资产时才会成为实际损失。如果价格回到最初的比例,IL 就会归零。然而,现实中价格很少会恰好回到原位,所以 IL 通常确实存在。
关键见解
IL 取决于价格比例的变化,而非绝对价格。代币价格从 $1 涨到 $2 所产生的 IL,与从 $100 涨到 $200 相同——两者的价格比例都变化了 2 倍。方向也无关紧要:上涨 2 倍和下跌至 0.5 倍,产生的 IL 幅度相同。
恒定乘积 IL 公式
对于标准的 x * y = k AMM(Raydium 标准版、Orca 旧版):
IL = 2 * sqrt(r) / (1 + r) - 1
其中 r = P_new / P_initial(价格比例)。
关键价格比例下的 IL
| 价格变化 | 比例(r) | IL |
|---|---|---|
| -75% | 0.25 | -5.72% |
| -50% | 0.50 | -5.72% |
| -25% | 0.75 | -0.60% |
| 0% | 1.00 | 0.00% |
| +25% | 1.25 | -0.60% |
| +50% | 1.50 | -2.02% |
| +100% (2x) | 2.00 | -5.72% |
| +200% (3x) | 3.00 | -13.40% |
| +400% (5x) | 5.00 | -25.46% |
| +900% (10x) | 10.00 | -42.54% |
请注意其对称性:上涨 2 倍(r=2.0)和下跌至 0.5 倍(r=0.5)都会产生 -5.72% 的 IL。
集中流动性(CLMM)的 IL 放大效应
集中流动性做市商(Orca Whirlpools、Raydium CLMM、Meteora DLMM)允许 LP 在价格区间 [P_lower, P_upper] 内集中提供流动性。这会同时放大手续费收入和 IL。
集中系数
concentration_factor = 1 / (1 - sqrt(P_lower / P_upper))
对于当前价格上下 ±10% 的区间:集中系数 ≈ 10 倍。
CLMM 的 IL 表现
- 价格在区间内:与恒定乘积 IL 相比,IL 会按集中系数放大。
- 价格超出区间:头寸将全部转换为表现较差的资产。这是该方向上可能出现的最大 IL——你只持有贬值的代币。
IL_clmm ≈ IL_constant_product * concentration_factor
此近似适用于小幅价格变动。对于大幅变动或接近区间边界的价格,请使用完整的 CLMM 公式(参见 references/il_formulas.md)。
示例:CLMM 与恒定乘积
SOL 价格为 $150,LP 设置的区间为上下 ±20%($120–$180):
| 情景 | 恒定乘积 IL | CLMM IL(±20%) |
|---|---|---|
| SOL → $180 | -0.62% | ~-3.1% |
| SOL → $200 | -1.03% | 100% SOL(超出区间) |
| SOL → $120 | -1.80% | ~-9.0% |
| SOL → $100 | -3.42% | 100% USDC(超出区间) |
IL 与手续费:盈亏平衡分析
任何 LP 面临的核心问题是:赚取的手续费是否超过产生的 IL?
Net Position = LP_value + accrued_fees - hold_value
当 accrued_fees > IL 时即可盈利。
盈亏平衡费率
对于恒定乘积池,每个周期的预期 IL 约为:
expected_IL ≈ σ² / 8
其中,σ 是该周期对数收益率的标准差。这意味着:
| 日波动率(σ) | 预期日 IL | 盈亏平衡所需的最低日费率 |
|---|---|---|
| 1% | 0.001% | 0.001% |
| 3% | 0.011% | 0.011% |
| 5% | 0.031% | 0.031% |
| 10% | 0.125% | 0.125% |
| 20% | 0.500% | 0.500% |
LP 的每日费用收入:
daily_fee_income = (deposit / TVL) * daily_volume * fee_rate
如需了解完整的盈亏平衡框架,请参阅 references/breakeven_analysis.md。
随时间模拟 IL
蒙特卡洛模拟
使用几何布朗运动(GBM)模拟许多随机价格路径:
import numpy as np
def simulate_price_path(
initial_price: float,
daily_vol: float,
days: int,
drift: float = 0.0,
) -> np.ndarray:
"""Simulate a price path using geometric Brownian motion."""
dt = 1.0 # daily steps
log_returns = np.random.normal(
(drift - 0.5 * daily_vol**2) * dt,
daily_vol * np.sqrt(dt),
days,
)
prices = initial_price * np.exp(np.cumsum(log_returns))
return np.insert(prices, 0, initial_price)
对每条路径,计算每个时间步的 IL 和累计赚取的费用。完成 N 次模拟后,分析结果分布。
完整的蒙特卡洛模拟请参见 scripts/il_scenario_modeler.py。
历史分析
使用实际的 OHLCV 价格数据,计算过去某段时间内的 IL。这能提供更贴近现实(但基于历史数据)的估算。
IL 缓解策略
1. 稳定币交易对
USDC/USDT 等交易对的价格比几乎不变,因此 IL 接近于零。费用收入几乎就是纯利润。
2. 高相关性交易对
SOL/mSOL 或 ETH/stETH 等交易对走势相近,因此价格比保持在 1.0 附近。IL 极小。
3. 更宽的 CLMM 范围
更宽的范围会降低集中系数,从而减少 IL,但每单位资金的费用收入也会降低。
4. 主动管理范围
监控价格,并在价格接近边界时重新调整 CLMM 范围。这样可以降低价格完全超出范围的风险。
5. 选择费率档位
较高的费率档位(例如,1% 而非 0.3%)可以补偿波动性较高的交易对所带来的更高 IL。应根据预期波动率选择费率档位。
何时可以接受 IL
- 高交易量池:费用收入显著高于预期 IL。
- 稳定或高相关性交易对:IL 从结构上看极小。
- 代币累积策略:无论如何,你都希望累积价格更低的代币。
- 较短持有期限并主动管理:费用会复利增长,而且你会在大幅波动发生前重新调整仓位。
何时应避免提供 LP 流动性
- 低交易量、高波动性:IL 占主导,费用收入不足以弥补。
- 趋势市场:强劲的单向波动会造成大幅且持续的 IL。
- 缺乏流动性的新代币:价格可能在数小时内上涨 10 倍以上,导致灾难性的 IL。
- 价差较大的池:交易量低,费用收入无法弥补任何 IL。
相关技能
- lp-math:AMM 机制和储备计算,是 IL 公式的基础。
- yield-analysis:将扣除 IL 后的 LP 收益与其他 DeFi 机会进行比较。
- liquidity-analysis:评估池深度和交易量,以估算费用收入。
- volatility-modeling:预测 IL 建模所需的波动率输入。
文件
参考资料
references/il_formulas.md— 恒定乘积池、CLMM 和多资产池的完整 IL 推导references/breakeven_analysis.md— 费用与 IL 的盈亏平衡框架及实用工具
脚本
scripts/il_calculator.py— 计算各种池类型在任意价格变动下的 IL,并提供表格和比较结果scripts/il_scenario_modeler.py— 对 LP 仓位随时间进行蒙特卡洛模拟,并模拟费用和 IL