Uniswap V3 Impermanent Loss

点击量:144

公式推导

假设当前价格是\(P_c\),我们选择在区间\([a,b]\)提供流动性\(L\),那么所需要的真实资产\(x\)和\(y\)分别是:
$$
\begin{align*}
& x = L (\frac{1}{\sqrt P_c} – \frac{1}{\sqrt P_b}) \\
& y = L (\sqrt P_c – \sqrt P_a)
\end{align*}
$$

我们定义:

  • 不做LP而选择hold资产,那么hold资产的价值为:

$$
\begin{align*}
& V_{\text{hold}} = y + x * P
\end{align*}
$$

带入\(L\)和\(P_c\)可得:

$$
\begin{align*}
& V_{\text{hold}} = L (\sqrt P_c – \sqrt P_a) + L (\frac{1}{\sqrt P_c} – \frac{1}{\sqrt P_b}) \times P
\end{align*}
$$

  • 做LP之后的资产价值:

$$
\begin{align*}
& V_{\text{lp}} = y’ + x’ * P
\end{align*}
$$
我们把这个公式里的\(x\),\(y\)以及\(P\)都转换成\(L\)和\(\sqrt P\)的形式:

$$
\begin{align*}
& V_{\text{lp}} = L (\sqrt P – \sqrt P_a) + P L (\frac{1}{\sqrt P} – \frac{1}{\sqrt P_b})
\end{align*}
$$

化简之后可得:

$$
\begin{align*}
& V_{\text{lp}} = 2L \sqrt P – L (\sqrt P_a + \frac{P}{\sqrt P_b})
\end{align*}
$$

但是这个公式只有在\(p_a \leq p<p_b\)的情况下才成立,而当价格超过这个区间时,一种资产会被完全换成另一种资产,且不再变化,直到价格再重新回来。考虑这两种情况,我就可以得到如下完整的公式:

$$
\begin{equation}
V_{\text{lp}}=
\begin{cases}
2L \sqrt P – L (\sqrt P_a + \frac{P}{\sqrt P_b})& P_a \leq P \le P_b \\
L (\sqrt P_b – \sqrt P_a)& P \geq P_b \\
L (\frac{1}{\sqrt P_a} – \frac{1}{\sqrt P_b}) * P & P \leq P_a \\
\end{cases}
\end{equation}
$$

根据IL的公式:

$$
\begin{align*}
& \text{IL} = \frac{V_{\text{lp}} – V_{\text{hold}}}{V_{\text{hold}}}
\end{align*}
$$

我们知道价格\(P\),\(P_a\)以及\(P_b\)都可以看成是相对于起始价格\(P_c\)的变化,于是我们可以用他们的比值来简化公式:

$$
\begin{align*}
& \frac{P}{P_c} = k \\
& \frac{P_a}{P_c} = \frac{1}{n} \\
& \frac{P_b}{P_c} = m \\
\end{align*}
$$

经过一系列带入化简后我们可以得出:

$$
\begin{equation}
\text{IL}=
\begin{cases}
\frac {2 \sqrt k – (k + 1)} {1 + k – \frac{1}{\sqrt n} – k \frac{1}{\sqrt m}}& \frac{1}{n}<= k < m \\
\frac{\sqrt m + k \frac{1}{\sqrt m} – (k + 1)}{1+k – \frac{1}{\sqrt n} – k \frac{1}{\sqrt m}}& k >= m \\
\frac{k\sqrt n + \frac{1}{\sqrt n} – (k + 1)}{1+k – \frac{1}{\sqrt n} – k \frac{1}{\sqrt m}} & k < \frac{1}{n} \\
\end{cases}
\end{equation}
$$

分析

这个公式有三个变量:\(m\),\(n\)和\(k\),不太好直接分析。为了有个直观的感受,我们从以下两个角度分析:

m = n

\(m=n\),也就意味着我们在\([\frac{P_c}{n}, n \times P_c]\)的区间内提供流动性。这样的话,我们有:

$$
\text{IL} = \frac{2 \sqrt k – (k + 1)} {k + 1} \times \frac{1}{1 – \frac{1}{\sqrt n}}
$$

上面这个公式,乘号左边的部分恰好是V2里的IL,那么右边的数则表示V3的IL是V2的多少倍,我们看下这个函数的图像:

我们可以很容易的发现:

  • 即使n=2,也就是在[-50%, 200%]这样一个比较大的区间,V3的IL也是V2的3.41倍左右;
  • 当n=1.1时,也就是在[-9.1%, 10%]这个区间,高达21.48倍;
  • 当n=1.05,也就是在[-4.76%, 5%]这个区间,更是高达41.49倍;

如果区间继续收窄,那么IL将会持续变化大;从这个角度看,V3的IL风险还是比较大的。

对称区间

接下来,我们会从另一个维度分析下IL:我们添加流动性时,很容易选择的价格区间是上下\(r%\)的对称区间,这种对称区间不仅操作时更方便,而且还可以减少一个变量,使得分析起来更容易:

$$
\begin{align*}
& \frac{P_c – P_a}{P_c} = 1 – \frac{P_a}{P_c}= r \\
& \frac{P_b – P_c}{P_c} = \frac{P_b}{P_c} – 1 = r
\end{align*}
$$

我们可以得到\(m\),\(n\)以及\(r\)的关系:

$$
\begin{align*}
& n = \frac{1}{1 – r} \\
& m = 1 + r
\end{align*}
$$

带入上述公式可以得到:

$$
\begin{equation}
\text{IL}=
\begin{cases}
\frac {2 \sqrt k – (k + 1)} {1 + k – \sqrt(1-r) – \frac{k}{\sqrt(1+r) }}& 1-r<= k < 1+r \\
\frac{\sqrt (1+r) + \frac{k}{\sqrt(1+r)} – (k + 1)}{1+k – \sqrt (1-r) – \frac{k}{\sqrt (1+r)}}& k >= 1+r \\
\frac{k\sqrt(1-r) + \sqrt(1-r) – (k + 1)}{1+k – \sqrt(1-r) – \frac{k}{\sqrt(1+r)}} & k < 1-r \\
\end{cases}
\end{equation}
$$

以上公式看上去有点复杂,但是我们可以用一些画图工具把\(r\)变化的过程给展示出来,我们设定r的变化范围是:[0.1, 0.9],递增的步长是0.1,于是我们可以得到如下的图像:

尺度放大之后可以更清楚的看到紫色的价格区间内的变化:

上图中:

  • 蓝色的线是V2的IL,绿色的线是4倍于V2 IL,三色叠加的线则是对称区间上V3的IL;
  • r越大,也就是区间范围越大,曲线越接近于V2的IL;r越小,也就是区间氛围越窄,曲线会更陡峭,IL会大很多。

所以,V3做LP需要特别留意IL。

最后贡献一份简单的代码,可以实时计算出不同对称区间,价格变化时V2和V3的IL值。有兴趣的可以尝试不同的\(r\)和\(k\)值,感受下IL的变化。

  • 在上下对称10%区间提供流动性,我们可以得到价格变化时IL的变化:
    输出:

  • 在上下对称20%区间提供流动性,我们可以得到价格变化时IL的变化:
    输出:

  • 在上下对称50%区间提供流动性,我们可以得到价格变化时IL的变化:

     

原创不易,如果您觉得本文对您有帮助,可以打赏博主一杯咖啡,鼓励博主持续创作!


  • Ethereum/Polygon/Bsc/Arbitrum: 0xa8c00949fd7dD23b5Ec36A9181966c8C8436A015
  • Bitcoin: bc1qdvf0j0rntarvdal62n35etwmjzwk307w4jtyjz
  •    
  • 支付宝:

  • 发表评论

    邮箱地址不会被公开。 必填项已用*标注