坦白说,很多人第一次做DeFi流动性挖矿,关注点都放在APR上:年化30%、80%、甚至几百,看起来很诱人。但真正把钱放进去几天后,问题就来了:为什么池子显示赚了手续费和奖励,退出时却发现不如单纯持币?
这背后最常见的原因,就是无常损失。
我见过不少人把无常损失理解成“只有亏钱才会发生”,这个理解不准确。更准确地说,无常损失是:你提供流动性后的资产组合价值,相比“什么都不做、直接持有原资产”的机会成本差额。它可能被手续费和挖矿奖励覆盖,也可能被放大到让高APR失去意义。
这篇文章我会从原理讲起,给出无常损失计算方法、Python代码、常见对冲策略,以及我在实际项目中更看重的风控清单。重点不是背公式,而是让你能判断:这个池子到底值不值得进,应该怎么进,出了问题怎么退。
先把问题说清楚:无常损失不是“亏损”,而是相对收益损失
以最经典的恒定乘积AMM为例,比如Uniswap V2、PancakeSwap这类模型,池子满足:
x * y = kx和y分别代表两种代币的储备量,k是常数。假设你往ETH/USDC池子里提供流动性,当ETH价格上涨时,套利者会买走池子里的ETH、放入USDC,直到池内价格接近外部市场价格。
结果是什么?
你持有的ETH数量变少,USDC数量变多。价格上涨时你少拿了一部分ETH;价格下跌时你又多拿了一部分下跌资产。这就是AMM自动再平衡机制带来的代价。
对于50/50恒定乘积池,价格变化比例为r时,无常损失公式是:
IL = 2 * sqrt(r) / (1 + r) - 1这里的r是新价格 / 初始价格。
举个直观例子:
| 价格变化 | r | 无常损失约值 |
|---|---|---|
| 上涨25% | 1.25 | -0.62% |
| 上涨50% | 1.5 | -2.02% |
| 上涨100% | 2 | -5.72% |
| 下跌50% | 0.5 | -5.72% |
| 上涨400% | 5 | -25.46% |
这里有个坑要注意:无常损失对上涨和下跌是对称的。价格从1涨到2,和从1跌到0.5,幅度方向不同,但相对持币的损失比例一样。
不过,真实收益不能只看IL。完整结果应该是:
LP最终收益 = 池内资产价值 - 初始投入价值 + 手续费 + 代币奖励 - gas成本 - 滑点 - 对冲成本很多文章只讲前半段,不讲后半段。实际决策时,这会误导人。
用代码算一遍:别靠感觉判断池子风险
根据我的经验,只要涉及LP策略,最好先写个小脚本。不要相信“这个池子很稳”“这个APR能覆盖IL”这种口头判断。
下面是一个简化版Python计算器,用来估算50/50 AMM池在不同价格变化下的无常损失,以及手续费能否覆盖损失。
import math
def impermanent_loss(price_ratio):
return 2 * math.sqrt(price_ratio) / (1 + price_ratio) - 1
def lp_vs_hold(initial_value, price_ratio, fee_income=0, reward_income=0, hedge_cost=0):
il = impermanent_loss(price_ratio)
relative_pnl = il + fee_income / initial_value + reward_income / initial_value - hedge_cost / initial_value
return {
'price_ratio': price_ratio,
'impermanent_loss_pct': il * 100,
'net_relative_pnl_pct': relative_pnl * 100
}
scenarios = [0.5, 0.8, 1.0, 1.25, 1.5, 2.0, 3.0]
initial_value = 10000
fee_income = 180
reward_income = 120
hedge_cost = 40
for r in scenarios:
result = lp_vs_hold(initial_value, r, fee_income, reward_income, hedge_cost)
print(result)这段代码不复杂,但它能帮你建立一个重要习惯:把“年化收益”转换成“区间收益”,再和价格波动导致的IL比较。
如果一个池子7天预期手续费和奖励合计只有1%,但底层资产一周波动轻松超过30%,你就不能只看APR。你需要问:我到底是在赚手续费,还是在承担方向性波动?
为什么高APR池子经常不赚钱?关键在三个变量
高APR并不等于好策略。DeFi里很多高APR来自三类来源:
- 真实交易手续费
- 协议激励代币
- 短期流动性补贴
这三者质量完全不同。
真实手续费通常更可靠,因为它来自交易需求。协议激励代币就复杂得多,尤其当奖励代币本身持续下跌时,标称APR会很好看,但实际收益会被币价下跌吃掉。
我通常会拆成三个问题看:
1. 交易量是否真实且持续?
如果池子TVL很高但交易量很低,手续费收益不会好。反过来,一个中等TVL、高成交量的池子,可能比巨型池更适合LP。
要看的是fee APR,而不是只看总APR。
2. 两个资产的相关性如何?
无常损失最怕资产价格分化。ETH/USDC这种波动大,IL明显;stETH/ETH、USDC/USDT这类高度相关资产,IL通常小很多,但智能合约风险、脱锚风险又会变得更重要。
也就是说,没有免费午餐,只是风险类型换了。
3. 奖励代币有没有卖压?
很多流动性挖矿项目会用高额代币激励吸引TVL,但奖励发放本身会形成持续卖压。如果你没有及时卖出奖励,账面APR可能只是幻觉。
最佳实践是:把奖励代币和LP头寸分开管理。LP头寸承担的是池子风险,奖励代币承担的是项目代币风险,不要混在一起看。
无常损失对冲:不是为了消灭风险,而是重新分配风险
很多人问:有没有办法完全对冲无常损失?
理论上可以逼近,现实里很难完美。因为你要面对资金费率、滑点、借贷利率、合约流动性、清算风险、gas成本,以及价格路径依赖。
我更倾向于把对冲理解成:用可接受的成本,降低最不想承受的风险。
下面是几种常见方案。
策略一:用永续合约做Delta对冲
如果你在ETH/USDC池子里做LP,本质上你仍然暴露了一部分ETH方向风险。当ETH上涨时,你的ETH数量减少;当ETH下跌时,你持有更多ETH。LP头寸的Delta不是固定的,会随着价格变化漂移。
一种常见做法是使用永续合约动态对冲。
简化流程如下:
flowchart TD
A[建立LP头寸] --> B[计算当前资产敞口]
B --> C[估算Delta]
C --> D[在永续合约做反向头寸]
D --> E[监控价格偏离]
E --> F{是否超过再平衡阈值}
F -- 是 --> B
F -- 否 --> E这里要注意,Delta对冲不是一次性操作。价格变化后,LP里的资产比例会变,你的对冲仓位也要跟着调。
一个简单但实用的规则是:设定再平衡阈值,例如价格相对上次调仓变化5%或10%再调整。阈值太小,手续费和资金费率会吃掉收益;阈值太大,对冲效果会变差。
适合场景:
- 主要想赚手续费和挖矿奖励
- 不想承担太多底层资产方向风险
- 有能力管理合约保证金和清算风险
不适合场景:
- 永续合约资金费率长期不利
- 对冲资产流动性差
- 仓位太小,交易成本占比过高
坦白讲,这个策略对新手并不友好。真正麻烦的不是开空单,而是持续维护。
策略二:选择相关性更高的交易对,减少对冲需求
最简单的对冲,往往是不去承担不该承担的风险。
比如稳定币池、LST池、同类资产池,价格波动范围相对小,无常损失也更低。Curve类稳定交换模型和一些集中流动性稳定池,就是围绕这个需求设计的。
但这里有个坑要注意:相关性高不代表无风险。
USDC/USDT看似稳定,但稳定币有托管、储备、监管、脱锚风险。stETH/ETH看似接近,但在极端市场里也可能出现折价。相关性策略降低的是价格分化风险,不是协议风险和尾部风险。
我的习惯是把这类池子当成“信用风险加智能合约风险”的组合,而不是简单当成低风险理财。
策略三:集中流动性池里,用价格区间管理风险
Uniswap V3、PancakeSwap V3等集中流动性模型,让LP可以把资金放在指定价格区间内。资金效率提高了,但风险也更尖锐。
如果价格在区间内,手续费效率更高;一旦价格跑出区间,你会变成单边资产,且不再赚取该区间手续费。
比如你在ETH/USDC中设置1800到2200的区间:
- ETH价格在区间内:持续赚交易手续费
- ETH涨破2200:仓位逐渐变成USDC
- ETH跌破1800:仓位逐渐变成ETH
集中流动性不是“更安全”,而是“更精细”。
适合有明确价格区间判断的人,不适合只想躺赚的人。
我认为V3 LP最重要的不是选一个漂亮区间,而是提前定义三件事:
- 价格突破区间后是否补仓或撤出
- 再平衡频率是多少
- 手续费是否足以覆盖调仓成本
如果这三件事没有想清楚,区间越窄,越容易变成频繁追涨杀跌。
策略四:用期权保护尾部风险
期权对冲更适合较大资金或更专业的账户。比如你做ETH/USDC LP,同时买入ETH看跌期权,用来保护ETH暴跌时的风险;或者通过期权组合限制极端价格波动带来的损失。
它的好处是风险边界更清晰,坏处是期权费很真实,而且链上期权流动性并不总是足够好。
我通常不建议小资金用户一上来就用复杂期权结构。原因很简单:你可能还没被无常损失打败,先被期权价差、流动性和到期管理折腾坏了。
一个更实用的LP决策框架
如果只记住一套流程,我建议用下面这个。
1. 先判断资产:我是否愿意长期持有这两个资产?
2. 再看相关性:两个资产是否容易大幅分化?
3. 计算IL:用多个价格场景做压力测试
4. 拆分收益:手续费APR和奖励APR分开看
5. 估算成本:gas、滑点、资金费率、借贷利率
6. 定义退出:价格到哪里撤?奖励跌多少撤?TVL变化多少撤?
7. 小仓试运行:不要用第一次交互承担最大风险尤其是第一条,非常关键。
如果你根本不愿意长期持有某个代币,就不要因为高APR去给它做LP。很多亏损不是来自计算错误,而是来自资产选择错误。
常见问题:无常损失到底能不能被手续费覆盖?
可以,但不保证。
手续费能否覆盖无常损失,取决于交易量、费率、TVL、价格波动和持仓时间。一个高交易量、价格相对稳定的池子,手续费覆盖IL的概率更高;一个价格剧烈分化、交易量不稳定的池子,即使APR看起来很高,也可能不划算。
你可以用一个简单判断:
预期手续费收益 + 可兑现奖励收益 > 压力测试下的无常损失 + 所有成本注意“可兑现奖励收益”这几个字。奖励代币如果不能及时卖出,或者流动性很差,就不应该按页面显示的APR全额计入。
FAQ:几个读者最容易卡住的问题
无常损失为什么叫“无常”?退出前是不是不算亏?
“无常”指价格如果回到初始比例,损失会消失。但这不代表它不重要。因为真实世界里你可能需要退出、调仓、止损,价格也未必会回来。更重要的是,即使未退出,你也已经承担了相对持币的机会成本。
稳定币池有没有无常损失?
有,但通常较小。稳定币池更大的风险往往是脱锚、合约漏洞、预言机问题、协议治理风险。不要因为IL小,就把它当成无风险。
高APR池子适合新手吗?
多数情况下不适合。高APR往往意味着高波动、高补贴、高不确定性。新手更适合从主流资产、较高流动性、规则清晰的池子开始,并用小仓位测试完整流程。
对冲后是不是一定赚钱?
不是。对冲会降低某些风险,但会引入新的成本和风险,比如资金费率、清算、滑点、保证金管理。对冲的目标不是保证赚钱,而是让收益来源更接近手续费和奖励,而不是赌方向。
我的经验总结:LP收益要按“风险预算”来做
做DeFi流动性挖矿,最危险的不是不懂公式,而是只看收益页面。
无常损失计算只是起点。真正成熟的LP策略,需要把资产选择、价格波动、手续费质量、奖励兑现、对冲成本、退出纪律放在一起看。
我的建议很直接:
- 新手先从相关性高、规则简单的池子开始
- 每次进池前至少做3个价格场景压力测试
- 不要把奖励代币的纸面APR当成确定收益
- 集中流动性池必须提前写好再平衡规则
- 对冲策略先小仓验证,再考虑放大
如果你愿意花十分钟写一个计算脚本,往往能避开很多看起来很美的坑。DeFi里真正长期有效的优势,不是追最快的矿,而是知道哪些收益不该赚。
