> ## Documentation Index
> Fetch the complete documentation index at: https://docs.intention.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# 市价单与滑点保护

> 为什么市价单会以带价格上限的限价单形式提交，以及这个上限如何由三条彼此独立的约束推导出来。

市价单要的是立刻成交，订单簿给什么价就是什么价。照字面理解，这很危险：在薄的、或者跑得飞快的订单簿里，“订单簿给什么价”可能离你看到的价格很远。

Intention 不按字面提交市价单。每一笔市价单在提交时都会转成一笔**带保护性价格上限的限价单**。它照样立刻吃流动性——但会在某个价格停下，不会毫无节制地扫穿订单簿。

<h2 id="three-bounds-strictest-wins">
  三条界限，取最严的
</h2>

这个界限取三个独立推导出的价格中最保守的那个。

<div className="dg" data-dg="market-order-bound">
  <div className="dg-c" style={{aspectRatio:"720 / 330"}}>
    <svg className="dg-w" viewBox="0 0 720 330" aria-hidden="true">
      <path className="dg-wire dg-soft" d="M 113.33 145.00 L 353.64 170.33" />

      <path className="dg-head" d="M 360.00 171.00 L 353.17 174.70 L 354.10 165.95 Z" />

      <path className="dg-wire dg-soft" d="M 360.00 145.00 L 360.00 164.60" />

      <path className="dg-head" d="M 360.00 171.00 L 355.60 164.60 L 364.40 164.60 Z" />

      <path className="dg-wire dg-soft" d="M 606.67 145.00 L 366.36 170.33" />

      <path className="dg-head" d="M 360.00 171.00 L 365.90 165.95 L 366.83 174.70 Z" />

      <path className="dg-wire dg--blue" d="M 360.00 226.00 L 360.00 235.60" />

      <path className="dg-head dg--blue" d="M 360.00 242.00 L 355.60 235.60 L 364.40 235.60 Z" />
    </svg>

    <div className="dg-b dg--blue" style={{left:"0.0000%",top:"0.0000%",width:"31.4815%",height:"42.4242%"}}><span className="dg-t">你的滑点容忍度</span><span className="dg-s">买单取最优卖价 × (1 + s)，卖单取最优买价 × (1 − s)</span><span className="dg-n">默认 10%，可在 0.01% 到 10% 之间设定。这是你能控制的那条。</span></div>
    <div className="dg-b dg--yellow" style={{left:"34.2593%",top:"0.0000%",width:"31.4815%",height:"42.4242%"}}><span className="dg-t">该市场的价格带</span><span className="dg-s">任何订单都不得在带外挂出或成交</span><span className="dg-n">保护的是市场，不是你——区块内拿不到指数价格时，宁可拒单，也不让保护失效。</span></div>
    <div className="dg-b dg--orange" style={{left:"68.5185%",top:"0.0000%",width:"31.4815%",height:"42.4242%"}}><span className="dg-t">你的数量能触及的最差价格</span><span className="dg-s">按你的订单实际会消耗的深度推出</span><span className="dg-n">盘口报价不会告诉你的那条界限。</span></div>
    <div className="dg-b dg--brown dg-round" style={{left:"34.7222%",top:"53.3333%",width:"30.5556%",height:"13.9394%"}}><span className="dg-t">取三者中最严的</span></div>
    <div className="dg-b dg--blue" style={{left:"31.9444%",top:"74.5455%",width:"36.1111%",height:"21.2121%"}}><span className="dg-t">提交订单上的限价</span><span className="dg-s">买单取三者最低，卖单取最高</span></div>
  </div>
</div>

对买单，取三者中**最低**的；对卖单，取**最高**的。每一条堵住的缺口都不同，而且没有任何一条单独就够用。

<h3 id="your-slippage-tolerance">
  你的滑点容忍度
</h3>

$$
\text{买单价格上限} = \text{最优卖价} \times (1 + s) \qquad
\text{卖单价格下限} = \text{最优买价} \times (1 - s)
$$

容忍度默认 10%，可在 0.01% 到 10% 之间设定。这是你能控制的那条界限，它表达的是一个简单的指令：*不要让我成交在离盘口比这更远的地方。*

<h3 id="the-markets-price-band">
  该市场的价格带
</h3>

每个市场都围绕其参考价格强制执行一个价格带，任何订单都不得在带外挂出或成交。这对市价单同样适用——你的容忍度无法把成交推到超出市场对所有人的限制之外。

这条界限保护的是市场，不是你。没有它，一笔大额市价单打进真空，就可能打出一个价格，而这个价格还会流进别的系统。

价格带同时对标记价格和指数价格评估；配置了价格带的市场，一旦某个区块拿不到指数价格，就**宁可拒单，也不退而求其次**——已经配置好的保护，不允许悄无声息地失效。

带宽按市场配置，存在 `price_limit_ppm` 里，另有 `price_limit_x_ppm` 和 `price_limit_y_ppm` 做两段式细化。请从合约规格里读，不要从本页读。

<h3 id="a-worked-example">
  算一遍
</h3>

你向下面这个订单簿提交一笔市价买单，用 4,000 USDC 买 ETH：

| 档位 |     价格 |   数量 | 吃完这一档要花 |
| -: | -----: | ---: | ------: |
|  1 | 50,000 | 0.02 |   1,000 |
|  2 | 50,100 | 0.03 |   1,503 |
|  3 | 50,200 | 0.04 |   2,008 |

引擎一档一档往下走，把预算花完为止：

* 第 1 档花掉 1,000，剩 **3,000**
* 第 2 档花掉 1,503，剩 **1,497**
* 第 3 档有 2,008 可吃，但只剩 1,497，于是**部分成交**：1,497 ÷ 50,200 = **0.0298207 ETH**

最后你拿到 **0.0798207 ETH，均价 50,112.30**——不是盘口那个 50,000。这个差额就是滑点；它由你的数量对上这份深度决定，不是手续费。

引擎推出来的界限，就是它不得不触及的最深那一档的价格；正是这个价格，把你的市价单变成一笔挂在那里的限价单。

<h3 id="the-worst-price-your-size-would-reach">
  你的数量能触及的最差价格
</h3>

提交之前，系统会按你的订单数量所需消耗的深度去走一遍订单簿，把触及到的最深档位的价格作为一条界限。

这是三条里最微妙的一条，它处理的是另外两条覆盖不到的情形。你的容忍度是从盘口起算的，而这并不说明订单簿是否有足够深度在那附近把你填满。按你的实际数量走一遍订单簿，就把*离盘口有多远*换算成了*这笔具体的订单实际会落到哪里*。

<h2 id="what-this-means-for-you">
  这对你意味着什么
</h2>

**你的订单可能无法完全成交。** 如果订单簿在界限之内的流动性用光了，剩余部分会被撤销，而不是以更差的价格成交。市价单部分成交是保护在起作用，不是失败。

**容忍度越紧，未成交的订单越多。** 在波动市场上设 0.01%，会频繁得到部分成交甚至完全不成交。默认的 10% 是宽松的，因为没成交往往比几个基点的滑点更糟——但它*确实*宽松，而在薄市场里 10% 是一笔实实在在的钱。

**数量比容忍度更重要。** 第三条界限是从你的数量推出来的，所以不管容忍度设得多慷慨，大额订单还是被订单簿的实际深度卡住。拆分大额订单才是降低冲击的可靠办法——参见 [TWAP](/zh/trading/twap) 和[阶梯订单](/zh/trading/scale-orders)。

<Note>
  这次转换发生在提交时，使用的是那一刻的订单簿。在提交与执行之间，订单簿可能移动。这个界限保护你不去扫穿本就不存在的深度；它并不冻结市场。
</Note>

<h2 id="checking-before-you-submit">
  提交前先看一眼
</h2>

这个界限可以由公开数据算出来，所以客户端能在你确认之前把预期成交价和最坏情况摆给你看。只要订单相对可见的订单簿算大，就值得先算一次——盘口价和最差可触及价之间的差额，正是市价单藏起来的那个数。

<Warning>
  滑点保护约束的是价格，不是结果。在快速行情中，一笔本来能舒服成交的订单可能只部分成交甚至完全落空，让你在最想持有仓位的那一刻没有拿到它。要表达保护性意图，带明确触发条件的[条件单](/zh/trading/conditional-orders)比放宽容忍度的市价单更合适。
</Warning>

<h2 id="where-to-go-next">
  后续阅读
</h2>

<CardGroup cols={2}>
  <Card title="订单类型" href="/zh/trading/order-types">
    限价单、订单有效期，以及各自如何处理未成交的剩余部分。
  </Card>

  <Card title="订单簿" href="/zh/trading/order-book">
    读懂深度，以及为什么盘口价不是成交价。
  </Card>

  <Card title="TWAP" href="/zh/trading/twap">
    把大额订单沿时间拆分以降低冲击。
  </Card>

  <Card title="市场" href="/zh/trading/markets">
    各市场的价格带与最小价格变动单位。
  </Card>
</CardGroup>
