一文彻底了解无常损失
2020年上半年去中心化金融变得炙手可热。流动性挖矿一度造富。Uniswap作为现如今最大的去中心化交易所广受瞩目。介绍如何使用uniswap进行流动性挖矿的文章很多,我这里不再说明。这里主要介绍无常损失(Impermanent Loss)这一概念。 大家可能在进入挖矿时并不完全了解这一概念,从而造成一些困惑或投资损失。接下来我们就深入了解一下这个概念。介绍中有公式推导。大家可能对数学公式有一种恐惧感,我尽量不省略中间过程。实在对公式抵触可以直接跳过公式推导看具体例子。接下来还是先介绍一下概念。
什么是无常损失(Impermanent Loss)
这是在Uniswap上进行流动性挖矿时会碰到的一种损失。这种损失是由于代币价格背离引起的。当价格回归时,这种损失也就没有了。我们这里说的是损失,不等同亏损。当我们把一对代币存入Uniswap后,如果一种代币以另一种进行计价的价格上升,那么在价格上升后你把他们取出,得到的总价格比直接手握这两种代币要低一些,低的这一部分就是损失,价格偏离越大损失就越大,所以可能造成亏损,特别是当两种代币在实际中都要以其他稳定币来计价时。当然挖矿还会有治理代币的收入。在讨论无常损失这一议题时,我们先抛开治理代币来分析。有的文章里觉得Impermanent Loss这个说法不够准确,所以也会看到有人把它叫做Divergence Loss(背离损失)。接下来我就来深入分析无常损失是怎么来的。
为什么会出现无常损失
我们知道Uniswap提供了自动坐市商的协议。我们提供代币对到流动性资源池,代币对之间的交换通过一个简单的公式进行计算。比如说,我们进入代币A跟代币B的流动性池。在池中代币A的数量是a,代币B的数量是b。那么,代币的交换过程中系统始终要保持a与b的积为一个常量c。也就是:
------------ 表达式1
如果我们考虑以代币B来计价代币A,我们用
标识这个价格。为了方便理解我们把A看成是以太币(ETH),我们把B看成是泰达币(USDT)。这样我们就好理解以USDT来计价ETH的概念了。回到分析。
代币A的价格计算如下:
------------- 表达式2
接下来我们结合表达式1,2,来推导出池中代币A跟代币B的数量计算公式。
(1) 代币A计算公式推导
所以,
代币A数量的计算公式 :
------------ 表达式4
(2)代币B数量公式推导
所以
代币B数量的计算公式:
-------------- 表达式5
有了表达式1到5,我们就可以来推导下面的问题。问题是,如果我存储了一定比例(这个比例记做 n ,是相对池的总量)的A跟B到流动性池中。 当A以B来记价的价格上涨了一个比率 r后我们会有多大比率的无常损失。
(1)我们先来看如果我们不进入挖矿,价格上涨后,我们手中的总价格
根据表达式4,5。我们知道这个池中代币A的数量是:
那我们的代币A的数量就是:
价格上涨后,这一部分代币的价格是:
我们知道池中代币B的数量是:
我们所持有的代币B的数量是:
因为本来就是以代币B计价的,所以这一部分的价格就是 :
我们所持有的价格合计就是:
-------- 表达式6
(2)接下来我们来看如果我们加入流动性池,价格上涨后,我们的总价格
我们知道上涨后的价格是:
根据表达式4, 我们知道上涨后,代币A的数量为:
根据我们所占比例n, 以及上面两个公式,我们得到代币A在这种情况下个价格为:
根据表达式5, A价格上涨后,代币B的数量为:
根据我们的占比n, 我们可以得到代币B的价格为:
所以上涨后的总价格为 :
--------- 表达式7
(3)根据表达式6,7 我们计算出损失为:
进一步简化为:
---------- 表达式8
(4)用表达式8,6,就可以得到损失率
先简化表达式6得到:
最后,我们得到的损失率计算公式为:
-----表达式9
从表达式9我们可知,最终的损失率只跟上涨率r有关。
我们可以取值来画出这个损失率的曲线。
当上涨率为-1(也就是价格变成0), 损失率为 1 --- -100%
当上涨率为 0 (也就是价格不变), 损失率为 0 --- 0.00%
当上涨率为 0.25 , 损失率为 0.006 --- 0.6%
当上涨率为 0.5 , 损失率为 0.02 --- 2.0%
当上涨率为 1 (也就是价格涨一倍) , 损失率为 0.057 --- 5.7%
当上涨率为 4 (也就是价格涨4倍) , 损失率为 0.255 --- 25.5%
上面我们展示了造成无常损失的原因。下面再用一个例子,让大家进一步具体感受一下。
无常损失举例
假定我们在Uniswap的ETH-USDT池进行挖矿。假设池中ETH跟USDT的个数分别为100跟40000,其中我们投入挖矿的代币数占比为1%,也就是1个ETH,400个USDT。为了分析简单,我们假设接下来没有人进行存储和提取活动。
开始时,ETH的价格为1ETH = 400USDT。
接下来,我们来看看,如果ETH价格上涨50%会是怎么样一个情况。上涨后,1ETH = 600USDT。
我们来看,如果不进行挖矿,价格上涨后,我们总共持有代币的价格。我们的1个ETH相当于600USDT。那我们一共持有600+400等于1000 USDT。
我们再来看看,挖矿情况上不记治理代币奖励部分的价格总和怎么计算。根据表达式1,这个池的c值为
根据表达式4,价格上涨后ETH在池中个数为
根据表达式5,USDT的个数为
因为我们占比是1%。所以我们可取出的ETH是0.816497个。可取出的USDT是489.897946个。根据价格再把ETH换算成USDT,
USDT ,好了,我们可以取得的总价是979.796146 USDT。
我们的无常损失是 1000 USDT - 979.796146 USDT =20.203854 USDT。我们的损失率为0.0202,也就是2%左右。我们看到这跟表达式9计算出来的一致。
到此为止,我们已经详细介绍了无常损失的由来。当然现实情况更为复杂,在一个流动性池里不断有人进行存取活动。还有就是流动性挖矿是有代币挖出的。但了解无常损失很是重要的,这样在进行流动性挖矿时,我们可以有更全面的认识。
下一篇:网络抑郁症夜猫族最容易得