← 返回文章列表
July 29, 2026
5 分钟阅读

将清算级联作为交易信号:解读被迫且预先宣布的流量

将清算级联作为交易信号:解读被迫且预先宣布的流量
#liquidations
#cascade
#trading signal
#defi
#perpetuals
#order book
#market microstructure
#crypto

大多数市场流动在印刷之前都是秘密。全权卖家在决定时决定出售;事后你可以从磁带中了解他们的意图。杠杆清算是个例外,而且这个例外是巨大的。清算是强制的——头寸持有者对是否发生没有发言权——而且它是预先宣布的——它触发的确切价格是参数的确定性函数,这些参数是链上的、完全公开的和链下的、统计上可估计的。每一笔杠杆多头都是一个常设市场卖出订单,其价格向任何愿意计算它的人广播。

这重新构建了整个事情。 关于 Aave 和复合清算机制的配套文章 从清算人的角度处理清算——基础设施竞赛“成为”偿还坏账并收取奖金的人。本文站在交易者的角度看同一对象:不是“我如何赢得强平”,而是“其他人强平价格的总和是未来强制流动的地图,我可以根据该地图进行交易”。我们构建了两个版本的地图——一个是在链上的,一个是在 CEX perps 上的模糊的——量化清算链何时自我强化,并仔细说明由此产生的流动对价格的影响。

链上清算深度图

在货币市场上,头寸的清算价格是无法估计的。它是衍生出来的。回想一下力学入门中的健康因素:当以下情况时,头寸可以清算:

HF=iCiPiLTijDjPj<1HF = \frac{\sum_i C_i \, P_i \, LT_i}{\sum_j D_j \, P_j} < 1

CiC_i 抵押品金额, PiP_i 他们的预言机价格, LTiLT_i 清算门槛,以及 DjPjD_j P_j 债务价值。我们不会重新推导这个;我们颠倒它。以常见情况为例——单一的波动性抵押品 CC (比如 WETH)为稳定债务融资 DD (USDC)。环境 HF=1HF = 1 求解抵押品价格即可得出该头寸的触发价格

Pliq=DCLTP_{\text{liq}} = \frac{D}{C \cdot LT}

这个数字就是借款人所宣传的数字。它说:*如果 WETH 接触 PliqP_{\text{liq}} 在预言机上,这个头寸变成了强制供应。*并且该供应的规模也是可知的——在触发时,清算人会偿还 closeFactor×D\text{closeFactor} \times D 债务并扣押抵押品价值 repay×(1+bonus)\text{repay} \times (1 + \text{bonus}),大致如此

QforcedcloseFactorD(1+bonus)Q_{\text{forced}} \approx \text{closeFactor} \cdot D \cdot (1 + \text{bonus})

当头寸触发时,抵押品价值的价值进入市场(或被对冲)。

从机制入门中看具体位置:10 WETH 以 3,000 美元存入,借入 20,000 USDC,清算门槛 LT=0.83LT = 0.83,奖金5%。其触发因素是 Pliq=20,000/(10×0.83)=$2,410P_{\text{liq}} = 20{,}000 / (10 \times 0.83) = \char36 2{,}410,并以 50% 的接近系数停车 0.5×20,000×1.05=$10,5000.5 \times 20{,}000 \times 1.05 = \char36 10{,}500 以该价格强制供应 WETH。一名借款人,图表上的一根柱。对协议中的每个借款人执行此操作,将结果按 PliqP_{\text{liq}},并且您有一个直方图:作为价格函数的名义强制卖出。这就是链上清算深度图——订单簿的 DEX 原生表亲,只不过“订单”是非自愿的,并且它们的价格是计算出来的,而不是报价的。

链上清算深度图:将 Aave 和 Compound 抵押品汇总,按清算价格划分为强制抛售压力直方图,堆积在现货下方

三个诚实的警告可以防止这成为幻想:

  1. 多资产头寸没有单一触发价格。 具有两种波动性抵押品和两笔债务的头寸在价格空间的“表面”而非点上清算。实际的减少是沿着主要波动性抵押品的轴计算触发,同时将所有其他预言机价格保持在当前值。对于一项资产的变动来说这是正确的,而对于相关的篮子变动来说则是错误的——这一点很重要,因为相关的崩盘恰恰是在许多触发因素一起变动时发生的。对待单一资产 PliqP_{\text{liq}} 作为一阶边际,而不是保证。
  2. **强制出售 \neq ** 有能力的清算人不会盲目地将扣押的抵押品出售到最薄弱的可用抵押品池中;他们通过 DEX 和 CEX 进行交易,并且经常对犯罪分子进行持有和 Delta 对冲,而不是立即变现抵押品(机制入门 详细讨论了退出掉期问题)。所以 QforcedQ_{\text{forced}} 是影响价格的流量的“上限”,而不是点估计。其中一些泄漏到从未触及现场的树篱中。
  3. 触发器随预言机移动,而不是市场。 在 Aave 和Compound 上,当 预言机 交叉时,头寸即可清算 PliqP_{\text{liq}},并且预言机更新偏差和心跳节奏,落后于市场。因此,深度图是强制流“变得合格”的地图,由下一个预言传输控制——入门书详细介绍了这一微妙之处。

第三个来源位于货币市场图表和 CEX 热图之间:perp DEXs。 Hyperliquid、GMX 和 dYdX v4 像中心化交易所一样运行杠杆永续合约,但将头寸状态保留在链上或可查询的清算所中。这意味着它们的清算价格遵循与 CEX 永续合约相同的逐仓保证金公式,但根据“实际”头寸(规模、抵押品、入场额)计算,而不是根据总体 OI 估算。 Hyperliquid 的清算所状态公开了每个账户的保证金和标记价格; GMX 头寸位于链上,并通过保管人以预言机得出的价格进行清算。实际结果是:对于 Perp DEX,您可以构建一个具有 CEX 式杠杆但具有链上式精度的清算图,它更接近 Aave 图表的准确性,而不是热图的猜测。场地发布立场的地方,你永远不必猜测。

即使有这些警告,链上图表仍然是市场中任何地方都存在的最清晰的强制流动图:没有关于杠杆分布的假设,没有隐藏的大小,每个输入都可以从状态中读取。

CEX 清算热图

中心化的永续交易所给你带来相反的情况 - 更大的未平仓合约,并且几乎没有使链上图表准确的头寸级别细节。您无法阅读个别职位。您可以阅读的是合计未平仓合约和交易量。当您尝试根据这些聚合和假设重建深度图时,就会得到清算热图,并且这些假设是承载的。

每个位置的算术很简单。对于按价格输入的逐仓线性(USDT 结算)多头 EE 有杠杆 LL 和维持保证金率 mm,当权益下降到维持要求时,就会触发清算:

EL+(PE)=EmPliqlong=E(11L+m)\frac{E}{L} + (P - E) = E \cdot m \quad\Longrightarrow\quad P_{\text{liq}}^{\text{long}} = E\left(1 - \frac{1}{L} + m\right)

并且对称地 Pliqshort=E(1+1Lm)P_{\text{liq}}^{\text{short}} = E\left(1 + \frac{1}{L} - m\right)。修复一个条目 E=$3,000E = \char36 3{,}000m=0.5%m = 0.5\% 并遍历杠杆层:

杠杆 PliqlongP_{\text{liq}}^{\text{long}} 入口下方距离
2,415 美元 −19.5%
10× 2,715 美元 −9.5%
25× 2,895 美元 −3.5%
50× 2,955 美元 −1.5%
100× 2,985 美元 −0.5%

该柱形的形状就是热图在近期价格下方亮起的全部原因:高杠杆头寸在入场之内就被清算,因此无论最近交易量如何,50-100×触发器的密集带都位于不到百分之一的地方。热图构建器的作用是:将最近的交易量视为开仓位置的代理(其 EE),将该交易量分布在一组假设的杠杆层级上——5×、10×、25×、50×、100×以及一些假设的权重——将每个切片投影到其 PliqP_{\text{liq}},并用在那里清算的估计杠杆名义对价格轴进行阴影。亮带是密集的估计清算区域。

CEX 清算热图:估计杠杆名义投影到各个杠杆层的清算价格,绘制为当前价格上方和下方的水平强度带

明确说明为什么这是一张模糊图片,而不是链上图表的孪生图:

  • **杠杆分布未知。**整个热图是交易量与假设杠杆直方图的卷积。不同的假设重新定位了亮带。两家信誉良好的数据供应商在同一天针对同一市场发布了明显不同的热图,考虑到他们的先验,两者都是“正确的”。
  • 全仓保证金打破了每仓位公式。 PliqP_{\text{liq}} 以上是逐仓保证金结果。全仓保证金头寸会根据“整个账户”净值进行清算,因此其有效触发因素取决于交易者的其他头寸、未实现的盈亏以及他们在交易过程中补充的任何抵押品——这些都是不可观察到的。估计者实际上是看不到全仓保证金大小的。
  • 隐藏和动态规模。 未平仓合约是净额加总额;它不会告诉您从 OI 到各个条目的映射。交易者不断地增加、削减和对冲。分级维持保证金(mm 名义头寸上升)会在相同杠杆下改变大头寸相对于小头寸的触发因素。
  • 清算是分块的,而不是瞬时的。 交易所逐步清算大量头寸,并通过保险基金和自动去杠杆化来转移剩余风险,因此即使是正确定位的集群也不会作为一份印刷品转储。

保存热图的正确方法是作为优先于强制流可能集中的地方,通过实现的清算打印来确认或反驳( forceOrder 在下面的管道部分中流),而不是作为分类账。它确实很有用,但也确实不精确,而假装不然的话,人们就会被他们正在观察的集群碾压。为什么如此多的杠杆首先堆积在perps上——以及为什么融资成本不断将这些头寸推向触发点——请参阅[跨交易所的资金利率套利](/blog/funding-rate- Arbitage-cross-exchange)。

级联动力学,量化

单次清算就是一个数据点。 级联是反馈循环,它有一个您可以写下的阈值。这个循环是机械性的:强制抛售影响账簿→价格影响推动市场→这一举动推动下一层头寸超过其触发点→这些头寸被清算→更多的强制抛售→重复。无论这件事失败还是消失,都不是感情问题;而是问题。它是您已经构建的两个数量的比率。

部分降价工作 r=ΔP/Pr = -\Delta P / P。两种成分:

  • 清算密度 ρ\rho — 强制出售名义每单位部分价格下降,直接从深度图/热图上读取: ρ=dQ/dr\rho = -\,dQ / dr。它衡量一个价格范围内堆积了多少燃料。
  • 市场深度 Δ\Delta — 将价格移动一个单位所需的市场抛售概念 rr。在线性(凯尔)影响模型下,出售名义 QQ 将价格移动 r=Q/Δr = Q / \Delta。这是订单簿吸收强制流量的能力,这正是订单簿墙和队列位置分析所涉及的数量——“墙”是一个局部尖峰 Δ\Delta

现在迭代。外部冲击导致价格下跌 r0r_0, 触发 Q0=ρr0Q_0 = \rho \, r_0 的强制出售。抛售导致进一步下跌 r1=Q0/Δ=(ρ/Δ)r0r_1 = Q_0 / \Delta = (\rho/\Delta)\, r_0。定义级联乘数

g=ρΔg = \frac{\rho}{\Delta}

递归很简单 rn+1=grnr_{n+1} = g \, r_n。总落差是一个几何级数:

rtotal=r0(1+g+g2+)=r01g(g<1)r_{\text{total}} = r_0 \left(1 + g + g^2 + \cdots\right) = \frac{r_0}{1 - g} \quad (g < 1)

一切都存在于价值中 gg:

  • g<1g < 1次临界。 每轮清算所引发的抛售都比前一轮“少”。级联自熄;总移动量是有界倍数 1/(1g)1/(1-g) 最初的震惊。大多数清算事件都在这里。
  • g1g \ge 1超临界。 每轮至少引发与上一轮一样多的抛售。几何级数发散;其变动仅受可清算头寸耗尽、低价买入或交易所熔断的限制。这就是“闪崩/多头挤压”状态。

gg复制数R0R_0 清算流行病。报告称,当聚集在某个价格区间的强制抛售流动性超过可吸收该流动性的账面流动性时,级联就会消失。这就是为什么对一本薄书上的密集簇的适度冲击比对空白价格空间的大规模冲击要危险得多:危险在于 ρ/Δ\rho / \Delta,而不是冲击大小。这种自激结构(事件触发更多同类事件)与霍克斯流程建模订单流的结构相同,这就是清算以集群形式而不是均匀地出现的原因。

级联链:强制出售会产生价格影响,将下一组头寸推入水下,绘制为下降的楼梯,注释复制数阈值 g 等于 1

把数字放在上面。假设账簿中 1000 万美元的市场抛售使 ETH 移动了 1%,所以 Δ=10M/0.01=$1B\Delta = 10\text{M} / 0.01 = \char36 1\text{B} 名义每单位分数价格。现在比较一下点下方 1% 宽频带的两种制度:

  • **密集带,3000万美元的集群强制出售名义。然后3000万美元的集群强制出售名义。**然后 \rho = 30\text{M} / 0.01 = \char36 3\text{B}g = \rho/\Delta = 3。超临界:夹住乐队顶部的冲击会引爆整个堆栈,并且模型地板不是由。超临界:夹住乐队顶部的冲击会引爆整个堆栈,并且模型地板不是由 g$ 但无论位置用完。
  • **稀疏带,$6M 的集群概念。**然后 ρ=$600M\rho = \char36 600\text{M}, g=0.6g = 0.6,总移动量为 r0/(10.6)=2.5r0r_0 / (1 - 0.6) = 2.5\,r_0 - 放大但有限的下降。同样的冲击,同一本书,五倍薄的簇,结果从崩溃转变为可购买的灯芯。

离散版本是对排序集群的简短模拟,值得编写,因为它使阈值变得有形:

def cascade(p0, clusters, kyle_lambda):
    """
    p0:          price after the exogenous shock
    clusters:    {trigger_price: forced_notional} for long positions
    kyle_lambda: fractional price impact per $ of market sell (1/depth)
    Returns the floor price and total liquidated notional.
    """
    p, sold, fired = p0, 0.0, set()
    while True:
        new = [(tp, n) for tp, n in clusters.items()
               if tp not in fired and tp >= p]
        if not new:
            break
        q = sum(n for _, n in new)          # this round's forced sell
        fired.update(tp for tp, _ in new)
        p *= (1 - kyle_lambda * q)          # linear price impact of the round
        sold += q
    return p, sold

两个实用笔记。第一的, gg本地——它沿着价格轴变化,因为两者 ρ\rho (簇密度)和 Δ\Delta (书深度)做。可交易的问题不是“市场是否脆弱”,而是“具体价格在什么水平时会脆弱”? gg 其次,相同的机制在上涨过程中对空头来说是相反的(空头挤压是符号翻转的级联),因此该图有两个侧面:现货下方的多头清算燃料,上方的空头清算燃料。强制抛售产生价格影响产生强制抛售循环是甩卖文献(Cont&Wagalat)中形式化的内生风险机制,其中不良清算产生其自身的相关性和影响。

信号:作为磁铁和反转区的簇

强制流图会生成两个不同的、几乎相反的、可交易的读数,具体取决于相对于级联的时间

之前:集群是价格磁铁。 密集的清算集群是有保证的、对价格不敏感的流量池。这对两类参与者有吸引力:寻求流动性的交易者,他们想要填补被迫交易对手的规模,以及掠夺性交易者,他们将价格推向集群,专门引发流动(在协议规模上的止损狩猎)。其结果是,价格有一种有据可查的趋势,即“倾向于”大型集群——该水平就像磁铁一样——因为存在拉近距离的长期激励。当您看到光点在低信念下向亮带漂移时,该带本身就是解释的一部分。随着价格接近,预测订单的反应(墙会吸收流量还是折叠)正是一种短期订单簿预测问题,其模型类似于 DeepLOB 攻击。

之后:集群是反转区。 这是更有价值、更容易被滥用的读物,所以请仔细陈述。从结构上看,强制平仓流是非信息性的——卖方不出售,因为他们认为价格太高;他们出售是因为利润引擎告诉他们这样做。非信息流暂时影响价格。一旦聚集的头寸耗尽,机械抛售就会突然停止,如果在下跌过程中级联超过公允价值,价格往往会回调——“清算灯芯”。这一机制并非民间传说:这是标准结果,即强制、不知情的抛售对价格的影响具有短暂性,一旦资金流动停止,这种影响就会恢复,这与股票廉价抛售文献中产生暂时混乱和随后部分恢复的抛售逻辑相同。

清算集群首先充当价格磁铁,将点吸引到水平,然后充当反转区域,一旦强制流量耗尽,级联超调,灯芯就会回撤

尽可能简单地说明这一点所要求的纪律:

  • 级联后的均值回归是一种记录在案的趋势,而不是定律,也不是数字。 它的条件是流确实是非信息性的,并且在级联期间没有新信息到达。清算级联“也是”市场对真实新闻的重新定价(脱钩、利用、宏观冲击)不会逆转——强制流和信息流是叠加的,只有前者是短暂的。不存在普遍的“买灯芯”优势,您看到的任何特定的回归百分比,如果没有规定的样本、地点和制度,都应被视为营销。
  • 信号是耗尽,而不是下跌。 可交易的时刻是当已实现的清算打印变薄时 - 当 forceOrder 磁带在爆炸后就会安静下来——因为那时机械卖家就走了。进入超临界级联的中间(g1g \ge 1)正走在前一节所警告的反馈循环的前面。
  • 两个读数需要相同的图。 磁铁和反转是在不同阶段看到的相同簇;如果不首先构建深度图和热图并不断将它们与已实现的打印进行协调,您就无法进行交易。

双面地图的“不对称”也有较慢的定向读取。多头清算燃料位于现货下方,空头清算燃料位于现货上方;当一侧的负载比另一侧重得多时,市场就会机械地偏向重的一侧,因为这是冲击最能自我强化的流动的地方。无论叙述如何,一个多头清算墙下跌 3% 且几乎没有任何上涨的市场在结构上很容易受到下行影响——阻力最小的路径是燃料最多的路径。持续的、单边的融资往往是造成这种不对称的首要原因:支付多头以保持空头(深度负融资)的市场积累了拥挤的空头,这些空头的清算集群然后位于“高于”价格作为挤压燃料,反之亦然。融资磁带和清算图是同一杠杆的两种视图。

数据管道

该系统是两个具有相反特征的源的融合:一个前瞻性链上头寸指数(其中强制流成为合格的)和一个已实现的 CEX清算流(其中强制流现在正在打印)。一个告诉你燃料在哪里;另一个告诉你燃料在哪里。另一个告诉你它已经着火了。

前向地图 — 链上位置索引。 从 Aave/Compound 事件历史记录中引导 (Supply, Borrow, Repay, Withdraw, LiquidationCall),通过重播日志或查询 The Graph 上的子图,并将它们折叠到当前的每用户余额中 - mechanics prime 为清算机器人描述的确切索引子系统,此处重用用于聚合而不是执行。根据余额加上当前风险参数,计算每个头寸的 PliqP_{\text{liq}}QforcedQ_{\text{forced}},并将其放入深度图直方图中。刷新新区块;一旦余额生效,直方图的增量维护成本就很便宜。

实现的磁带——币安 forceOrder 流。 币安期货通过 websocket 发布实际清算, wss://fstream.binance.com/ws/!forceOrder@arr (全符号数组)或 <symbol>@forceOrder,每个事件携带强平订单的方、价格和数量。一个记录在案的陷阱,说实话,这正是一种不精确的情况:公共流被限制为每秒每个符号最多一个清算事件 - 在剧烈的级联过程中,当清算到达的速度远远快于 1/s 时,流“采样”而不是报告每次填充,因此在最重要的时候系统地从它重建的聚合清算量低估了。使用流来确定级联的“时间和方向”(它是发射,哪一侧,是加速还是变薄),而不是作为精确的交易量账本。

一个最小的摄取框架——两个异步生产者写入一个标准化总线:

import asyncio, json, websockets

async def binance_liquidations(bus):
    url = "wss://fstream.binance.com/ws/!forceOrder@arr"
    async with websockets.connect(url) as ws:
        async for msg in ws:
            o = json.loads(msg)["o"]              # order payload
            await bus.put({
                "src": "binance", "kind": "realized",
                "symbol": o["s"],
                "side": o["S"],                   # SELL = long liquidation
                "price": float(o["p"]),
                "qty": float(o["q"]),             # NB: stream is sampled at 1/s
            })

async def onchain_positions(bus, subgraph, poll=12):
    while True:
        positions = subgraph.fetch_open_positions()   # balances + risk params
        chart = {}
        for pos in positions:
            p_liq = pos.debt / (pos.collateral * pos.liq_threshold)
            q = pos.close_factor * pos.debt * (1 + pos.liq_bonus)
            chart[round(p_liq, 2)] = chart.get(round(p_liq, 2), 0.0) + q
        await bus.put({"src": "aave", "kind": "forward", "chart": chart})
        await asyncio.sleep(poll)                       # ~1 block cadence

async def main(subgraph):
    bus = asyncio.Queue()
    await asyncio.gather(
        binance_liquidations(bus),
        onchain_positions(bus, subgraph),
        consumer(bus),        # reconcile forward map vs realized tape, emit signals
    )

consumer 是策略所在:持有前向图(链上图加上估计的 CEX 热图),估计本地级联乘数 g=ρ/Δg = \rho/\Delta 对照实时订单簿深度,并观察已实现的 forceOrder 胶带检测点火和 - 可交易部分 - 耗尽。当磁带破裂然后变薄,而价格低于地图所说的集群时,就会出现非信息性超调,强制卖家消失:反转设置。当磁带加速并 g1g \ge 1 前面,你需要避开超临界级联。相同的地图,相反的动作,磁带可以实时消除它们的歧义。

带走什么

清算扭转了市场通常的信息不对称:强制抛售的价格和规模是可以提前计算的,而不是在打印之前隐藏流量 - 完全在链上,大约在 CEX perp 上。构建地图(链上深度图与路由和预言机延迟完全一致;CEX 热图是基于未知杠杆分布且对全仓保证金视而不见的先验),并且地图的脆弱性降低到一个比率:级联乘数 g=ρ/Δg = \rho/\Delta,强制销售密度与书本深度的关系,这是一个低于 1 的亚临界复制数,高于 1 则失控。信号按相位分裂——之前的簇是磁铁,之后是反转区——而反转边缘的存在只是因为强制流是非信息性的,因此是短暂的,这种记录在案的趋势在级联与真实新闻重合的那一刻就消失了。交易的是疲惫,而不是下跌;尊重 gg;永远不要将模糊热图误认为是尸体埋藏地点的分类账。

参考文献

-Qin、Zhou、Gamito、Jovanovic、Gervais (2021),DeFi 清算的实证研究:激励、风险和不稳定性。 arXiv:2106.06389。

  • Kyle, A. S. (1985),连续拍卖和内幕交易。 Econometrica 53(6) — 线性价格影响系数 λ\lambda 用于级联模型。
  • Cont, R. 和 Wagalath, L. (2016),*抛售取证:衡量内生风险。*数学金融 26(4) — 强制清算和内生相关性的价格影响。
  • Bacry, E.、Mastromatteo, I.、Muzy, J.-F. (2015),*霍克斯金融流程。*市场微观结构和流动性 1(1) — 订单和清算流的自激集群。
  • 币安期货 API 文档 — 清算订单流 (!forceOrder@arr, <symbol>@forceOrder),包括每个符号每秒 1 个事件限制注释。
  • The Graph 上的 Aave v3 和Compound III 子图;阿夫 getUserAccountData 并预留风险参数。
免责声明:本文提供的信息仅用于教育和参考目的,不构成财务、投资或交易建议。加密货币交易涉及重大损失风险。

Authors

Eugen Soloviov
Eugen Soloviov

Trading-systems engineer

Trading-systems engineer building bots since 2017: cross-exchange arbitrage (connected up to 30 venues), cointegration-based pairs arbitrage across spot and futures, scalping, news and sentiment-driven strategies, trend algorithms, and portfolio management and balancing algorithms. Also builds sub-millisecond order execution, big-data warehouses, backtesting engines, AI agents, and trading interfaces (incl. open-source profitmaker.cc). Stack: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, architecture.

Newsletter

紧跟市场步伐

订阅我们的时事通讯,获取独家 AI 交易见解、市场分析和平台更新。

我们尊重您的隐私。您可以随时退订。