> ## 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.

# 条件单

> 在价格条件满足之前一直停在订单簿之外的订单——它们如何触发、如何联动，以及在每个环节各处于什么状态。

条件单不在订单簿上。它待在一个独立的存储里盯着某个价格，只有在触发条件满足时才变成一笔真正的订单。在那之前，它不占用任何队列位置，也不向任何人展示深度。

这个区别决定了本页的其余内容。一笔挂在簿上的限价单随时可能被撮合；条件单则根本无法被撮合——它只能被*转换*，而转换发生在区块执行内部一个确定的位置。

<h2 id="three-shapes">
  三种形态
</h2>

同一套触发机制服务于三种不同的意图，区别在于各自附着在什么上面。

| 形态        | 附着对象        | 典型用途                   |
| --------- | ----------- | ---------------------- |
| **独立**    | 无           | 价格突破某个位置时开仓            |
| **附着于订单** | 你正在下的某笔具体订单 | 在开仓那一刻同时设好止盈和止损        |
| **附着于仓位** | 你在某个市场的仓位   | 保护一个已经持有的仓位，无论它是怎么开出来的 |

第三种最不像一笔订单。它的作用范围是仓位，不是某个数量，所以仓位规模一变，它就跟着变——参见[止盈与止损](/zh/trading/tp-sl)。

<h2 id="triggering">
  触发
</h2>

决定条件单何时触发的有两件事：它盯的是哪个价格，以及这项检查发生在区块的哪个位置。

**盯哪个价格**：触发器可以盯标记价格，也可以盯最新成交价。[标记价格](/zh/trading/mark-price)经过平滑，更难被推动，所以是保护性订单更安全的默认选择；最新成交价反应更快，也更贴近你看到的成交打印，某些策略要的正是这个。这个选择逐单设定。

**在区块的哪个位置**：条件单在撮合跑起来之前先被扫描一遍，用的是区块开始时固定下来的标记价格。被本区块价格触发的订单，就在**本区块**内变成活动订单，不是下一个区块。完整的优先级顺序参见[交易排序](/zh/trading/tx-sequencing)。

<div className="dg" data-dg="conditional-trigger">
  <div className="dg-c" style={{aspectRatio:"720 / 320"}}>
    <svg className="dg-w" viewBox="0 0 720 320" aria-hidden="true">
      <path className="dg-wire dg--blue" d="M 174.00 183.00 L 199.60 183.00" />

      <path className="dg-head dg--blue" d="M 206.00 183.00 L 199.60 187.40 L 199.60 178.60 Z" />

      <path className="dg-wire dg--yellow" d="M 384.00 183.00 L 407.60 183.00" />

      <path className="dg-head dg--yellow" d="M 414.00 183.00 L 407.60 187.40 L 407.60 178.60 Z" />

      <path className="dg-wire dg--green" d="M 562.00 183.00 L 575.60 183.00" />

      <path className="dg-head dg--green" d="M 582.00 183.00 L 575.60 187.40 L 575.60 178.60 Z" />

      <path className="dg-wire" d="M 295.00 226.00 L 295.00 248.00 L 85.00 248.00 L 85.00 232.40" />

      <path className="dg-head" d="M 85.00 226.00 L 89.40 232.40 L 80.60 232.40 Z" />
    </svg>

    <div className="dg-band" style={{left:"0.0000%",top:"8.1250%",width:"100.0000%",height:"26.8750%"}}><span className="dg-cap">触发器盯的是其中之一</span></div>
    <div className="dg-b dg--green" style={{left:"2.2222%",top:"15.6250%",width:"46.6667%",height:"14.3750%"}}><span className="dg-t">标记价格</span><span className="dg-s">经过平滑，更难被推动——更安全的默认</span></div>
    <div className="dg-b dg--sky" style={{left:"51.1111%",top:"15.6250%",width:"46.6667%",height:"14.3750%"}}><span className="dg-t">最新成交价</span><span className="dg-s">反应更快，更贴近你看到的成交打印</span></div>
    <div className="dg-b dg--blue" style={{left:"0.0000%",top:"45.6250%",width:"23.6111%",height:"23.1250%"}}><span className="dg-t">停在条件单存储中</span><span className="dg-s">不占队列位置，不展示深度</span></div>
    <div className="dg-b dg--yellow dg-round" style={{left:"29.1667%",top:"45.0000%",width:"23.6111%",height:"24.3750%"}}><span className="dg-t">条件满足？</span></div>
    <div className="dg-b dg--yellow" style={{left:"58.0556%",top:"45.6250%",width:"19.4444%",height:"23.1250%"}}><span className="dg-t">转换为市价单或限价单</span></div>
    <div className="dg-b dg--green" style={{left:"81.3889%",top:"45.6250%",width:"18.6111%",height:"23.1250%"}}><span className="dg-t">在本区块撮合</span></div>
    <div className="dg-free dg-mid" style={{left:"0.0000%",top:"86.8750%",width:"100.0000%"}}><div className="dg-n">在撮合跑起来之前扫描，用的是区块开始时固定下来的标记价格。</div></div>
    <div className="dg-lbl" style={{left:"26.3889%",top:"77.5000%"}}>尚未满足 — 下个区块再查</div>
  </div>
</div>

<h2 id="linking">
  联动
</h2>

条件单很少单独行动。联动有三种模式，各有各的撤销语义。

**止盈和止损互相撤销。** 一对保护性订单是二选一（OCO）关系：任意一条腿触发，另一条会被自动撤销。不会出现你已经空仓、却还挂着一个活动止损的情况。

**附着的订单对跟着父订单走。** 如果你把止盈和止损附着在正在下的一笔订单上，这一对在父订单成交之前不会生效。父订单要是在成交前被撤销，附着的两条腿也一并消失。

**附着于仓位的订单对跟着仓位走。** 仓位一旦关闭——被你自己的订单平掉、被强平，或者被自动减仓——附着在它上面的保护性订单也会被撤销。它们存在是为了保护某个东西；那个东西没了，它们也就没了。

<Note>
  这是集成方最常搞错的地方。止损如果活得比它保护的那个仓位还久，下一次触发就会朝反方向开出一个*新*仓位。联动机制正是用来防这一手的，而且由协议强制执行，不靠下单的客户端自觉。
</Note>

<h2 id="order-states">
  订单状态
</h2>

条件单会经过一组明确定义的状态，每一次状态转换都是可观测的协议事件。

| 状态            | 含义                      |
| ------------- | ----------------------- |
| **Waiting**   | 已被接受，正在盯着触发价格           |
| **Triggered** | 条件已满足；已转换并提交撮合          |
| **Filled**    | 转换后的订单已成交               |
| **Cancelled** | 被你撤销，或因联动（同伴触发）而被撤销     |
| **Rejected**  | 校验失败，可能发生在下单时，也可能发生在转换时 |

最让人意外的状态是**在转换时被拒绝**。一笔订单可以被接受、等上几个小时、正确触发，最后仍然失败——因为条件是在转换那一刻重新检查的，不只是在下单时检查。保证金可能已经不够了；一笔只减仓的条件单可能已经没有仓位可减了。触发确实发生了，只是由此产生的订单没能活下来。

<h2 id="checks-at-placement-and-at-conversion">
  下单时与转换时的检查
</h2>

两套不同的规则在两个不同的时点生效。

**下单时**，协议会检查触发价格在你指定的方向上说不说得通——一下单就会触发的止损是失误，不是策略——以及触发价离当前价格是不是还在允许范围之内。未成交订单数量上限和频率限制也在这里生效。

**转换时**，会按你当时的实际仓位重新算保证金够不够、重新检查只减仓约束；条件市价单和任何市价单一样，同样受滑点保护约束。参见[市价单与滑点保护](/zh/trading/market-to-limit)。

<Warning>
  条件单不保证成交。它保证的是条件满足时会有一笔订单被*提交*。在快速行情中，产生的订单可能在远离触发价的位置成交，或者——如果转换成的是限价单——根本不成交。保护性订单能降低跳空带来的敞口，但消除不了它。
</Warning>

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

<CardGroup cols={2}>
  <Card title="止盈与止损" href="/zh/trading/tp-sl">
    两种保护性形态，以及仓位变化时各自的行为。
  </Card>

  <Card title="标记价格" href="/zh/trading/mark-price">
    大多数保护性触发器应当盯的价格，以及它为什么要平滑。
  </Card>

  <Card title="交易排序" href="/zh/trading/tx-sequencing">
    触发扫描相对于撤单和新订单处在什么位置。
  </Card>

  <Card title="订单类型" href="/zh/trading/order-types">
    条件单会转换成什么。
  </Card>
</CardGroup>
