没有做市商,
没有订单簿,
只有一条公式。
Uniswap 把"定价"这件事从人交给了数学。理解它只需要一个盒子、两种代币,和一条乘积不变的规则——后面所有复杂的东西,包括滑点、无常损失、集中流动性,全部是从这一条推出来的。
这是一个装着 100 ETH 和 200,000 USDC 的池子。拖动滑块投入 USDC 买 ETH——注意两个储备量怎么变、价格怎么被你自己的交易推动。先建立手感,公式在下一节。
为什么链上必须发明 AMM
不是因为 AMM 更好,而是因为传统的那套在链上根本跑不起来。
订单簿是怎么工作的
你在币安、纳斯达克看到的都是订单簿:买家挂出愿意买的价格和数量,卖家挂出愿意卖的,系统撮合价格重叠的部分。
这套机制有一个隐形的支柱:做市商。必须有人时刻在买卖两侧都挂着单,别人才能随时成交。做市商靠赚买卖价差(bid-ask spread)获利,代价是承担库存风险。没有做市商,订单簿就是空的——你想买,但没人挂卖单。
搬到链上,立刻撞墙
做市商的核心动作是不停地改报价。市场每跳动一下,就要撤单、重新挂单。一个活跃做市商一天可能改几万次报价。
在链上,每一次挂单、改单、撤单都是一笔交易,都要付 gas、都要等出块。做市商改一次报价的成本从"几乎为零"变成"几美元 + 十几秒延迟"。这让链上做市在经济上不可行。早期的链上订单簿 DEX 几乎全部因为这个原因失败——不是设计不好,是底层成本结构不允许。
Uniswap 的答案:换一个问题
与其想办法降低做市成本,不如取消做市商。
核心思路是:让流动性提供者一次性把资产存进一个池子,然后用一条数学公式自动决定任何时刻的成交价格。存钱是一次交易,之后无论多少人来交易、价格怎么波动,LP 都不需要再做任何操作。
"AMM"是 Automated Market Maker(自动做市商)的缩写。这里的"自动"要精确理解:不是有个机器人在报价,而是根本没有报价这个动作——价格是从池子的状态里算出来的。
一个盒子,两种代币,一条规则
Uniswap V2 的全部机制可以写在一行里。真的只有一行。
流动性池
想象一个盒子,里面装着两种代币,比如 ETH 和 USDC。这个盒子就是流动性池(liquidity pool)。它是一个智能合约,资产真实地锁在里面。
任何人都可以做两件事:交易(放进一种、取走另一种),或者提供流动性(按比例放进两种,获得份额凭证)。
唯一的规则
x 是池里 ETH 的数量,y 是 USDC 的数量,k 是它们的乘积。规则是:任何一笔交易前后,k 必须保持不变。
交易的本质就是:你往池子里放进一些 USDC,拿走一些 ETH。能拿走多少,由"乘积不变"这一条唯一确定——没有别的输入,没有预言机,没有人工干预。
它保证了两件事:① 池子永远不会被掏空。因为 x 越接近 0,为保持乘积不变,需要投入的 y 就越接近无穷大——买光池子的成本是无限的。② 价格自动随供需调整。你买得越多,剩下的越少,下一单就越贵。这两个性质都不需要额外代码,是公式自带的。
把它画出来
x·y=k 在坐标系里是一条双曲线。池子的全部状态,就是这条曲线上的一个点。交易 = 这个点沿着曲线滑动。
横轴是池里的 ETH 数量,纵轴是 USDC 数量。无论你怎么交易,这个点永远不会离开这条曲线——这就是"k 不变"的几何含义。
注意读数里的 x · y:无论你把点拖到哪里,它始终等于 20,000,000。而价格 y/x 则一直在变。这一句话就是整个 Uniswap。
这个例子请务必自己算
这一节只有一道算术题。算明白它,V2 就学完了八成。
题目
池里有 100 ETH 和 200,000 USDC。你投入 2,000 USDC 买 ETH。你能拿到多少?
先别往下看——凭直觉,当前价格是 200,000 ÷ 100 = 2,000 USDC/ETH,那 2,000 USDC 应该正好买到 1 个 ETH,对吗?
按规则计算
你拿到的不是 1.0000 ETH,而是 0.9901 ETH。少了 0.0099。
这少掉的部分不是手续费(这里还没算手续费),也不是被谁扣走了。它是"乘积必须不变"这条规则的纯数学后果。
这就是滑点(slippage)。你之前所有关于"看到价差却赚不到钱"的困惑,源头都在这 0.0099 里。
滑点从 99 bps 暴涨到 909 bps——规模放大十倍,滑点也放大了约十倍。这就是为什么"加大本金"永远救不了一个薄利策略:利润线性增长,滑点也线性增长,而且滑点是从利润里扣的。
加上手续费的完整公式
真实的 V2 会先抽走手续费(0.3%),剩下的部分才参与兑换。记 γ = 1 − f:
这个公式是精确的,不是近似。任何人拿到池子的状态,都能算出确定的输出结果——这一点后面 §14 讲 MEV 时会变得很重要。
滑点的速算法
一个 TVL 300 万美元的池子(两侧各约 150 万),想把滑点控制在 0.1% 以内,最多能下多大的单?
0.001 × $1,500,000 = $1,500
一千五百美元。而且这还没算 0.3% 的手续费。这个数字解释了链上流动性的真实规模。
价格不是被设定的,是被算出来的
Uniswap 合约里没有任何一个变量叫"价格"。这不是实现细节,而是理解一切的关键。
这个简单的事实带来三个深远的后果:
① 你的交易改变价格
你买走 ETH,x 变小、y 变大,价格 y/x 自动上涨。你在推高你自己的成交价。订单簿里叫"吃穿几档",这里是连续发生的。
② 池子不知道外面的价格
它不看币安,不用预言机。如果外面 ETH 涨到 2,200 而没人来交易,池价就一直停在 2,000。价格是上一笔交易留下的状态残留。
③ 所以需要套利者
池价 2,000、外面 2,200,就有人来买便宜 ETH 去外面卖。这个牟利行为本身把池价推了上去——不需要任何人负责校准。
Uniswap 的价格准确性,完全是被套利者的贪婪维持的。协议本身什么都不做,它只是构造了一个"价格错了就有钱赚"的结构,然后让市场自己去修。
这也直接推出一个你之前会关心的结论:修价格这件事是有人抢着做的。能赚的价差早就被做掉了,你屏幕上还留着的,大概率是不够本的那些。§8 会把这句话变成一个可计算的判据。
交易者:你付出的三种成本
很多人只算手续费,结果实际到手总是比预期少。因为成本有三层,手续费往往是最小的那一层。
| 成本 | 来源 | 随规模如何变化 | 能否避免 |
|---|---|---|---|
| 手续费 | 协议抽成,归 LP | 线性(固定比例) | 选低费率档的池 |
| 滑点 | 曲线的数学后果 | 线性甚至更快上升 | 拆单、换深池 |
| MEV 提取 | 被抢跑/三明治 | 取决于你设的滑点上限 | 私有 RPC、收紧滑点 |
全条代表"按中间价理想应得的量"。青色是你实际到手,其余是被吃掉的部分。拖动订单规模,观察滑点如何迅速超过手续费。
小额时手续费占主导,滑点几乎看不见;规模一上去,滑点迅速反超并主导一切。这就是为什么"这个池手续费才 0.05%"这种判断是不完整的——真正决定成本的是你的订单相对池子有多大。
LP:池子里的钱是谁的
池子里的资产不属于协议,属于流动性提供者。理解 LP 的处境,是理解 AMM 经济学的核心。
怎么做 LP
按当前池内比例存入两种资产(比如 1 ETH + 2,000 USDC),获得 LP 代币作为份额凭证。想退出时,销毁 LP 代币,按当时的池内比例取回资产。
注意"按当时的比例"——这是后面无常损失的伏笔。你存进去的比例,和你取出来的比例,大概率是不一样的。
手续费怎么发给 LP
这里有个巧妙的设计:手续费不单独发放,而是直接留在池子里。
所以 LP 的收益体现为"份额对应的资产变多",而不是账户里多出一笔钱。这也意味着手续费收益是自动复投的。
上面算出的年化只是收入,不是利润。它完全没有减去无常损失。你在各种平台上看到的 APY 大多也是这么算的——这是 DeFi 里最常见的误导。真实收益必须减去下一节的内容。
无常损失:为什么 LP 总是站在错误的一边
这是整份文档最重要的一节。理解它,你就理解了 AMM 的全部经济学。
先看现象
池子初始:100 ETH + 200,000 USDC,ETH 价格 2,000。现在 ETH 外部价格翻倍到 4,000。套利者会来把池价推到 4,000。推完之后,池子里剩下什么?
ETH 从 100 个变成了 70.71 个,USDC 从 200,000 变成了 282,843。池子在 ETH 上涨的过程中,把 ETH 卖掉了。
算一下亏了多少
这 5.72% 就是无常损失。注意:LP 并没有亏钱(从 40 万变成了 56.5 万),但他比"什么都不做"少赚了 3.4 万。
"无常"这个词有误导性——它的原意是"如果价格回到原点,损失就消失"。但只要你在价格没回到原点时退出,损失就是永久的。
为什么会这样:被迫的反向操作
因为 LP 承诺"任何时候都按公式和你交易",他是完全被动的:
LP 总是在上涨时卖出、在下跌时买入。这是被公式自动执行的、方向永远错的再平衡。
所以做 LP 的本质是:收取手续费作为报酬,承担"总是站在错误一边"的代价。手续费 > 无常损失就赚,反之就亏。
再进一步:LP 实际上是在卖出波动率——价格越震荡,被套走的越多。这就是为什么专业机构把 LP 头寸当作期权空头来管理。
注意曲线的形状:无论涨还是跌,都是损失。只有价格回到原点(m=1)时损失才为零——这说明 IL 与方向无关,只与「偏离程度」有关。默认值对应上面的例子(投入 $400k = 100 ETH + 200,000 USDC,价格 ×2)。
| 价格变化 | 无常损失 | 直观理解 |
|---|---|---|
| ±0%(不变) | 0% | 纯赚手续费,LP 的理想状态 |
| ×1.25 或 ×0.8 | −0.62% | 小幅波动,手续费通常能覆盖 |
| ×1.5 | −2.02% | 开始明显 |
| ×2 或 ×0.5 | −5.72% | 需要可观的手续费才能覆盖 |
| ×3 | −13.40% | 手续费很难覆盖 |
| ×5 | −25.46% | 单边行情对 LP 是灾难 |
这就是为什么稳定币池是 LP 的低风险选择,也是为什么它们能用极低的费率档(0.01%)——LP 不需要高手续费来补偿风险。反过来,高波动的币对必须配高费率,否则没人愿意做 LP。费率档的设计,本质上是在给波动率定价。
套利者:系统的免费校准工
他们不是寄生虫,而是这套机制不可或缺的一环。没有他们,池价会永远停留在错误的地方。
套利的机制
池价 2,000,外部 2,020(高 100 bps)。套利者在池里买 ETH、去外面卖。这个动作把池内 ETH 买少、价格推高,直到池价 = 外部价时,利润恰好归零,套利自然停止。
① 手续费是硬门槛。若价差 S ≤ 手续费 f,套利在数学上就不存在——与你的速度、gas 优化、技术水平毫无关系。一个 17 bps 的价差在 0.3% 手续费的池子上,永远不可能盈利。
② 利润按平方衰减。价差减半,利润变成四分之一。小价差不是"利润薄",而是"利润以二次速度趋近于零"。
回头看 §7:LP 亏掉的无常损失,正是套利者赚走的那部分。价格变动时,套利者以"旧价"从 LP 手里买走便宜资产,这个转移就是 IL 的物理来源。
所以整个系统是一个清晰的三方结构:交易者付手续费 → LP 收手续费但被套利者收割 → 套利者维持价格准确。你参与 AMM,就是在选择站在哪个位置。§14 会把这个循环完整画出来。
绝大部分钱从来没被用过
V2 的公式很优雅,但有一个巨大的浪费。看懂这个浪费,就知道 V3 为什么必须出现。
回到那条双曲线:它从 x→0 一直延伸到 x→∞。这意味着 V2 池的流动性,均匀铺在从 0 到无穷大的整条价格范围上。
如果 ETH 现价 2,000,那么池子里有一部分钱在等着"ETH 跌到 5 美元时买入",还有一部分在等着"ETH 涨到 50 万时卖出"。这些钱永远不会被用到,但它们真实地占用着 LP 的资金。
拖动"价格实际波动范围",看看在这个范围内真正被动用的流动性只占多小一部分。剩下的全是死钱。
回到 §3 那个数字:TVL 300 万的 V2 池,10 bps 滑点下只能吃 $1,500。
不是因为池子小,而是因为那 300 万里只有极小一部分在当前价格附近工作。V3 要解决的就是这件事。
让 LP 自己选价格区间
既然 ETH 大概率就在某个范围内波动,为什么要为 5 美元和 50 万美元准备流动性?
V3 允许 LP 指定一个价格区间 [pa, pb],资金只在这个区间内提供流动性。同样的钱,在你关心的价格附近深得多。
| 区间宽度 | 资本效率 | $3M 池在 10bps 下的容量 | 代价 |
|---|---|---|---|
| V2 全区间 | 1× | $1,500 | 永不失效,但资金几乎全闲置 |
| ±25% | 9.5× | $14,208 | 较稳,适合高波动币对 |
| ±10% | 21.5× | $32,232 | 偶尔需要调整 |
| ±5% | 41.5× | $62,241 | 需要定期管理 |
| ±1% | 201.5× | $302,248 | 频繁失效,管理成本高 |
| ±0.5% | 401.5× | $602,249 | 波动稍大即失效 |
上下两条是同样金额的流动性。上面按 V2 均匀铺开,下面集中在你选的区间内。柱子的高度就是那个价格上的深度。
把"当前价格偏移"拖到区间之外,你会看到 V3 的深度直接归零——这是理解 V3 的关键,下一节展开。
虚拟储备与 Tick
好消息:在当前价格所在的区间内,V3 的行为和 V2 完全一样。你已经学的东西全部可以复用。
虚拟储备:把 V3 变回 V2
V3 在当前区间内,等价于一个储备量被"放大"了的 V2 池。这个放大后的储备叫虚拟储备:
不要把 V3 当成新东西学。它就是 V2 + 一个"当前区间"的概念。价格在区间内移动时,用虚拟储备套 V2 公式即可;唯一的新内容是价格跨越区间边界时会发生什么。
Tick:价格的离散刻度
LP 不能随意选任意价格作为边界,只能选预设的刻度点,这些点叫 tick:
必须认识的四个字段
sqrtPriceX96
当前价格的平方根,以 Q64.96 定点数存储。之所以存平方根,是因为上面的公式里全是 √P,存平方根可以避免反复开方。它是价格,不是价格的平方。
tick
当前价格对应的刻度序号。用它可以快速定位在哪个区间内,以及距离下一个边界还有多远。
liquidity
只是当前激活区间内的 L,不是全池总流动性。这是最容易误读的字段——用它估算大额订单会出错。
slot0 的价格
它是中间价,不是你能成交的价格。直接拿它当成交价,就会重复本文开头那个 0.9901 的错误。
Tick 穿越:深度不是一个数,是一条阶梯
不同 LP 选了不同区间,所以流动性沿价格轴的分布是不均匀的。你的订单吃穿当前区间后,会进入下一个 L 可能完全不同的区间。
每根柱子是一个 tick 区间的流动性。拖动订单规模,看它逐个吃穿。下方两条曲线对比真实滑点(逐段积分)与把 L 当常数的估计——两者的分岔就是模型误差。
把分布形态切到「双峰」,你会看到误差倍数掉到 1 以下:
· 单峰/参差:流动性向外变薄,恒定 L 低估滑点 → 你以为能成交,实际亏损;
· 双峰:外侧还有一座流动性山,恒定 L 高估滑点 → 你错过本可以做的交易。
你无法靠加安全边际兜底,因为你不知道误差朝哪边。这就是为什么必须用 Quoter 实测,而不是自己套公式估算。
V3 的代价
资本效率提高 200 倍,不可能没有代价。代价有两个,而且都是结构性的。
代价一:价格跑出区间就完全失效
当价格离开你设定的区间,你的资金全部变成单一资产,不再赚取任何手续费,也不再参与做市。你相当于被动完成了一次全额换仓,然后闲置。
代价二:无常损失同比放大
这一点更根本。资本效率和无常损失是同一枚硬币的两面。
你把 200 倍的深度提供在一个窄区间内,意味着在这个区间内的价格波动中,套利者能从你手里拿走的量也放大了约 200 倍。不存在"只要效率、不要风险"的选项——这在数学上就是同一个 L。
V2 的 LP 可以存进去就不管;V3 的 LP 必须持续判断波动率会有多大、区间设多宽、什么时候该调整。这是一份主动管理的工作。
好消息是:这份工作拼的是判断力和纪律,不是速度。它不需要和高频机器人抢毫秒——这一点使它比套利更适合个人参与。
一笔交易的完整旅程
从你点下"swap"到代币到账,中间发生的每一步。这一节把前面所有零件装回整机。
路由器算出预期输出后,你需要设定一个最小可接受输出(slippage tolerance)。这个数字既保护你不被极端价格成交,也公开宣布了你愿意承受的最大损失——§14 会讲为什么这是个悬赏。
三方博弈与价值流向
交易者、LP、套利者构成一个闭环。看清这个闭环,你就知道自己站在哪个位置、赚谁的钱、被谁赚。
拖动市场波动率,观察价值在三方之间的分配如何变化。波动率是这个系统的核心变量。
| 角色 | 收入来源 | 承担的风险 | 核心能力要求 |
|---|---|---|---|
| 交易者 | 不为赚钱,为换资产 | 滑点、MEV 提取 | 选对池子、设对滑点 |
| LP | 手续费(自动复投) | 无常损失 / 卖出波动率 | 判断波动率、管理区间 |
| 套利者 | 价格偏离的修正差额 | 失败成本、被抢先 | 速度、覆盖面、资本 |
MEV:第四个玩家
回忆 §3:AMM 的输出是完全可预测的。任何人看到内存池里你的待处理交易,都能精确算出它会把价格推到哪。于是:
把 slippage 设成 3%,等于公开宣布你愿意承受 3% 的损失,攻击者会精确地吃掉接近这个上限的部分。
正确做法:根据实际池深度计算出所需的最小值,而不是"设大一点免得交易失败"。更进一步可以用 MEV 保护型 RPC,让交易不进入公开内存池。
八个常见误解
这些误解每一个都会直接导致亏损。对照检查一遍。
| 常见说法 | 为什么错 |
|---|---|
| ✕ "TVL 高 = 深度好" | V3 里 TVL 可能分散在很宽的区间上。决定深度的是当前价格附近的 L,不是总额。两个同样 $10M 的池,深度可能差 50 倍。 |
| ✕ "看到的价格就是能成交的价格" | 那是中间价,只对无穷小的订单成立。你的实际成交价必然更差,差多少取决于你的订单相对池子的大小。 |
| ✕ "无常损失会自动恢复" | 只有价格回到原点才恢复。你在任何其他时点退出,损失都是永久的。"无常"这个词本身就有误导性。 |
| ✕ "APY 20% 的池子稳赚" | APY 通常只算手续费收入,不减无常损失。高 APY 往往正是因为高波动——而高波动恰恰意味着高 IL。 |
| ✕ "滑点设大一点免得失败" | 你设的滑点就是攻击者的利润上限。设大 = 主动提高悬赏。 |
| ✕ "加大本金能提高套利利润" | 滑点随规模同步上升,而且 利润 ∝ (S−f)² 的容量由池子决定。超过最优规模后,做得越大赚得越少甚至亏。 |
| ✕ "手续费低的池子一定更划算" | 低费率档通常也意味着LP 得到的补偿少,深度可能更差。总成本 = 手续费 + 滑点,要一起算。 |
| ✕ "V3 就是更好的 V2" | V3 是用管理成本换资本效率。对于不想管理的 LP,V2 式的宽区间反而更合适。没有普遍更优,只有更适合。 |
反过来,如果流动性高度集中在当前价格,$200k 的滑点可能只有几个 bps。同样的 TVL,同样的订单,结果可以差几十倍。
唯一可靠的做法:调 Quoter 拿真实报价,或者读取 tick 分布自己逐段积分。
回到你最初的问题
现在可以回答"为什么监控价格没有意义"了——而且是从第一性原理回答。
为什么中间价不可成交
因为 P = y/x 是曲线上那一点的瞬时比值,而你的交易会让这个点滑动。中间价只对无穷小订单成立。
为什么容量由池子决定
滑点 ≈ 订单 ÷ 储备。储备就那么多,容量就那么大,和你多想下大单无关。
为什么利润随价差平方衰减
推动价格 S 所需的量 ∝ S,每单位量赚的利润也 ∝ S。两者相乘就是 S²。
为什么手续费是硬门槛
套利必须在池里成交,必然付费。价差没超过手续费,数学上就没有正利润——和速度无关。
如果结论是"套利对个人基本关闭",那么同一套数学指向了另一边:做 LP 就是站到这个等式的另一侧。
套利者赚的钱,正是 LP 亏的无常损失;LP 赚的手续费,正是交易者付的成本。你可以选择做那个被收割的被动方,也可以选择理解波动率之后主动管理区间的那个人。
后者拼的是判断力,不是毫秒。这是个人在这个系统里唯一有结构性优势的位置。
如果只做一件事
池里 100 ETH / 200,000 USDC,投入 2,000 USDC,算出你拿到 0.9901 ETH 而不是 1.0000。
那 0.0099 就是滑点的全部本质。算明白它,V2 学完八成,V3 只是在上面加一层区间。
接下来的顺序
- V2 公式(半天)—— 推导 getAmountOut,算几个不同规模的滑点
- 容量反解(半天)—— 给定滑点预算,算最大可下单金额。这是最实用的一个技能
- V3 概念层(1–2 天)—— 虚拟储备、tick、资本效率公式。先别碰定点数运算
- Quoter 实测(1 天)—— 用
staticCall调 QuoterV2,和你的手算对拍 - 选定方向 —— 用真实数据判断:继续做套利,还是转向 LP 与区间管理
三条链,三个池子,一个能跑起来的市场
前面十六章都是静态的。这一章给你一个活的市场:价格自己波动,机器人自己套利,你和它们在同一套规则下竞争。
没有任何脚本在"播放"剧情。外部参考价按几何布朗运动随机游走,噪声交易者随机下单推动池价偏离,机器人用 §8 那个平方律判据自主决策是否套利。你看到的每一个价差,都是这些机制真实作用的结果——所以你可以反过来追问它为什么出现、为什么消失。
17.1 三条链的设定
三个池子交易同一种资产(ETH/USDC),但参数不同。这些差异不是随便设的,它们会导致完全不同的行为:
| 链 | 池 TVL | 手续费 | gas | 出块 | 预期表现 |
|---|---|---|---|---|---|
| Ethereum | $40M | 5 bps | $14 | 12s | 深、慢、贵。小机会不值得动 |
| Arbitrum | $8M | 5 bps | $0.15 | 0.25s | 中深、快、便宜。套利最活跃 |
| Base | $3M | 30 bps | $0.05 | 2s | 浅、费率高。价差常驻但难赚 |
先算一个数,它决定了每条链上"价差要多大才值得动手":
为什么某些池子的价差长期挂在那里没人管?因为它没超过那个池子的盈亏平衡线。Base 上一个 25bps 的价差会稳定存在,而同样的价差在 Arbitrum 上会在几秒内被抹平。不同池子的"常驻价差水平"天然不同,这是参数决定的,不是市场效率的差异。
17.2 沙盘
下面就是那个市场。先点「开始」让它跑几十秒,只看不动手,观察三条链的池价怎么围绕外部价上下摆动、机器人什么时候出手。
① 关掉机器人,看池价怎么慢慢漂离外部价、越飘越远——这就是"AMM 不知道外面的价格"。
② 重新打开机器人,看它们怎么把三条线迅速拽回。价格准确性是被贪婪维持的,不是被协议维持的。
③ 注意 Base(黄线)总是偏离得最久——因为它的盈亏平衡线是 33.7bps,小偏离根本不值得机器人动手。
你来做这笔交易
看懂了机器人在做什么,现在换你上场。每一步都会给出计算过程、依据的原理,以及这一步对市场的影响。
这个交易台连接上面的沙盘,用的是当前真实的池子状态。市场在跑的时候数据会变——这本身就是一个重要的体验:你决策所依据的价格,可能在你决策的过程中就已经变了。
大多数人对套利的心智模型是两步:「看到价差 → 赚到价差」。真实流程有六步,而其中四步都在吃掉你的利润。走完一遍,你对"利润实现率"会有完全不同的直觉。
为什么你算的和实际拿到的差这么多
这一节把上面那笔交易的每一分钱去向拆开。这是整个沙盘最有价值的一屏。
左边是"价差 × 本金"的天真估算,右边是真实结果。中间每一段都是被吃掉的部分。拖动规模,注意净利润会先升后降,然后变成负数。
这条曲线是上面那些参数的直接后果。峰值就是你的最优下单量,越过峰值后,滑点上升的速度超过收益增长的速度。
默认参数(Base $3M → Arbitrum $8M,价差 200 bps)下:
· 最优规模只有 约 $8,000,峰值净利 约 $67;
· 下到 $50,000 时,天真估算说赚 $1,010,实际亏 $1,432——连符号都是反的;
· 下到 $400,000,亏损超过 $100,000。
200 bps 是一个巨大的价差,现实中极少出现。而它能承载的利润是 67 美元。这就是链上流动性的真实规模。
和机器人抢同一个机会
前面假设机会一直在等你。现实里它不会。这一节模拟真实的竞争环境。
价差出现的那一刻,你和几个机器人同时看到了它。谁先落地谁吃掉,后到的人面对的是已经被抹平的池子——不是少赚,是白付 gas。
把胜率调到很低时,你会发现净收益是负的,即使每次赢都赚钱。因为输掉的那些交易仍然要付 gas。
更糟的是逆向选择:你能抢到的单,往往正是机器人算完之后主动放弃的那些——可能是有毒代币、可能是有它们看到而你没看到的成本。成交率高不一定是好事。
做 LP:站到等式的另一边
同一个沙盘,同一批机器人,但这次你不是去抢价差,而是去当那个被套利的人——然后看手续费能不能补回来。
在某条链的池子里放入流动性。每一笔经过的交易给你手续费,每一次机器人套利从你手里拿走一点。两者的赛跑就是 LP 的全部经济学。
调窄区间,资本效率上去了,手续费收入随之上升——但无常损失同比放大,而且价格更容易跑出区间。跑出去之后,手续费收入直接归零,而你已经承受的损失不会退回来。
这就是 §12 说的那个权衡,现在你可以在一个真实波动的市场里亲手试。试着找到那个让净结果最大的区间宽度——你会发现它取决于波动率,而不是取决于你想赚多少。
这个沙盘想让你带走的六件事
如果前面的操作只留下六句话,应该是这些。
① 价差是有成本的信号,不是钱
价差存在,只说明"还没有人觉得值得动手"。它的大小要和那个池子的盈亏平衡线比,而不是和零比。
② 容量比价差更稀缺
200bps 的巨大价差只能承载 $8,000 和 $67 的利润。限制你的从来不是找不到机会,是机会装不下钱。
③ 天真估算会算错符号
不是"高估了利润",是把亏损算成了盈利。$50k 那一档:估算 +$1,010,实际 −$1,432。
④ 每条链有自己的门槛
21.7 / 8.9 / 33.7 bps。先看门槛再看价差,能过滤掉绝大部分无效计算。
⑤ 输掉的单也要付钱
胜率不够时,即使每次赢都赚钱,总账仍是负的。而且你能抢到的,常常是别人放弃的。
⑥ 另一边不需要抢速度
做 LP 拼的是对波动率的判断和区间管理的纪律。这是个人唯一有结构性优势的位置。
把沙盘接到现实
沙盘里所有参数都对应一个你能在链上实测的量。想把它变成真实工具,只需替换这些输入:
| 沙盘里的参数 | 现实中怎么拿 | 注意 |
|---|---|---|
| 池子状态 x, y | V2 读 getReserves();V3 读 slot0 + liquidity + tick 分布 | V3 只读 slot0 会严重出错 |
| 成交输出 | QuoterV2.quoteExactInputSingle 静态调用 | 它不是 view,必须 staticCall |
| 手续费档 | 同一对要枚举全部档位分别报价 | 深度常在你没查的那档 |
| gas 成本 | 各链 gas oracle,base + priority | 拥堵时会翻数倍,要动态取 |
| 桥费与延迟 | 桥的 quoteSend() / 报价接口 | 延迟期内价格会漂移 |
| 竞争强度 | 观察你的历史成交率 | 成交率异常高要警惕逆向选择 |
把你已经采集的历史价差,逐条用 Quoter 在你真实打算的规模上重算一遍,统计有多少条净利仍然为正。
这个比例会告诉你该继续做套利,还是转向 §21。它比继续采集新数据有用得多。