LPSignal 如何回测集中流动性
净 APR = 手续费 APR − 无常损失:某个价格区间里一单位流动性实际赚到的手续费,减去它相对于直接持有两种代币所损失的价值。LPSignal 每小时都会对每个覆盖的池子和一组区间计算它,只用链上数据。
要点
- 精确手续费。每小时最后一个区块读取池子的手续费增长计数器,包含动态费率——触发信号时从不用成交量估算。
- 计入无常损失。在每个窗口结束时,把仓位与持有开仓时的代币进行比较。
- 具体区间。每种池子类型测试三到四个区间宽度,按池子的 tick 间距对齐,覆盖最近 1 小时、24 小时、7 天和 30 天。
- 公开计分。每条机会信号在 7 天后按它推荐的确切 tick 重新回测;亏损的信号也保留在战绩里。
- 覆盖范围。Ethereum、BNB Chain、Base、Arbitrum、Optimism 和 Polygon 上的 Uniswap v3 与 v4、PancakeSwap v3、Aerodrome 和 Velodrome Slipstream;只收录成熟代币的池子。
为什么 DEX 网站上的 APR 不是 LP 实际赚到的
DEX 和数据网站通常展示的是池子级的手续费 APR:最近一天的手续费除以池子里的全部流动性,再年化。对集中流动性池来说,这个数字回答不了 LP 关心的任何问题:
- 它是所有仓位的平均值,包括那些已经出区间、一分钱都不赚的仓位。一直在区间内的窄区间能赚到平均值的数倍;价格离开的区间则为零。
- 它忽略了无常损失。在波动大的交易对上,一个区间可能手续费 APR 很高,价值却仍然低于直接持币。
- 它不会告诉你该用哪个区间。
LPSignal 直接回答这个问题:在这个池子、这个区间,扣除无常损失后,过去一周一个仓位能有多少回报?
第一步:用手续费增长计算精确手续费
每个 Uniswap v3 类的池子都维护着每单位流动性累计手续费的计数器(feeGrowthGlobal0X128 和 feeGrowthGlobal1X128)。LPSignal 在每小时最后一个区块读取它们;两个小时之间的差值除以 2128,就是一单位区间内流动性在这一小时里精确赚到的手续费——已扣除协议分成,包含动态费率。
用 Swap 事件估算手续费(成交量 × 费率)在普通的 Uniswap 和 PancakeSwap 池子上很接近——我们在 Base 上实测误差约 1%——但在 Aerodrome Slipstream 上最多偏差 1.8 倍,因为那里的费率是动态的、部分流动性被质押、交易会跨越 tick。所以只有拥有精确手续费数据的时间窗口才能触发信号。
第二步:区间和时间窗口
每个池子按其类型测试合适的区间宽度。±5% 的区间覆盖入场价格下方 5% 到上方 5%,并向外取整到池子的 tick 间距;信号会给出确切的 tick。
| 池子类型 | 示例 | 测试的区间 |
|---|---|---|
| 稳定币对 | USDT/USDC | ±0.05% · ±0.1% · ±0.5% |
| 相关资产对 | wstETH/WETH, cbBTC/WETH | ±0.5% · ±1% · ±3% |
| 波动资产对 | WETH/USDC, WBNB/USDT | ±5% · ±10% · ±20% · 全区间 |
每个区间都在最近 1 小时、24 小时、7 天和 30 天上回测,每小时重新计算。
第三步:无常损失和在区间时间
回测按窗口开始时的价格,在区间内开一单位流动性。价格整个小时都在区间内的,记入这一小时的精确手续费;在区间外的小时不赚手续费,但仍计入平均值;价格穿过区间边界的那个小时不记入手续费(这类小时占手续费的比例过高时,结果会标为估算)。窗口结束时,按收盘价给仓位估值,并与持有开仓时的代币比较:差额就是无常损失。两者都按窗口年化:净 APR = 手续费 APR − 无常损失。
第四步:从回测到信号
在整点时,如果某个池子的某个区间同时满足以下全部条件(只用精确数据),就会触发一条机会信号:
| 条件 | 稳定币对 | 相关资产对 | 波动资产对 |
|---|---|---|---|
| 最近 7 天净 APR | ≥ 8% | ≥ 10% | ≥ 30% |
| 最近 24 小时净 APR | ≥ 8% | ≥ 10% | ≥ 30% |
| 7 天内在区间时间占比 | ≥ 80% | ||
发出信号后,同一个池子 72 小时内保持静默,除非它的 7 天净 APR 涨到上次信号时的 1.5 倍。落后超过 2 小时的链不会触发任何信号,所以信号永远不会基于过时的数据。
第五步:每条信号都公开计分
机会信号触发 7 天后,LPSignal 会把它推荐的确切 tick 在这 7 天上回测,并把实现的净 APR 公布在信号当时的数字旁边——每条信号都是如此,包括亏损的。如果那一周缺少精确手续费数据,信号会显示为未计分,并且不计入平均值,所以战绩从不用估算值充数。参见战绩。
回测不包含什么
- 未来。上周收益很好的区间,如果价格突破出去,下周也可能亏钱。
- Gas,以及为建仓兑换代币的成本。
- Aerodrome 和 Velodrome 的 gauge 排放奖励:数字针对未质押的流动性;质押收益率仅供参考。
- 带 hook 或动态费率的 Uniswap v4 池子(不覆盖)。
常见问题
流动性提供者的净 APR 是什么?
扣除无常损失后的流动性仓位年化收益:赚到的手续费,减去相对于直接持有两种代币损失的价值。LPSignal 通过逐小时回测,按池子、按价格区间计算它。
如何回测一个 Uniswap v3 仓位?
取池子的逐小时历史,按窗口开始时的价格在选定区间开一单位流动性,对价格整个小时都在区间内的每个小时,按池子手续费增长计数器记入精确手续费,最后把它的价值与持有开仓时的代币比较。LPSignal 每小时对每个覆盖的池子都这样做。
为什么手续费 APR 对集中流动性有误导性?
池子级手续费 APR 把手续费除以池子里的全部流动性,不管是否在区间内,而且忽略无常损失。一个具体区间可能赚得多得多,也可能什么都赚不到;在波动大的交易对上,损失还可能超过手续费。
净 APR 会是负数吗?
会。价格波动足够大时,无常损失会超过赚到的手续费,仓位价值低于直接持币。LPSignal 也会展示这些区间,并把亏损的信号保留在战绩里。