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

# 交易

> 做市商的订单提交、管理和最佳实践

做市商通过 CLOB API 与 Polymarket 交互——发布双向报价、跨市场管理库存、重新平衡仓位。SDK 客户端处理订单签名和提交,因此你可以专注于策略。

<Info>
  本页涵盖做市商特定的工作流程和最佳实践。有关完整订单机制,请参阅[创建订单](/trading/orders/create)和[取消订单](/trading/orders/cancel)。
</Info>

***

## 双向报价

核心做市工作流程是在你的公允价值附近发布买价和卖价。使用 `createAndPostOrder` 来下单每一侧:

<CodeGroup>
  ```typescript TypeScript theme={null}
  import { ClobClient, Side, OrderType } from "@polymarket/clob-client-v2";

  const client = new ClobClient({
    host: "https://clob.polymarket.com",
    chain: 137,
    signer: wallet,
    creds: credentials,
    signatureType,
    funder,
  });

  // Bid at 0.48
  const bid = await client.createAndPostOrder({
    tokenID: "3409705850427531082723332342151729...",
    side: Side.BUY,
    price: 0.48,
    size: 1000,
  });

  // Ask at 0.52
  const ask = await client.createAndPostOrder({
    tokenID: "3409705850427531082723332342151729...",
    side: Side.SELL,
    price: 0.52,
    size: 1000,
  });
  ```

  ```python Python theme={null}
  from py_clob_client_v2 import OrderArgs, OrderType
  from py_clob_client_v2.order_builder.constants import BUY, SELL

  token_id = "3409705850427531082723332342151729..."

  # Bid at 0.48
  bid = client.create_and_post_order(
      OrderArgs(token_id=token_id, side=BUY, price=0.48, size=1000),
      order_type=OrderType.GTC,
  )

  # Ask at 0.52
  ask = client.create_and_post_order(
      OrderArgs(token_id=token_id, side=SELL, price=0.52, size=1000),
      order_type=OrderType.GTC,
  )
  ```
</CodeGroup>

### 批量订单

对于跨多个价格档位的更紧密价差,使用 `postOrders` 在单个请求中提交最多 15 个订单:

<CodeGroup>
  ```typescript TypeScript theme={null}
  const orders = await Promise.all([
    client.createOrder({ tokenID, side: Side.BUY, price: 0.48, size: 500 }),
    client.createOrder({ tokenID, side: Side.BUY, price: 0.47, size: 500 }),
    client.createOrder({ tokenID, side: Side.SELL, price: 0.52, size: 500 }),
    client.createOrder({ tokenID, side: Side.SELL, price: 0.53, size: 500 }),
  ]);

  const response = await client.postOrders(
    orders.map((order) => ({ order, orderType: OrderType.GTC })),
  );
  ```

  ```python Python theme={null}
  from py_clob_client_v2 import OrderArgs, OrderType, PostOrdersV2Args
  from py_clob_client_v2.order_builder.constants import BUY, SELL

  response = client.post_orders([
      PostOrdersV2Args(
          order=client.create_order(OrderArgs(
              price=0.48, size=500, side=BUY, token_id=token_id,
          )),
          orderType=OrderType.GTC,
      ),
      PostOrdersV2Args(
          order=client.create_order(OrderArgs(
              price=0.47, size=500, side=BUY, token_id=token_id,
          )),
          orderType=OrderType.GTC,
      ),
      PostOrdersV2Args(
          order=client.create_order(OrderArgs(
              price=0.52, size=500, side=SELL, token_id=token_id,
          )),
          orderType=OrderType.GTC,
      ),
      PostOrdersV2Args(
          order=client.create_order(OrderArgs(
              price=0.53, size=500, side=SELL, token_id=token_id,
          )),
          orderType=OrderType.GTC,
      ),
  ])
  ```
</CodeGroup>

<Tip>
  批量提交通过在单个请求中提交多个报价来减少延迟。始终优先使用 `postOrders()` 而不是多次单独调用 `createAndPostOrder()`。
</Tip>

***

## 选择订单类型

| 类型      | 行为            | 何时使用           |
| ------- | ------------- | -------------- |
| **GTC** | 挂在订单簿上直到成交或取消 | 被动报价的默认选择      |
| **GTD** | 在指定时间自动过期     | 在已知事件前让报价过期    |
| **FOK** | 必须立即全部成交,否则取消 | 激进的重新平衡——全有或全无 |
| **FAK** | 立即成交可用部分,取消剩余 | 部分成交可接受的重新平衡   |

**GTC** 和 **GTD** 是被动做市的主要工具——它们以你指定的价格挂在订单簿上。**FOK** 和 **FAK** 用于针对现有流动性重新平衡库存。

### 使用 GTD 的限时报价

在已知事件(如市场关闭或判定)前自动让报价过期:

<CodeGroup>
  ```typescript TypeScript theme={null}
  // Expire in 1 hour
  const expiringOrder = await client.createAndPostOrder(
    {
      tokenID,
      side: Side.BUY,
      price: 0.5,
      size: 1000,
      expiration: Math.floor(Date.now() / 1000) + 3600,
    },
    undefined,
    OrderType.GTD,
  );
  ```

  ```python Python theme={null}
  import time
  from py_clob_client_v2 import OrderArgs, OrderType
  from py_clob_client_v2.order_builder.constants import BUY

  # Expire in 1 hour
  expiring_order = client.create_and_post_order(
      OrderArgs(
          token_id=token_id,
          side=BUY,
          price=0.50,
          size=1000,
          expiration=int(time.time()) + 3600,
      ),
      order_type=OrderType.GTD,
  )
  ```
</CodeGroup>

***

## 管理订单

### 取消

取消单个订单、按市场取消或一次性取消所有订单:

<CodeGroup>
  ```typescript TypeScript theme={null}
  await client.cancelOrder(orderId); // Single order
  await client.cancelOrders(orderIds); // Multiple orders
  await client.cancelMarketOrders(conditionId); // All orders in a market
  await client.cancelAll(); // Everything
  ```

  ```python Python theme={null}
  client.cancel(order_id=order_id)                  # Single order
  client.cancel_market_orders(market=condition_id)  # All orders in a market
  client.cancel_all()                               # Everything
  ```
</CodeGroup>

完整详情请参阅[取消订单](/trading/orders/cancel)。

### 监控未成交订单

<CodeGroup>
  ```typescript TypeScript theme={null}
  const order = await client.getOrder(orderId);

  const orders = await client.getOpenOrders({
    market: "0xbd31dc8a...",
    asset_id: "52114319501245...",
  });
  ```

  ```python Python theme={null}
  from py_clob_client_v2 import OpenOrderParams

  order = client.get_order(order_id)

  orders = client.get_orders(
      OpenOrderParams(market="0xbd31dc8a...")
  )
  ```
</CodeGroup>

***

## Tick 大小

你的订单价格必须符合市场的 tick 大小,否则会被拒绝。在报价前使用 SDK 查询:

<Note>
  世界杯 *晋级（to advance）*、*胜负（moneyline）*、*让分（spreads）* 和 *总分（totals）* 市场已被小数化为更细的 `0.0025`（0.25¢）tick 大小。此设置仅适用于这些市场，因此请始终查询 tick 大小，不要假设某个固定值。
</Note>

<CodeGroup>
  ```typescript TypeScript theme={null}
  const tickSize = await client.getTickSize(tokenID);
  // Returns: "0.1" | "0.01" | "0.001" | "0.0001"
  ```

  ```python Python theme={null}
  tick_size = client.get_tick_size(token_id)
  # Returns: "0.1" | "0.01" | "0.001" | "0.0001"
  ```
</CodeGroup>

***

## 费用

大多数市场收取少量 Taker 费用。Maker 不收取任何费用。**地缘政治和世界事件市场零费用。**

Taker 费用资助 [Maker 返利计划](/market-makers/maker-rebates)，向流动性提供者支付每日 USDC 返利。

<Note>
  费用仅适用于在激活日期当天或之后创建的市场。之前已存在的市场不受影响。启用费用的市场在市场对象上有 `feesEnabled` 设置为 `true`。
</Note>

有关完整费用表、各类别费率和计算详情，请参阅[费用](/trading/fees)。

***

## 最佳实践

### 报价管理

* **双向报价**——发布买价和卖价以获得最多[流动性奖励](/market-makers/liquidity-rewards)
* **根据库存倾斜**——根据当前仓位调整报价价格以管理风险敞口
* **取消过时报价**——市场条件变化时立即撤单
* **对事件使用 GTD**——在已知催化剂前自动让报价过期以避免过时敞口

### 延迟

* **批量订单**——使用 `postOrders()` 在单个请求中提交多个报价
* **WebSocket 获取数据**——订阅实时推送而不是轮询 REST 端点

### 风险控制

* **规模限制**——报价前检查代币余额,不要超过可用库存
* **价格保护**——根据订单簿中间价验证价格并拒绝异常值
* **紧急开关**——出现错误或仓位突破时立即调用 `cancelAll()`
* **监控成交**——订阅 WebSocket 用户频道以获取实时成交通知

***

## 下一步

<CardGroup cols={2}>
  <Card title="库存" icon="boxes-stacked" href="/market-makers/inventory">
    拆分、合并和兑换结果代币
  </Card>

  <Card title="流动性奖励" icon="gift" href="/market-makers/liquidity-rewards">
    通过提供双向流动性赚取奖励
  </Card>

  <Card title="创建订单" icon="plus" href="/trading/orders/create">
    包含所有选项的完整订单创建参考
  </Card>
</CardGroup>
