> ## 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="why-it-exists">
  为什么需要它
</h2>

两个原因，都重要。

**对敲刷量。** 和自己交易会制造成交量和成交记录，却不转移任何风险。这是一种伪造活跃度的手段，在撮合层就阻止它，意味着场所公布的成交量反映的是不同参与方之间的真实交易。

**意外自成交。** 更常见，也没那么险恶。做市商双边报价，或者同一账户下跑着好几个策略，很容易和自己的报价撞上。没有防护，两条腿都要付吃单费率，成交完了仓位却毫无变化。

<h2 id="what-happens">
  会发生什么
</h2>

撮合器一旦发现新进订单要吃的是同一账户挂着的流动性，**挂着的那笔订单就被撤销**，新进订单继续与订单簿的其余部分撮合。

<div className="dg" data-dg="self-trade-prevention">
  <div className="dg-c" style={{aspectRatio:"720 / 274"}}>
    <svg className="dg-w" viewBox="0 0 720 274" aria-hidden="true">
      <path className="dg-wire dg--blue" d="M 144.00 68.00 L 165.60 68.00" />

      <path className="dg-head dg--blue" d="M 172.00 68.00 L 165.60 72.40 L 165.60 63.60 Z" />

      <path className="dg-wire dg--green" d="M 356.00 68.00 L 382.03 35.02" />

      <path className="dg-head dg--green" d="M 386.00 30.00 L 385.49 37.75 L 378.58 32.30 Z" />

      <path className="dg-wire dg--orange" d="M 356.00 68.00 L 381.90 99.08" />

      <path className="dg-head dg--orange" d="M 386.00 104.00 L 378.52 101.90 L 385.28 96.27 Z" />

      <path className="dg-wire dg--blue" d="M 544.00 104.00 L 559.60 104.00" />

      <path className="dg-head dg--blue" d="M 566.00 104.00 L 559.60 108.40 L 559.60 99.60 Z" />
    </svg>

    <div className="dg-b dg--blue" style={{left:"0.0000%",top:"14.5985%",width:"19.4444%",height:"20.4380%"}}><span className="dg-t">新进订单</span></div>
    <div className="dg-b dg--yellow dg-round" style={{left:"24.4444%",top:"13.1387%",width:"24.4444%",height:"23.3577%"}}><span className="dg-t">会吃到自己挂着的订单？</span></div>
    <div className="dg-b dg--green" style={{left:"54.1667%",top:"2.1898%",width:"45.8333%",height:"17.5182%"}}><span className="dg-t">正常撮合</span></div>
    <div className="dg-b dg--orange" style={{left:"54.1667%",top:"27.0073%",width:"20.8333%",height:"21.8978%"}}><span className="dg-t">撤销挂着的那笔订单</span></div>
    <div className="dg-b dg--blue" style={{left:"79.1667%",top:"27.0073%",width:"20.8333%",height:"21.8978%"}}><span className="dg-t">你的订单继续吃向订单簿其余部分</span></div>
    <div className="dg-b dg--green dg-left" style={{left:"0.0000%",top:"67.8832%",width:"48.8889%",height:"22.6277%"}}><span className="dg-t">单个账户之内</span><span className="dg-s">始终拦截。没有开关，也没有参数可设。</span></div>
    <div className="dg-b dg--orange dg-left" style={{left:"51.1111%",top:"67.8832%",width:"48.8889%",height:"22.6277%"}}><span className="dg-t">子账户之间</span><span className="dg-s">不拦截——它们按设计就是彼此独立的账户。</span></div>
    <div className="dg-free" style={{left:"0.0000%",top:"54.7445%",width:"100.0000%"}}><div className="dg-n">被撤销的是挂单方，不是吃单方——并带一个专门的状态，好让自动化系统把它和普通撤单区分开。</div></div>
  </div>
</div>

撤销挂单方而不是吃单方，意味着你刚提交的订单仍然按你的意图执行，而挡在它前面的那个过期报价被移走。被撤销的订单带一个专门的状态，让你把自成交撤销和普通撤销区分开——这在任何自动化系统里都值得暴露出来，因为报价这样消失，说明你自己那套策略内部撞上了。

<h2 id="scope">
  作用范围
</h2>

防护作用在**单个账户之内**。子账户被视为彼此独立的账户，相互之间不受保护。

这条边界是有意划的，不是疏漏。子账户存在的意义就是隔离策略——风险独立、保证金独立、账目独立。真正相互独立的策略，完全可能合理地站在同一笔交易的两侧；禁止这一点，等于让一个子账户的报价悄悄卡住另一个子账户的成交。

<Note>
  如果你运行的多个策略绝不能相互成交，请把它们放在同一账户下，这样防护才会生效。如果你的策略之间可能合理地站在对立面，子账户才是正确的结构。这个决定应当主动去做，而不是事后才发现。
</Note>

<h2 id="what-it-does-not-do">
  它不做什么
</h2>

**它不保证你的订单成交。** 如果那个价位上唯一的流动性正是你自己挂的订单，撤掉它并不会凭空变出一个对手方——你的订单会继续吃向订单簿，而那边可能已经没人接了。

**它不能阻止账户之间的协同交易。** 防护是撮合层的机制，只管单个账户之内。两个不同账户互相成交，撮合器区分不出它和普通交易。

**撤销不会减少你的仓位。** 被撤销的挂单是订单，不是仓位。你的敞口毫无变化。

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

<CardGroup cols={2}>
  <Card title="撮合" href="/zh/protocol/architecture/matching">
    这项检查在区块执行的哪个位置运行。
  </Card>

  <Card title="订单类型" href="/zh/trading/order-types">
    只挂单订单，以及它们与你自己挂单之间的互动。
  </Card>

  <Card title="修改订单" href="/zh/trading/modify-orders">
    在不与自己交叉的前提下管理报价。
  </Card>

  <Card title="手续费" href="/zh/programs/fees">
    一次自成交本来会付出的吃单费率。
  </Card>
</CardGroup>
