本系列是第一次使用停时这一数学工具处理 v3 lp 的定价。
这会是一个相对长的系列,旅程的终点是对 uniswap v3 给出一个合理的定价公式。作为第一章,我们先讨论一个有趣的问题。作为一个 uniswap v3 的流动性提供者,你的手续费能收多久?实际上这个问题非常棘手,也需要比较多的前置知识。整个系列需要对下面的知识有一些了解
本文还会假定你阅读过 uniswap v3 白皮书。不要害怕,在读完全文后你会理解为什么需要这些数学工具,以及非常好的结论。当然数学是比较难的,非常推荐你通读全文后,对不熟悉的数学工具和部分在重新推导。
对于 firsting hitting time 最好的教程来自于 Shreve 的 StochasticCalculus for Finance II 的 3.6。对于一个布朗运动 ,First hitting time 可以定义为
而我们想处理一个更有趣的停时,我们会有两个边界 (a,b),到达其中一个,布朗运动就会停止。
对于这个新的停时,我们想研究一些简单的性质。比如 停在 a 的概率是多少?我们会不加证明的使用下面的结论如果一个过程是鞅,则其停时也是鞅。对于布朗运动,我们有下面三个鞅可以使用
使用第一个鞅,我们可以得到
又因为
可以得到:
我们继续使用第二个鞅:使用第二个鞅
此时我们已经得知 的计算方法了。在进入更难的第三个鞅之前,我们先看看有什么用。
假设我是一个 v3 流动性提供者,当价格触达边界后,我会立刻停止提供流动性,撤回资金。我想知道我会收取多久的手续费。
我们需要对价格的运动做一个简单的假设,drift rate :
价格 eth 价格 $2000, 我的做市范围是(1500,2500),波动率为 50% yearly. 我们首先要先将做市范围和价格转换成布朗运动

这样我们将问题转换成标准布朗运动下的停时问题。那我们的停时的期望为也就是预期我能收取手续费的时间长度为 0.25 年。
为了简化计算和方便理解,我们这里做一个不切实际的假设,无风险利率为 0,在系列的后续文章我们会重新修改这一假设,讨论引入无风险利率后的模型变化。这意味着我们的 pv = fv,没有贴现。此外我们还需要假定手续费的收取是在价格到达做市边界时就结束的,并不会实时收取并再投资。我们可以开启我们第一个简易定价模型了。
对于价值 $1 的 lp,我们有任意时间 lp 价值的分段函数,此处我们做归一化

由于我们的策略要求我们持有到,所以 只有 L 和 H 两种可能。我们可以计算出我们的 lp 价值为
对于我们的例子来说,经过除以波动率,转化为

得到 lp 的期望为
也就是 lp 是预期会亏损 7%。那么手续费能弥补回来嘛?
这部分其实也非常直观。,其中为手续费收取速率。我们需要对 手续费到达速率做一些扩展,我们增加假设:在任何价格上的流动性等同于当前的流动性,也就是流动性在任何价格上都一样。
那我们不难得出手续费的收入和我们提供的流动性正相关。也就是
其中 total fee 是一个手续费到达的速率,我们再合理的展开为,由于我们波动率是年为单位的,所以要转换成 365 天。
我们以https://info.uniswap.org/#/pools/0x88e6a0c2ddd26feeb64f039a2c41296fcb3f5640 为例子,时间为 2023 年 12 月 25 日。
其中 24 小时手续费为 $113640,也可以根据成交量乘以池的手续费比例得到 ,在 etherscan 查询得到流动性为 https://etherscan.io/address/0x88e6a0c2ddd26feeb64f039a2c41296fcb3f5640#readContract :
有关于 fee 的相关推导参考附录。公式为

我们的预期手续费收入为
带入相关的参数 手续费预期收入为 0.04400312313890215。
考虑到我们之前的 LP 本身预期亏损 7%,手续费收入不足以覆盖成本。
我们通过上面的推导得出以这个参数做市不成立。我们是否可以选取最佳的做市范围呢。我们只需要重新整理下公式,再使用一些简单的微积分即可。
入参:
中间变量

手续费:
我们将两者相加,可以整理为

化简得到:
我们是否要最大化呢,并不是。一小时赚10。因此我们的最优化目标函数为
如果 我们就将可以代入公式,进行求导选择最优的做市范围。旅程不总是一帆风顺的,这个等式是「不成立」的!原因是 jensen's 不等式,期望是不能交换顺序的 https://en.wikipedia.org/wiki/Jensen%27s_inequality 。那么我们可以直接求等式左边的期望嘛,当然可以! 中唯一的随机变量是 ,那么按照期望的计算公式,可得
在下一篇中,我们将使用第三个鞅来求出 的分布。
lp v3 的推导有大量优秀的文档可以参考,在本文中需要额外解决两个问题 1. 为了方便定价需要使得初始投资额为 $1. 2. 需要将 evm 的流动性转换成数学世界的流动性,这需要我们稍微回顾一下智能合约的计算。
我们增加了一个额外的条件,其中 x 是我们投入到流动性中的 eth 数量,y 是 usdc 数量。假定我们提供流动性是 $P_L<p_0<p_h$,我们可以通过流动性增加的规则和投资总额的约束,求出 x,y 的值,进而得出 l="" 的值。<="" p="">
在白皮书中有如下的公式:
在 https://atiselsts.github.io/pdfs/uniswap-v3-liquidity-math.pdf 中最后整理为 x, y, P, pa, pb 的关系为:
将 x,y 带入到总投资 P_c = P_0$ 得到
得到, 我们进一步将其归一化,。得到我们的 从而计算出后续出 的函数。
对于我们来说有如下的关系

对于在智能合约中得到的当前流动性数据我们如何将其转换回 generlized world 是我们接下来要讨论的问题,如果能转换回来,我们将能方便的处理好手续费分成问题,进而能方便的开展求导等后续最优化问题。
参考 https://uniswapv3book.com/milestone_1/calculating-liquidity.html ,和其中的相关代码,我们可以做出如下推理
evm world 中的 由于 solidity 的限制 和 gas 优化,有一些改动,比如价格的格式也和现实中不一样。但是两者的公式是一致的,比如
对于 evm 中,我们需要做一些代换,现实中的价格是有 decimal,需要转换成 evm 中无单位价格,其中 usdc,usdt,eth 的 decimal 分别为 6,18,18.

那么我就可以方便的计算出 generlized 公式下的的手续费分成了。我们需要将从智能合约的转换成真实世界的 L, 再乘以 转换成 generlized 的 流动性,此时我们可以直接将 除以我们转换后的总流动性,即我们提供的 $1 的流动性占比。
Antalpha Labs 是一个非盈利的 Web3 开发者社区,致力于通过发起和支持开源软件推动 Web3 技术的创新和应用。
官网:https://labs.antalpha.com
Twitter:https://twitter.com/Antalpha_Labs
Youtube:https://www.youtube.com/channel/UCNFowsoGM9OI2NcEP2EFgrw
联系我们:hello.labs@antalpha.com
【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。
