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

# Orderbook

> Choose an order type and understand how it can fill.

export const LearnStyles = () => {
  useEffect(() => {
    const revealReference = () => {
      let id;
      try {
        id = decodeURIComponent(window.location.hash.slice(1));
      } catch {
        return;
      }
      if (!id) return;
      const target = document.getElementById(id);
      if (!target) return;
      let opened = false;
      for (let parent = target.parentElement; parent; parent = parent.parentElement) {
        if (parent.tagName === "DETAILS" && !parent.open) {
          parent.open = true;
          opened = true;
        }
      }
      if (opened) target.scrollIntoView({
        block: "start"
      });
    };
    const frame = requestAnimationFrame(revealReference);
    window.addEventListener("hashchange", revealReference);
    return () => {
      cancelAnimationFrame(frame);
      window.removeEventListener("hashchange", revealReference);
    };
  }, []);
  return <style>{`
.monaco-learn {
  --bg:#fff;
  --fg:#18261e;
  --body:#465149;
  --muted:#69756d;
  --line:#dce3dd;
  --accent:#233329;
  --callout:#f0f5ef;
  --amber:#9a6418;
}
.dark .monaco-learn {
  --bg:#0e1410;
  --fg:#edf3ed;
  --body:#c3cdc5;
  --muted:#9daa9f;
  --line:#344239;
  --accent:#c4dfc8;
  --callout:#1c2b20;
  --amber:#edc680;
}
.monaco-learn [data-as=p] {
  display: block;
  margin: 1.25em 0;
}
.monaco-learn .small-label {
  display: block;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: .07em;
  text-transform: uppercase;
  color: var(--muted);
  margin-bottom: 8px;
}
.monaco-learn .example,
.monaco-learn .formula {
  margin: 24px 0;
  padding: 20px;
  border: 1px solid var(--line);
  border-radius: 10px;
  background: var(--callout);
}
.monaco-learn .example strong {
  display: block;
  font-size: 19px;
  color: var(--fg);
}
.monaco-learn .example p {
  margin: 10px 0 0;
}
.monaco-learn .formula {
  font-family: monospace;
  overflow-x: auto;
}
.monaco-learn .callout {
  margin: 24px 0;
  padding: 18px 20px;
  border-left: 3px solid var(--accent);
  background: var(--callout);
  border-radius: 0 8px 8px 0;
}
.monaco-learn .callout.warning {
  border-color: var(--amber);
}
.monaco-learn .primary-link {
  display: inline-block;
  padding: 10px 18px;
  border-radius: 8px;
  background: #233329;
  color: white;
  text-decoration: none;
}
.monaco-learn .account-cards,
.monaco-learn .referral-levels {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 12px;
  margin: 24px 0;
}
.monaco-learn .account-cards > div,
.monaco-learn .referral-levels > div {
  padding: 18px;
  border: 1px solid var(--line);
  border-radius: 10px;
}
.monaco-learn .account-cards h3 {
  margin: 0 0 8px;
  font-size: 16px;
}
.monaco-learn .account-cards p {
  margin: 0;
  font-size: 14px;
}
.monaco-learn .referral-levels {
  text-align: center;
}
.monaco-learn .referral-levels strong {
  display: block;
  font-size: 32px;
  color: var(--accent);
}
.monaco-learn .referral-levels span {
  display: block;
  font-size: 12px;
}
.monaco-learn .flow {
  display: flex;
  gap: 12px;
  align-items: center;
  margin: 24px 0;
}
.monaco-learn .flow > div {
  flex: 1;
  min-width: 0;
  padding: 16px;
  border: 1px solid var(--line);
  border-radius: 10px;
}
.monaco-learn .flow b {
  display: block;
  color: var(--muted);
}
.monaco-learn .flow p {
  font-size: 13px;
  margin: 8px 0 0;
}
.monaco-learn .learn-reference {
  border: 1px solid var(--line);
  border-radius: 10px;
  padding: 20px;
  margin-top: 36px;
}
.monaco-learn .learn-reference > summary {
  cursor: pointer;
  font-weight: 600;
  color: var(--accent);
}
.monaco-learn .fee-controls {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 18px;
}
.monaco-learn .fee-tabs {
  display: flex;
  gap: 8px;
}
.monaco-learn .fee-controls button {
  cursor: pointer;
  border: 1px solid var(--line);
  border-radius: 7px;
  padding: 8px 12px;
  font-size: 13px;
  color: var(--fg);
}
.monaco-learn .fee-tabs button[aria-selected=true] {
  background: var(--callout);
  font-weight: 600;
}
.monaco-learn .fee-panel {
  overflow-x: auto;
}
.monaco-learn .fees-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 14px;
  font-variant-numeric: tabular-nums;
}
.monaco-learn .fees-table th,
.monaco-learn .fees-table td {
  padding: 12px;
  text-align: right;
  border-bottom: 1px solid var(--line);
  white-space: nowrap;
}
.monaco-learn .fees-table th:first-child,
.monaco-learn .fees-table th:nth-child(2),
.monaco-learn .fees-table td:first-child,
.monaco-learn .fees-table td:nth-child(2) {
  text-align: left;
}
.monaco-learn .fees-table caption {
  text-align: left;
  font-weight: 600;
  margin-bottom: 10px;
}
.monaco-learn button:focus-visible,
.monaco-learn input:focus-visible,
.monaco-learn summary:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 4px;
}
@media (max-width: 600px) {
  .monaco-learn .account-cards {
    grid-template-columns: 1fr;
  }
  .monaco-learn .flow {
    flex-direction: column;
    align-items: stretch;
  }
  .monaco-learn .flow > span {
    display: none;
  }
  .monaco-learn .referral-levels > div {
    padding: 14px 6px;
  }
  .monaco-learn .referral-levels span {
    font-size: 10px;
  }
}
@media print {
  .monaco-learn .fee-controls {
    display: none;
  }
  .monaco-learn .fee-panel[hidden] {
    display: block;
    margin-top: 20px;
  }
}
.monaco-learn .referral-calculator {
  margin: 30px 0;
  border: 1px solid var(--line);
  border-radius: 13px;
  padding: 25px;
  background: var(--bg);
}
.monaco-learn .calculator-heading {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 14px;
  flex-wrap: wrap;
}
.monaco-learn .calculator-heading h3 {
  font-size: 19px;
  margin: 0;
  letter-spacing: -.025em;
}
.monaco-learn .calculator-heading .small-label {
  margin-bottom: 5px;
}
.monaco-learn .unlimited-flag {
  display: inline-flex;
  align-items: center;
  border: 1px solid var(--line);
  border-radius: 30px;
  background: var(--callout);
  padding: 4px 9px;
  font-size: 10px;
  color: var(--accent);
  white-space: nowrap;
}
.monaco-learn .calculator-intro {
  font-size: 13px;
  line-height: 1.7;
  margin: 13px 0 25px;
}
.monaco-learn .calculator-grid {
  display: grid;
  grid-template-columns: minmax(0, 1.2fr) minmax(0, 1fr);
  gap: 26px;
  align-items: start;
}
.monaco-learn .referral-control {
  margin: 0 0 20px;
}
.monaco-learn .slider-label {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 8px;
}
.monaco-learn .slider-label label {
  font-size: 13px;
  font-weight: 600;
  line-height: 1.5;
  color: var(--fg);
}
.monaco-learn .slider-label label span {
  display: block;
  font-weight: 400;
  font-size: 10px;
  color: var(--muted);
  margin-top: 2px;
}
.monaco-learn .slider-label output {
  font-size: 16px;
  font-weight: 600;
  font-variant-numeric: tabular-nums;
  color: var(--accent);
  flex: none;
}
.monaco-learn .referral-calculator input[type=range] {
  display: block;
  appearance: none;
  -webkit-appearance: none;
  width: 100%;
  height: 24px;
  margin: 0;
  background: transparent;
  cursor: pointer;
  --range-fill:0%;
}
.monaco-learn .referral-calculator input[type=range]::-webkit-slider-runnable-track {
  height: 5px;
  border-radius: 5px;
  background:
    linear-gradient(
      to right,
      var(--accent) var(--range-fill),
      var(--line) var(--range-fill));
}
.monaco-learn .referral-calculator input[type=range]::-webkit-slider-thumb {
  -webkit-appearance: none;
  width: 17px;
  height: 17px;
  border-radius: 50%;
  background: var(--accent);
  border: 3px solid var(--bg);
  box-shadow: 0 0 0 1px var(--accent);
  margin-top: -6px;
}
.monaco-learn .referral-calculator input[type=range]::-moz-range-track {
  height: 5px;
  border-radius: 5px;
  background: var(--line);
}
.monaco-learn .referral-calculator input[type=range]::-moz-range-progress {
  height: 5px;
  border-radius: 5px;
  background: var(--accent);
}
.monaco-learn .referral-calculator input[type=range]::-moz-range-thumb {
  width: 12px;
  height: 12px;
  border-radius: 50%;
  background: var(--accent);
  border: 3px solid var(--bg);
  box-shadow: 0 0 0 1px var(--accent);
}
.monaco-learn .slider-scale {
  display: flex;
  justify-content: space-between;
  font-size: 10px;
  line-height: 1.5;
  color: var(--muted);
  font-variant-numeric: tabular-nums;
}
.monaco-learn .referral-calculator .calculator-help {
  font-size: 10px;
  line-height: 1.7;
  color: var(--muted);
  margin: 6px 0 0;
}
.monaco-learn .calculator-inputs > .calculator-help {
  margin: -7px 0 20px;
}
.monaco-learn .volume-control {
  border-top: 1px solid var(--line);
  padding-top: 18px;
  margin-bottom: 0;
}
.monaco-learn .volume-control .slider-label {
  flex-wrap: wrap;
  gap: 4px;
}
.monaco-learn .volume-control label {
  font-size: 12px;
}
.monaco-learn .volume-control output {
  font-size: 17px;
}
.monaco-learn .earn-estimate {
  background: var(--callout);
  border: 1px solid var(--line);
  border-radius: 10px;
  padding: 23px 20px;
  color: var(--accent);
  min-width: 0;
}
.monaco-learn .estimate-kicker {
  font-size: 10px;
  letter-spacing: .07em;
  text-transform: uppercase;
  font-weight: 600;
}
.monaco-learn .estimate-total,
.monaco-learn .estimate-annual {
  display: flex;
  align-items: baseline;
  gap: 8px;
  flex-wrap: wrap;
  line-height: 1.25;
}
.monaco-learn .estimate-total {
  margin: 14px 0 15px;
}
.monaco-learn .estimate-total output {
  font-size: clamp(24px, 2.3vw, 34px);
  font-weight: 600;
  letter-spacing: -.045em;
  font-variant-numeric: tabular-nums;
  overflow-wrap: anywhere;
}
.monaco-learn .estimate-total span,
.monaco-learn .estimate-annual span {
  font-size: 11px;
  color: var(--muted);
}
.monaco-learn .estimate-annual output {
  font-size: 23px;
  font-weight: 500;
  letter-spacing: -.03em;
  font-variant-numeric: tabular-nums;
  overflow-wrap: anywhere;
}
.monaco-learn .estimate-breakdown {
  border-top: 1px solid var(--line);
  padding-top: 17px;
  margin-top: 23px;
}
.monaco-learn .breakdown-title {
  display: block;
  font-size: 10px;
  font-weight: 600;
  margin-bottom: 10px;
  color: var(--accent);
}
.monaco-learn .estimate-breakdown > div {
  display: flex;
  justify-content: space-between;
  gap: 12px;
  font-size: 11px;
  margin: 9px 0;
  line-height: 1.5;
}
.monaco-learn .estimate-breakdown > div > span {
  color: var(--body);
}
.monaco-learn .estimate-breakdown output {
  font-variant-numeric: tabular-nums;
  text-align: right;
  overflow-wrap: anywhere;
  min-width: 0;
}
.monaco-learn .earn-estimate p {
  font-size: 10px;
  line-height: 1.7;
  color: var(--muted);
  margin: 20px 0 0;
}
.monaco-learn .calculator-assumptions {
  border-top: 1px solid var(--line);
  margin-top: 24px;
  padding-top: 16px;
  font-size: 12px;
}
.monaco-learn .calculator-assumptions summary {
  display: flex;
  justify-content: space-between;
  gap: 10px;
  list-style: none;
  cursor: pointer;
  color: var(--fg);
  font-weight: 500;
}
.monaco-learn .calculator-assumptions summary > span {
  color: var(--muted);
  font-size: 11px;
  font-weight: 400;
}
.monaco-learn .calculator-assumptions summary::-webkit-details-marker {
  display: none;
}
.monaco-learn .calculator-assumptions p {
  font-size: 11px;
  line-height: 1.8;
  margin: 12px 0 0;
}
.monaco-learn .referral-calculator .calculator-footnote {
  font-size: 10px;
  line-height: 1.8;
  color: var(--muted);
  margin: 13px 0 0;
}
@media (max-width: 600px) {
  .monaco-learn .referral-calculator {
    padding: 20px;
  }
  .monaco-learn .calculator-grid {
    grid-template-columns: 1fr;
    gap: 24px;
  }
  .monaco-learn .calculator-heading {
    gap: 10px;
  }
  .monaco-learn .calculator-heading h3 {
    font-size: 18px;
  }
  .monaco-learn .calculator-intro {
    font-size: 12px;
  }
  .monaco-learn .calculator-heading .small-label {
    font-size: 9px;
  }
  .monaco-learn .slider-label label {
    font-size: 13px;
  }
  .monaco-learn .slider-label output {
    font-size: 18px;
  }
  .monaco-learn .volume-control .slider-label {
    display: block;
  }
  .monaco-learn .volume-control output {
    display: block;
    font-size: 21px;
    margin: 6px 0;
  }
  .monaco-learn .earn-estimate {
    padding: 22px;
  }
  .monaco-learn .estimate-total output {
    font-size: 36px;
  }
  .monaco-learn .estimate-annual output {
    font-size: 27px;
  }
  .monaco-learn .estimate-breakdown > div {
    font-size: 12px;
  }
  .monaco-learn .calculator-assumptions summary {
    flex-wrap: wrap;
    gap: 4px;
  }
}
@media print {
  .monaco-learn .calculator-grid {
    grid-template-columns: 1.2fr 1fr;
  }
  .monaco-learn .referral-calculator {
    break-inside: avoid;
  }
  .monaco-learn .calculator-assumptions > * {
    display: block !important;
  }
  .monaco-learn .calculator-assumptions summary {
    display: flex !important;
  }
}
`}</style>;
};

<LearnStyles />

<div className="monaco-learn">
  Monaco uses a central limit order book. The best price executes first. At the same price, older resting orders execute before newer orders.

  Cancel requests are prioritized ahead of new orders. Monaco targets sub-millisecond matching and settles on Sei, whose single-slot finality is designed for confirmations in less than 400 ms.

  ## Market Or Limit?

  | Order | What it does | What to expect |
  | - | - | - |
  | Market | Seeks immediate execution against available liquidity within a protective band. | It can fill partially; any remainder outside the band is cancelled. |
  | Limit | Sets a quantity and a price limit. | It can rest in the book or fill immediately against available orders. |
  | Conditional | Activates when the mark price meets a condition. | TP/SL orders convert to market orders. |

  A limit order is not necessarily a maker order: it may take existing liquidity immediately. See [Fees](/fees) for how maker and taker fills differ.

  ## Market-Order Price Protection

  Standard market orders have a mandatory **1,000 bps (10%)** protective band around a reference price. The reference is the mark price on margin markets, where a perp market can replace the 1,000 bps with its own band (see [Perp price band](/trading-mechanics/perps#perp-price-band)). Otherwise, it is the median of best bid, best ask, and the recent trade price when the book is two-sided with a spread no wider than 1,000 bps; a missing or wider book uses the recent trade price alone.

  The recent trade price is the median of the last five liquidity-taking orders, counting each order once at its last fill price. New markets pad missing observations with their oldest one, so it takes three taking orders at a new level for the reference to follow.

  | Available liquidity | Result |
  | - | - |
  | Enough quantity inside the band | The order can fill within the band. |
  | Only some quantity inside the band | That portion settles; the remainder is cancelled. |
  | No quantity inside the band | The order is rejected for insufficient liquidity. |
  | No usable reference price | The order is rejected as unavailable. |

  A client can tighten the band but cannot widen it beyond 10%. Limit orders are not subject to this market-order band.

  <div className="callout">A protective band limits execution prices. It does not guarantee that the entire order will fill.</div>

  ## How Long An Order Stays Active

  | Instruction | Meaning |
  | - | - |
  | Fill-or-kill (FOK) | Execute the full quantity at the limit price or cancel. |
  | Immediate-or-cancel (IOC) | Execute the immediately available portion and cancel the rest. |
  | Good-till-cancelled (GTC) | Keep a limit order active until it fills or is cancelled, including across sessions. |

  GTC does not apply to market orders. The [Order Management reference](/developers/trade) contains payload requirements, supported combinations, and order management behavior.

  ## Previewing An Order

  Risk simulations use the same protective band and matching walk as placement. Accepted previews report simulated quantity, average and worst fill prices, slippage, and any remainder. The full reference preserves the response fields and implementation details.

  <Accordion title="Full Orderbook Reference" id="full-reference" className="learn-reference">
    <h2 id="market-design">Market Design</h2>

    Monaco uses an orderbook built for fast, transparent execution:

    * **Central Limit Order Book (CLOB):** Monaco uses a central limit order book to facilitate trades.
    * **Price-time priority:** Better prices are executed first. At the same price level, older resting orders execute before newer orders.
    * **Prioritized cancels:** Cancel requests are handled ahead of new order creation, so traders can avoid stale exposure, especially in volatile market moves.
    * **Low-latency matching:** Monaco's custom matching engine targets sub-millisecond order-matching.
    * **Fast settlement and finality:** Monaco settles on Sei, which provides single-slot finality designed for confirmations in `<400ms`.

    For account setup, see [Funding Accounts](/accounts). For deposit flows, see [Deposit tokens](/deposit/deposit-tokens).

    <h2 id="order-types">Order Types</h2>

    * **Market orders:** Execute immediately against available liquidity inside a protective price band (see [Market-order price protection](#reference-market-order-price-protection) below). They prioritize execution over price, but the band bounds how far the fill price can move.
    * **Limit orders:** Specify both quantity and a price limit. They can rest in the order book, or fill immediately if they cross available orders.
    * **Conditional orders:** This includes take-profit and stop-loss (TP/SL) orders, which convert to a market order when the mark price meets a condition.

    Use [Order Management](/developers/trade) for order payloads and order management behavior.

    <h2 id="reference-market-order-price-protection">Market-order price protection</h2>

    Every market order executes inside a mandatory server-side protective price band of 1,000 bps (10%) around a robust reference price — the market's mark price on margin markets; otherwise the median of best bid, best ask, and the recent trade price when the book is two-sided and not degenerate (its bid-ask spread is at most 1,000 bps); otherwise the recent trade price alone. The recent trade price is the median of the prices set by the market's last five liquidity-taking orders, not the single last trade, so one or two taking orders that trade far from the market do not move the band; a real move is followed from the third taking order at the new level. Each taking order counts once, at the price of its last fill, so an order that sweeps three price levels contributes one, not three, and the resting orders it fills add nothing. A market with fewer than five taking orders so far counts its oldest one in the empty places, so even a newly listed market needs three taking orders at a new level before the band follows. Fills that would occur beyond the band are cut off:

    * The portion that fills inside the band settles; any remainder is cancelled, so the order comes back partially filled.
    * If no quantity is available inside the band, the order is rejected as insufficient liquidity.
    * A market order on a market with no usable reference price (no mark, a degenerate book, and no trade history) is rejected as unavailable.

    A client `slippageToleranceBps` can only *tighten* this band; it can never widen it past the market's band. Limit orders are unaffected — use a limit order to trade beyond the band. The order-risk simulation endpoints run the same walk under the same band and surface the same rejections, so a preflight check matches placement — and because that same simulated match is what admits the order, they also return what it would execute at: `expectedMatchResult`, the engine's simulated fill in the same `MatchResult` shape a placement returns (`totalFilled`, `remainingQuantity` — the band-cut / partial-fill indicator — `averageFillPrice`, `executionPriceRange.worstPrice`, `actualSlippageBps`), plus `referencePrice` for a MARKET preview, priced under your `slippageToleranceBps` merged with the band. Present only on an accepted preview. See [Pre-trade simulation](/sdk/typescript/margin-accounts#pre-trade-simulation).

    <h2 id="time-in-force-tif">Time in Force (TIF)</h2>

    * **Fill-or-kill (FOK):** The entire order quantity must be executed at a given limit price, or it is cancelled. This is most suitable for large block trades and specific hedging mechanisms.
    * **Immediate-or-cancel (IOC):** This executes any available portion of the order, regardless of market order or limit order, and cancels the rest. This reduces the risk of resting orders in fast-moving markets.
    * **Good-till-cancelled (GTC):** Remains active until executed or manually cancelled, and applies only to limit orders, not market orders. This persists across sessions.

    Use [Order Management](/developers/trade) for order payloads and time-in-force behavior.
  </Accordion>
</div>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.