Sep 17, 202228 min. read
基于恒定乘积的自动化做市商(AMM),去中心化交易所。
v1 版本:
2018年11月
解决了什么问题:传统交易所 order book 买卖双方不活跃导致的长时间挂单,交易效率低下
功能:ETH ←→ ERC20 token 兑换
带来的问题:
token1 与 token2 之间的兑换需要借助 ETH
v2 版本:
2020年5月
新功能
自由组合交易对:token1 ←→ token2
LPers 提供流动性并赚取费用
价格预言机(时间加权平均价格,TWAP)、闪电贷、最优化交易路径等
带来的问题
资金利用率低:
x*y=k
的情况下,做市的价格区间在 (0, +∞) 的分布,当用户交易时,交易的量相比我们的流动性来说是很小的x⋅y=k
,可以算出池内的 k 值: k=4500×3=13500
。假设 x 表示 DAI,y 表示 ETH,即初始阶段 x1=4500,y1=3,当价格下降到 1300 DAI/ETH 时: x2⋅y2=13500, x2/y2=1300
,得出 x2=4192.54, y2=3.22
,资金利用率为: Δx/x1=6.84%
。同样的计算方式,当价格变为 2200 DAI/ETH 时,资金利用率约为 21.45%
。也就是说,在大部分的时间内池子中的资金利用与低于 25%,这个问题对于稳定币池来说更加严重。v3版本:
2021年5月
考虑风险
价格影响(Price impact):
存货风险(Inventory risk):
无常损失
新功能
- 多层级手续费率(0.05%,0.3%,1%),升级的预言机,区间订单(range order)等。
带来的问题:
相对于v2而言
无常损失(Impermanent Loss)仍然存在,而且更大;
LP 的权衡
例子:
假设 ETH/DAI 交易对的实时价格为 1500 DAI/ETH,交易对的流动性池中共有资金:4500 DAI 和 3 ETH,根据 x⋅y=k
,可以算出池内的 k 值: k=4500×3=13500
。假设 x 表示 DAI,y 表示 ETH,即初始阶段 x1=4500,y1=3。
当价格下降到 1300 DAI/ETH 时: x2⋅y2=13500, x2/y2=1300
,得出 x2=4192.54, y2=3.22
。
如果用户选择HODL,则 x2'=4500,y2'=3
,我们分别计算两种情况下的资产价值(DAI):
LP: 4192.54 + 3.22 * 1300 = 8378.54
HODL: 4500 + 3 * 1300 = 8400
资产减少:8400 - 8378.54 = 21.46 → 无常损失
无常损失率:21.46 / 8400 = 0.26%
当价格变为 2200 DAI/ETH时,x2=5449.77, y2=2.48,资产减少 194.23,损失率为 1.75%。
模型分析:
根据恒定乘积公式 $xy=k$,令 $k=L^2$,其中 L 表示流动性,则有 $xy=L^2$,再根据价格 $S=x/y$,可以得到 $x=L/\sqrt{S}$,$y=L\sqrt{S}$。
考虑 LP 在流动性池 X-Y 中添加流动性 $L$,池的初始价格为 $S_0$,所以 LP 需要向流动性池中提供 $x_0=L/\sqrt{S_0}$的 X 代币和 $y_0=L\sqrt{S_0}$ 的 Y 代币。
当池的价格变为 $S_1$时,LP 的资产价值为
其中 $x_1$和 $y_1$是LP在池中的资产。
LP 初始时的资产如果一直拿手里,则价值为
所以,无常损失为:
令 $r=S_1/S_0$,则有:
用之前的例子计算,r=1300/1500=0.87时,IL=0.0026=0.26%,r=2200/1500=1.47时,IL=0.018=1.8%,与上述计算相符合。
图像:
可以看到,当 $S_0=S_1$时无常损失为0,其他时候无常损失都为负数。列一个表:
价格变化 | 无常损失 |
---|---|
0.25x | 20.0% |
0.5x | 5.7% |
0.75x | 1.0% |
1 | 0 |
1.25x | 0.6% |
1.5x | 2.0% |
1.75x | 3.8% |
2x | 5.7% |
3x | 13.4% |
4x | 20.0% |
5x | 25.5% |
用同样的过程,我们分析 Uniswap v3的无常损失。假设 LP 向价格区间 $[P_a,P_b]$提供流动性 $L$,初始价格为 $P_0(\in[P_a,P_b])$,之后价格变为 $P_1(\in[P_a,P_b])$。
首先我们从Uniswap v3 的白皮书中可以知道,集中流动性的资产储备曲线(橙色)的公式为:
(推导:曲线相当于v2的曲线向左向下平移动)
对于虚拟曲线: $x_{virtual} \cdot y_{virtual} = L^2$,可以得到:
初始时资产价值为:
同样,则在价格 $P_1$时流动池中的资产价值为(令 $r=P_1/P_0$):
在价格为 $P_1$ 时的,选择 HODL 的资产价值为:
所以无常损失为(不失一般性,取 $P_0$为 $P$):
( $P_1$ 在价格区间 $[0,P_b]$,$[P_a,+\infty]$时的无常损失也同样可以计算。)
我们可以通过价格区间 $[P_a, P_b]$ 的变化看到:
趋近于 $\mathrm{IL}_{v2}$。
画图
同样我们可以看到:当价格区间越小时,无常损失越大:
(这是一个动图)
数值比较
我们比较在不同的价格区间下 Uniswap v3的无常损失:
具体数据():
价格区间% | -20% | Initial | +20% |
---|---|---|---|
[0%,Inf]( Uniswap v2 ) | -0.56% | 0 | -0.46% |
[0%, 200%] | -0.86% | 0 | -0.70% |
[25%, 175%] | -1.5% | 0 | -1.22% |
[50%, 150%] | -2.34% | 0 | -1.91% |
[75%, 125%] | -4.75% | 0 | -3.8% |
提问:既然无常损失总是为负,为什么还是会有人愿意做 LP?
我们的计算忽略了两个问题:
手续费(fee):不同的池子提供不同的手续费,需要在原来的计算上加上手续费。
集中流动性增加了池的深度:
例如:ETH-USDC-0.3%池的流动性
一些流行的 token 对的深度比中心化交易所(Binance, Coinbase)更高。link
large-cap: ETH/dollar
mid-cap - cross-chain pairs
- 稳定币与稳定币对: USDC/USDT
比较以下五种资产持有策略
比较这五种策略的资产价值。(使用 https://defi-lab.xyz/uniswapv3simulator)
无手续费时:
包含手续费时:
Uniswap V3 既是投资者收益的放大器,也是风险的放大器。在享受更高投资收益的同时,也必然要承担当价格脱离安全范围时更多的无常损失。
在不主动调整情况下,全范围(full range)的 Uniswap v3 头寸和价格限定的稳定币头寸的手续费回报平均比 Uniswap v2 好约 54%。其中
通常建议 LPers 选择 v3。link
选择哪个池?
v3 表现更好的是 100 基点费率或 1 基点费率的稳定币对。
100 bps 的 token 对通常流动性较差,部署时间较晚且波动性较大。 对于 1-bp 费用等级,代币对价格波动较小,但 Uniswap v3 的交易量远高于 v2。 1-bp 池上的集中流动性实现了超过 v2 的高回报。
如果初始投入是 50%ETH 和50%USDC,当价格变化时,池中剩余的资产比例可能变成 80%ETH 和 20%USDC,这时你需要手动调整库存来防止出现一种资产在一侧耗尽,可以持续提供两边的库存。
根据价格变动周期性地再平衡(rebalance)两种资产之间的比例。
利用范围订单(range order)被动执行的,在现在价格的预测方向放置一个窄的订单,这样就避免了swap费用和价格影响。如果主动使用 swap 达到 50/50,会有 0.3%的费用。
如何操作:
对于 Uniswap 上为某个矿池,例如 ETH/USDC,它有两个主要参数:
该策略始终保持两个有效的范围订单:
每24小时,进行再平衡,根据价格和token数量提交订单。如果策略表现优秀,则时间区间可以被减少。再平衡并不能保证完全50/50。
举例:
比如,ETH目前价格 150USDC,B=50,R=20,策略拥有资金 1ETH 和160USDC。则在 [100, 200] 放置一个基础订单,使用 1ETH 和 150 USDC。剩余的 10 USDC 用来在 [130,150] 放置一个在平衡订单,用来购买ETH以达到50/50。
如果价格提升到 180, 再平衡之后,基础订单为 [130, 230],若此时策略有 1.2 ETH 和 90USDC,则策略会使用 0.5EHT 和 90USDC 放入基础订单中,剩余 0.7ETH 会用于在 [180, 200] 之间的再平衡订单。
实际操作:
效果
蓝色曲线
实际效果:
从历史数据中预测未来10分钟的价格走势,得到一个价格范围区间,在这个价格范围区间中提供流动性。直到当前价格超出价格范围,重复上述过程,重新预测价格范围并添加流动性。这个价格范围称为“预期价格范围”。同时我们可以在当前价格没有完全超出预期价格范围时调整价格区间,称这个价格范围为“移动策略范围(move strategy ranges)”,这个范围指示了什么时候需要移动。
如何设置
2018年3月~2020年4月的十分钟数据得出价格移动分布在 [-3%, 3%] 之间。可以设置百分比作为价格波动区间。
进一步策略:在预期价格范围内不采用一致的流动性,而是采用多个连续的流动性多头,每个多头存入不同数量的资产。
三种策略:
比例策略:
蓝线为概率分布,使用小的价格区间实现
结论:
比例策略对于风险偏向 LP 提供者是最优的( $\alpha$大 ),而均匀分配对于风险规避LP提供者是最优的( $\alpha$ 小)。
这意味着,在 Uniswap v3 中被动管理的头寸可能不足以以资本效率和平衡风险赚取费用,积极的流动性提供策略既是机遇也是挑战。
其他主动策略 dapp